Die Watson IoT-Plattform (Internet of Things Platform, im Folgenden WIOTP) ist eine Plattform für IoT, die auf der IBM Cloud basiert. Es bietet verschiedene Funktionen wie das Sammeln, Sammeln und Visualisieren von Daten, die von Geräten wie Sensoren stammen. Das offizielle SDK zum Verbinden von Geräten und Anwendungen wird bereitgestellt, und Daten können über MQTT gesendet und empfangen werden. In diesem Artikel wird erklärt, wie das geht.
Zunächst werde ich das Konzept der von WIOTP behandelten "Dinge" erläutern. WIOTP definiert die folgenden drei Arten von "Dingen", die verbunden werden sollen, und die Funktionen und Verbindungsmethoden, die implementiert werden können, unterscheiden sich jeweils.
--Anwendung --Gerät --Tor
Die Anwendung kann die meisten Funktionen der drei Dinge verwenden, das vom Gerät gesendete Ereignis empfangen und für den Dienst verwenden oder das Ereignis als Gerät selbst senden. Um es als Anwendung zu implementieren, muss im Voraus ein API-Schlüssel in der WIOTP-Konsole ausgegeben werden. Durch die Authentifizierung mit dem API-Schlüssel beim Herstellen einer Verbindung zu WIOTP kann die verbundene Anwendung von WIOTP identifiziert werden. Darüber hinaus definiert WIOTP den erwarteten Anwendungstyp, und Sie können die Funktionen einschränken, die verwendet werden können, indem Sie den Anwendungstyp für jeden API-Schlüssel auswählen.
Sie können die folgenden Funktionen in Ihrer Anwendung verwenden:
Die Aufgabe des Geräts besteht darin, die vom Sensor usw. erhaltenen Umgebungsinformationen an WIOTP zu senden. Um es als Gerät zu implementieren, müssen Sie den Gerätetyp und die Geräte-ID in der WIOTP-Konsole im Voraus festlegen und die Geräte-ID so festlegen, dass sie für jedes Gerät eindeutig ist. Mit WIOTP können Sie anhand der Geräte-ID identifizieren, welches Gerät die Verbindungsanforderung oder Datenübertragung durchgeführt hat.
Die folgenden Funktionen sind auf Ihrem Gerät verfügbar:
Wenn mehrere Geräte desselben Typs und derselben Rolle vorhanden sind, besteht die Rolle des Gateways darin, Daten zwischen ihnen und WIOTP weiterzuleiten. Auf diese Weise kann WIOTP die von mehreren Geräten gesendeten Daten so behandeln, als ob sie von einem Gerät (Gateway) gesendet wurden, was die Verarbeitung der Daten erleichtert. Wie bei Geräten muss das Gateway den Gerätetyp und die Geräte-ID im Voraus auf der WIOTP-Konsole festlegen. Es wird als eines der Geräte in WIOTP behandelt.
Die folgenden Funktionen stehen auf dem Gateway zur Verfügung:
Wir werden das offizielle SDK tatsächlich verwenden, um eine Beispiel-App zu erstellen, die regelmäßig Ereignisse an WIOTP sendet und empfängt. Dieses Mal erstellen wir den Absender als Gerät und den Empfänger als Anwendung.
Registrieren Sie das Gerät, das zur Implementierung des Geräts erforderlich ist.
--Öffnen Sie eine Instanz der Watson IoT Platform und öffnen Sie "Geräte" aus dem Menü auf der linken Seite des Bildschirms. ――Die Seite mit der Aufschrift "Nach Gerät suchen" wird angezeigt. Klicken Sie oben rechts auf die Schaltfläche "Gerät hinzufügen".
--Stellen Sie einen beliebigen Wert für "Gerätetyp" und "Geräte-ID" ein und klicken Sie auf die Schaltfläche "Weiter".
Klicken Sie auf der nächsten Seite einfach auf die Schaltfläche "Weiter", ohne etwas einzugeben.
Die Seite "Automatisch generiertes Authentifizierungstoken" wird angezeigt. Das "Authentifizierungstoken" kann automatisch generiert oder auf einen beliebigen Wert gesetzt werden. Klicken Sie nach dem Einstellen auf die Schaltfläche "Weiter".
Der Zusammenfassungsbildschirm wird angezeigt. Klicken Sie auf die Schaltfläche "Fertig stellen".
Die Geräteregistrierung ist abgeschlossen, wenn die Seite "Geräte-Drilldown" angezeigt wird. Notieren Sie sich die hier angezeigten Informationen, da Sie sie später verwenden werden.
Geben Sie den API-Schlüssel aus, der zum Implementieren der Anwendung erforderlich ist. Weitere Informationen finden Sie unter "1. Ausgabe von API-Schlüsseln" im folgenden Artikel. https://qiita.com/Motonaga/items/6304f5f66f63cb566943
Implementieren Sie das sendende Gerät.
publish.py
import wiotp.sdk.application
import time
import json
##Betten Sie verschiedene Parameter für "Gerät", die in WIOTP festgelegt wurden, in Konfigurationsinformationen (Optionen) im JSON-Format ein.
org_id = "xxxx" #WIOTP-Organisations-ID
device_id = "sample_id" #"Geräte-ID" im Voraus eingestellt
device_type = "sample_type" #"Gerätetyp" im Voraus eingestellt
token = "sample-token" #"Authentifizierungstoken" im Voraus festgelegt
event_id = "sample" #Die Kennung des zu sendenden Ereignisses. Es kann ein beliebiger Wert eingestellt werden. Stellen Sie den gleichen Wert wie auf der Empfangsseite ein
options = {
"identity": {
"orgId": org_id,
"typeId": device_type,
"deviceId": device_id
},
"auth": {
"token": token
}
}
#Stellen Sie mit dem SDK eine Verbindung zu WIOTP als "Gerät" her
client = wiotp.sdk.device.DeviceClient(options, logHandlers=None)
client.connect()
#Alle 2 Sekunden{count}Wird erhöht und an WIOTP gesendet
myData = {'message': 'foo', 'count': 0}
while True:
print("data published: ", json.dumps(myData))
client.publishEvent(event_id, "json", myData)
myData['count'] += 1
time.sleep(2)
Implementieren Sie die empfangende Anwendung.
subscribe.py
import wiotp.sdk.application
import json
import time
app_id = "sample_app" #Anwendungskennung. Stellen Sie einen beliebigen Wert ein
app_auth_key = "xxxx" #API-Schlüssel der von WIOTP ausgegebenen Anwendung
app_auth_token = "xxxx" #Von WIOTP ausgestelltes Anwendungsauthentifizierungstoken
#Betten Sie verschiedene Parameter für "Anwendung", die in WIOTP festgelegt wurden, in Konfigurationsinformationen (Optionen) im JSON-Format ein.
options = {
"identity": {
"appId": app_id
},
"auth": {
"key": app_auth_key,
"token": app_auth_token
}
}
#Stellen Sie mit dem SDK eine Verbindung zu WIOTP als "Anwendung" her
client = wiotp.sdk.application.ApplicationClient(options, logHandlers=None)
client.connect()
#Stellen Sie die Rückruffunktion ein, wenn ein Ereignis empfangen wird. Hier werden die empfangenen Ereignisinformationen in die Standardausgabe geschrieben.
def event_callback(event):
#Der Hauptteil der empfangenen Daten ist ein Ereignis.Kann mit Daten erhalten werden
print("{} event '{}' received from device [{}]: {}".format(event.format, event.eventId, event.device, json.dumps(event.data)))
client.deviceEventCallback = event_callback
#Stellen Sie die Parameter des zu abonnierenden Geräts ein (dieselben wie der Absender) und starten Sie Abonnieren
device_id = "sample_id" #"Geräte-ID" im Voraus eingestellt
device_type = "sample_type" #"Gerätetyp" im Voraus eingestellt
event_id = "sample" #Die Kennung des zu empfangenden Ereignisses. Es kann ein beliebiger Wert eingestellt werden. Machen Sie den gleichen Wert wie der Absender
client.subscribeToDeviceEvents(typeId=device_type, deviceId=device_id, eventId=event_id)
#Führen Sie eine Schleife aus, um die App am Laufen zu halten
while True:
time.sleep(3)
Wenn Sie sowohl den Sender als auch den Empfänger ausführen, erhalten Sie die folgenden Ergebnisse und können bestätigen, dass die Daten wie erwartet über MQTT gesendet und empfangen werden können.
WIOTP-Gerätekonsole (zeigt den Inhalt der gesendeten Ereignisse an)
Empfangskonsole
$ python subscribe.py
2019-12-23 15:41:58,308 wiotp.sdk.application.client.ApplicationClient INFO Connected successfully: a:a54k3u:sample_app
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 0}
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 1}
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 2}
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 3}
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 4}
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 5}
json event 'sample' received from device [sample_type:sample_id]: {"message": "foo", "count": 6}
In diesem Artikel habe ich das Konzept der "Dinge" erklärt, die eine Verbindung zur Watson IoT Platform herstellen, und erklärt, wie eine Verbindung mit dem offiziellen SDK hergestellt wird. In Bezug auf die Verbindungsmethode habe ich den Absender als Gerät und den Empfänger als Anwendung erstellt, aber wenn ich ihn im eigentlichen Bereich verwende, denke ich, dass es viele Implementierungen geben wird, bei denen mehrere Geräte vom Gateway weitergeleitet werden.
Recommended Posts