[PYTHON] Utilisons un peu plus Watson IoT Platform Data Store Connector

Le connecteur de magasin de données (DSC) fourni par Watson IoT Platform est excellent en ce sens qu'il peut collecter automatiquement des informations collectées à partir d'appareils IoT dans une base de données externe.

Il peut être configuré facilement à l'aide du SDK d'application et de l'exemple de code fourni par IBM, mais il y a un sentiment qu'il y a un petit manque d'informations dans le fonctionnement pratique, donc je vais résumer les résultats de mes propres recherches.

1 Environnement

Python 3.7 wiotp-sdk 0.11.0 (peut être installé avec pip3)

2 Préparation et exécution d'un exemple de code

2.1 Hypothèses

Cette fois, Cloudant est utilisé comme destination de connexion de DSC, et on suppose que le travail suivant a été terminé. --Créer un compte IBM Cloud --Créez et exécutez les services Watson IoT Platform --Créez et exécutez des services Cloudant

Il existe de nombreux écrits détaillés sur la façon de travailler, je les omettrai donc ici. Il y en a beaucoup à Qiita, alors cherchons.

2.2 Générer la clé et le jeton d'authentification Watson IoT Platform

Ensuite, générez une clé d'authentification et un jeton pour Watson IoT Platform. Ceci est utilisé pour l'authentification lorsque le code à exécuter utilise wiotp-sdk pour appeler l'API fournie par Watson IoT Platform.

Voir ci-dessous pour plus d'informations. https://developer.ibm.com/jp/tutorials/iot-generate-apikey-apitoken/

En particulier, les jetons ne sont affichés que lorsqu'ils sont générés, alors notez la chaîne de caractères imprimée à l'écran.

2.3 Informations d'identification du service Cloudant

Suivez les étapes ci-dessous pour vérifier votre nom d'utilisateur et votre mot de passe dans vos informations d'identification de service Cloudant. https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-creating-an-ibm-cloudant-instance-on-ibm-cloud&locale=ja#locating-your-service-credentials

Remarque) Il semble qu'il propose deux types de méthodes d'authentification cloudant ces jours-ci, mais le code traité dans cet article doit être sélectionné lorsque «Utiliser à la fois les informations d'identification héritées et IAM» est sélectionné lors de l'approvisionnement (création) du service. L'exécution ne fonctionne pas.

Le nom d'utilisateur et le mot de passe confirmés ici sont transmis à Watson IoT Platform via la liaison de service du SDK d'application et utilisés pour l'authentification lorsque Watson IoT Platform écrit des données dans Cloudant.

2.4 Exécution d'un exemple de code

Le lien ci-dessous contient un exemple de code pour configurer un DSC pour se connecter à Cloudant.

https://www.ibm.com/support/knowledgecenter/SSQP8H/iot/platform/reference/dsc/cloudant.html

Réécrivez le nom d'utilisateur et le mot de passe dans serviceBinding avec ceux confirmés dans 2.3 et exécutez.

# export WIOTP_AUTH_KEY='kkkkkkkkkkk'
# export WIOTP_AUTH_TOKEN='tttttttttttttttt'
# python sample.py

Dans l'exemple d'exécution ci-dessus, l'exemple de code (sample.py) est exécuté à l'aide de la clé d'authentification et du jeton générés dans 2.2. Définissez respectivement la clé d'authentification et le jeton sur WIOTP_AUTH_KEY et WIOTP_AUTH_TOKEN avant d'exécuter l'exemple de code.

3 Utilisez un peu plus

En exécutant l'exemple de code comme dans 2.4, tous les événements signalés à Watson IoT Platform seront enregistrés dans la base de données de Cloudant.

Si vous lisez un peu plus attentivement le contenu de l'exemple de code ici,

--Générer la liaison de service --Créer un connecteur en le liant à la liaison de service --Générer la détermination et la règle en tant que propriétés de connecteur

Vous pouvez voir que certains DSC créent les objets nécessaires à partir de rien de tel.

Cela vous amènera de l'état au point où cela fonctionne pour le moment, mais il semble que vous aurez besoin d'une procédure pour vérifier ou modifier la configuration actuelle afin de la maîtriser sur le principe du fonctionnement réel.

Ci-dessous, je vais essayer quelques étapes qui semblent être le minimum nécessaire pour maîtriser DSC pour le moment.

3.1 Liste des différents objets

Il est essentiel pour le fonctionnement de comprendre quels sont les paramètres actuels. J'ai écrit un programme pour afficher une liste des liaisons de service et des DSC.

ApplicationClient.ServiceBindings, ApplicationClient.dsc, etc. sont bouclés par l'itérateur, mais soyez prudent car l'utilisabilité est différente de la liste normale. Par exemple, lorsque j'essaie de vérifier combien sont stockés à l'aide de len (), 0 est renvoyé.

ls_dsc.py


import wiotp.sdk.application

options = wiotp.sdk.application.parseEnvVars()
appClient = wiotp.sdk.application.ApplicationClient(options)

print("Service Bindings")
for s in appClient.serviceBindings:
    print("ID: " + s.id)

print("")
print("DSC")
for c in appClient.dsc:
    print("ID: " + c.id)
    print("serviceId: " + c.serviceId)
    for d in c.destinations:
        print("Destination.name: " + d.name)
    for r in c.rules:
	print("Rules.id: " + r.id)
        print("Rules.name: " + r.name)
        print("Rules.destinatioName: " + r.destinationName)
        print("Rules.typeId: " + r.typeId)
        print("Rules.eventId: " + r.eventId)

Voici les résultats de l'exécution dans mon environnement.

# export WIOTP_AUTH_KEY='kkkkkkkkkkkkkkkkkkk'
# export WIOTP_AUTH_TOKEN='tttttttttttttttttt'
# python ls_dsc.py
Service Bindings
ID: d2b141eb-2390-4fa0-b253-24b14c465298
ID: 5aa553e6-692c-45fd-ba2c-a717a635d5bb
ID: 85cb36b6-eda7-48b0-bc5a-6eb2c2f03619
ID: ae5a431d-98f6-4c9b-9ffc-a3ba9206770e
ID: 4f905b29-70ce-4f01-a2c6-9feb1c2d3e4a
ID: 137becb6-502a-4919-83da-079a434a7175

DSC
ID: 5db2d160f7e0960025221b51
serviceId: 4f905b29-70ce-4f01-a2c6-9feb1c2d3e4a
Destination.name: events
ID: 5db2d1b8f7e0960025221b52
serviceId: 137becb6-502a-4919-83da-079a434a7175
Destination.name: events
Rules.id: 5db2d1bbf7e0960025221b53
Rules.name: allevents
Rules.destinatioName: events
Rules.typeId: *
Rules.eventId: *

J'ai modifié l'exemple de code de 2.4 afin que seules les notifications d'événements soient envoyées à Cloudant, mais à la suite d'essais et d'erreurs au milieu, la liaison de service et le DSC inutiles restent.

Il existe deux DSC, mais celui répertorié en premier (ID = 5db2d160f7e0960025221b51) est celui dont les règles semblent vides et ne fonctionnent pas. Il reste incomplet car l'exemple de code s'est terminé anormalement avant la création de la règle. L'autre (ID = 5db2d1b8f7e0960025221b52) a à la fois la destination / les règles déjà créées et fonctionne.

Six liaisons de service ont été créées, mais le DSC valide utilise celui pointé par dsc.serviceId (ID = 137becb6-502a-4919-83da-079a434a7175), et les cinq autres Est toujours inutile.

Si vous utilisez ce ls_dsc.py, vous serez en mesure de saisir l'état des paramètres de DSC. Actuellement, seules les propriétés minimales sont affichées, mais je pense qu'il vaut mieux ajouter les propriétés à afficher au besoin.

Maintenant qu'il peut être affiché, nous allons supprimer les objets inutiles.

3.2 Supprimer les objets inutiles

J'ai cherché un moyen de supprimer les objets indésirables à l'aide du SDK Python, mais je n'en ai pas trouvé. Si vous le supprimez avec l'API REST, c'est OK, je vais donc le supprimer directement en utilisant curl.

Il semble que la liaison de service utilisée par le DSC ne peut pas être supprimée, supprimez donc d'abord le DSC inutile, puis supprimez la liaison de service inutile.

Consultez les liens ci-dessous pour plus d'informations sur l'API REST. https://docs.internetofthings.ibmcloud.com/apis/swagger/v0002/historian-connector.html#/Services

Le nom d'utilisateur / mot de passe utilisé pour l'authentification spécifie la clé d'authentification et le jeton créés en 2.2. Remplacez oooooo dans l'URL spécifiée par l'API REST par l'ID d'organisation Watson IoT Platform.

# curl -X DELETE --user 'kkkkkkkkkkkkkkkkkkk:tttttttttttttttttt' https://oooooo.internetofthings.ibmcloud.com/api/v0002/historianconnectors/5db2d160f7e0960025221b51
# curl -X DELETE --user 'kkkkkkkkkkkkkkkkkkk:tttttttttttttttttt' https://oooooo.internetofthings.ibmcloud.com/api/v0002/s2s/services/5aa553e6-692c-45fd-ba2c-a717a635d5bb
# curl -X DELETE --user 'kkkkkkkkkkkkkkkkkkk:tttttttttttttttttt' https://oooooo.internetofthings.ibmcloud.com/api/v0002/s2s/services/d2b141eb-2390-4fa0-b253-24b14c4652
# curl -X DELETE --user 'kkkkkkkkkkkkkkkkkkk:tttttttttttttttttt' https://oooooo.internetofthings.ibmcloud.com/api/v0002/s2s/services/85cb36b6-eda7-48b0-bc5a-6eb2c2f03619
# curl -X DELETE --user 'kkkkkkkkkkkkkkkkkkk:tttttttttttttttttt' https://oooooo.internetofthings.ibmcloud.com/api/v0002/s2s/services/ae5a431d-98f6-4c9b-9ffc-a3ba9206770e
# curl -X DELETE --user 'kkkkkkkkkkkkkkkkkkk:tttttttttttttttttt' https://oooooo.internetofthings.ibmcloud.com/api/v0002/s2s/services/4f905b29-70ce-4f01-a2c6-9feb1c2d3e4a
# export WIOTP_AUTH_KEY='kkkkkkkkkkkkkkkkkkk'
# export WIOTP_AUTH_TOKEN='tttttttttttttttttt'
# python ls_dsc.py
Service Bindings
ID: 137becb6-502a-4919-83da-079a434a7175

DSC
ID: 5db2d1b8f7e0960025221b52
serviceId: 137becb6-502a-4919-83da-079a434a7175
Destination.name: events
Rules.id: 5db2d1bbf7e0960025221b53
Rules.name: allevents
Rules.destinatioName: events
Rules.typeId: *
Rules.eventId: *

Après l'avoir supprimé, j'ai exécuté à nouveau ls_dsc.py pour vérifier le résultat. Les liaisons de service et DSC inutiles ont été supprimées et sont en cours d'actualisation.

Maintenant que nous savons que la liaison de service et le DSC peuvent être supprimés, il est possible de modifier divers paramètres par «supprimer» et «créer un nouveau». J'ai pu confirmer les fonctions minimales requises pour installer et paramétrer DSC, mais il me semble difficile de "supprimer" et de "créer un nouveau" à chaque fois, donc je vais également vérifier comment mettre à jour la configuration.

3.3 Mise à jour de la configuration

Il est probable que vous souhaitiez modifier la configuration du DSC une fois généré en raison d'essais et d'erreurs au stade initial de la mise en œuvre ou de modifications des spécifications. Il semble que diverses propriétés spécifiées lors de la génération de liaison de service, DSC, destinations et règles incluses dans DSC peuvent être modifiées à l'aide de la méthode update ().

Pour le moment, aucun document avec des spécifications n'a été trouvé. Je viens de lire le code source et je l'ai découvert. Le code pour modifier la règle est illustré ci-dessous à titre d'exemple, mais veuillez noter qu'il peut ne pas fonctionner en raison de modifications futures du SDK Python.

update_rule.py


import wiotp.sdk.application

options = wiotp.sdk.application.parseEnvVars()
appClient = wiotp.sdk.application.ApplicationClient(options)

# Get connector instance with its ID (=5db2d1b8f7e0960025221b52) as a key
c = appClient.dsc['5db2d1b8f7e0960025221b52']

# Update rule (ID=5db2d1bbf7e0960025221b53)
s = {
    'deviceType' : '*',
    'eventId' : 'bar'
}
c.rules.update(ruleId='5db2d1bbf7e0960025221b53', ruleType='event', name="allevents", destinationName="events", description="A sample rule", enabled=True, selector=s)

Dans l'exemple ci-dessus, seul eventId passe de «*» à «bar».

Pour appClient.dsc, spécifiez l'ID DSC (5db2d1b8f7e0960025221b52 dans cet exemple) comme clé pour obtenir l'instance DSC correspondant à l'ID. Vous pouvez mettre à jour la règle en appelant update () sur les règles de cette instance. Spécifiez l'ID de la règle que vous souhaitez mettre à jour dans le premier argument de cette méthode update () et définissez les propriétés de la règle que vous souhaitez mettre à jour dans le reste. Il semble que la propriété qui n'est pas mise à jour est également appelée en définissant la valeur actuelle. Il est un peu difficile de spécifier l'argument du sélecteur, mais quand je lis le code source et les spécifications de l'API REST appelées par le SDK Python, il semble qu'il soit défini comme ceci.

Voici les résultats de l'exécution.

# export WIOTP_AUTH_KEY='kkkkkkkkkkkkkkkkkkk'
# export WIOTP_AUTH_TOKEN='tttttttttttttttttt'
# python ls_dsc.py
Service Bindings
ID: 137becb6-502a-4919-83da-079a434a7175

DSC
ID: 5db2d1b8f7e0960025221b52 <- !!!ID DSC
serviceId: 137becb6-502a-4919-83da-079a434a7175
Destination.name: events
Rules.id: 5db2d1bbf7e0960025221b53 <- !!!ID de règle
Rules.name: allevents
Rules.destinatioName: events
Rules.typeId: *
Rules.eventId: * <- !!!Changer avant
# python update_rule.py <- !!!Changement
# python ls_dsc.py
Service Bindings
ID: 137becb6-502a-4919-83da-079a434a7175

DSC
ID: 5db2d1b8f7e0960025221b52
serviceId: 137becb6-502a-4919-83da-079a434a7175
Destination.name: events
Rules.id: 5db2d1bbf7e0960025221b53
Rules.name: allevents
Rules.destinatioName: events
Rules.typeId: *
Rules.eventId: bar <- !!!Après le changement

4 Résumé

J'ai présenté comment vérifier / supprimer / modifier les paramètres DSC à l'aide du SDK Python.

Encore une fois, il existe certaines méthodes qu'IBM n'a pas explicitement guidées, et toute utilisation du code illustré dans cet article est à vos propres risques. Notez également que les futures modifications apportées à l'implémentation du SDK Python peuvent entraîner l'arrêt de ces codes.

Le plus sûr est de l'implémenter à l'aide de l'API REST, mais l'utilisation du SDK Python est plus simple et plus facile à coder. J'espère que le SDK Python évoluera vers une forme plus conviviale à l'avenir.

L'article suivant de Qiita peut être utile pour savoir comment configurer à l'aide de l'API REST, donc si vous êtes intéressé, veuillez vous y référer. https://qiita.com/Motonaga/items/6304f5f66f63cb566943

Recommended Posts

Utilisons un peu plus Watson IoT Platform Data Store Connector
Envoyez et recevez des données avec MQTT via Watson IoT Platform
Un peu plus sur le FIFO