B.One Middleware Howto: Anbindung an die IoT Plattform TagoIO

Du möchtest weiterlesen?
Dann melde dich jetzt an oder registriere dich.
Anmelden Registrieren
– 📖🕓 ≈ < 1 min – Im Rahmen einer Kundenanfrage zur Verwendung von Sensoren und Messung der Bodenfeuchte kam die Idee auf, die Daten der Sensoren mit externen Daten auf der…
– 📖🕓 ≈ 2 min – Also ich bin ja ein Landei und meine “Hood” liegt mitten im Gäu. Der Obst- und Zwetschengürtel von Herrenberg bis Tübingen. Gäu halt. Die Landschaft…
– 📖🕓 ≈ 3 min – Mit einer der Faktoren was die Empfangsreichweite von LoRaWAN Gateways angeht ist natürlich der Einbauort. Im Rahmen der ersten Versuche mit dem neuen ZENNER IoT…
Wie ihr vielleicht schon wisst, lässt sich die vielseitige B.One Middleware flexibel an verschiedene IoT Systeme anbinden. In der folgenden kleinen Beitragsserie möchte ich einmal am Beispiel von TagoIO, Thingsboard und Kaa mit euch teilen, wie genau das funktioniert. In den Beiträgen werde ich jeweils darauf eingehen, wie man einen Sensor auf der Plattform anlegt, wie man die Middleware an diese Plattform anbindet (http oder mqtt) und zu guter Letzt, wie man die Daten auf sogenannten Dashboards visualisieren kann. Starten werde ich dabei heute mit der Plattform TagoIO.
Bevor ich jedoch zu den eingangs angesprochen Punkten komme, noch eine kurze Einführung zu TagoIO. TagoIO ist eine Open Source IoT Plattform zum Sammeln, Verarbeiten und Visualisieren von Daten. In der kostenfreien Version begrenzt die Plattform die Anzahl der Geräte/Sensoren, die wir uns anzeigen lassen können. In dieser Anleitung zeige ich euch jedoch einen Weg, wie ihr letzteres ganz einfach umgehen könnt.
Bevor es losgehen kann, müsst ihr euch natürlich erst auf der Plattform registrieren. Wie eingangs erwähnt, gibt es hierbei eine kostenfreie Version, bei der es aber im Vergleich mit den kostenpflichtigen Varianten zu einigen Einschränkungen kommt. Zum Erstellen unseres ersten Device im Eingangsmenü links oben auf Devices klicken und das Custom MQTT Device wählen. Anschließend können wir dem Device noch einen Namen geben.
Das eben erstellte Device dient nun als eine Art “digitaler Zwilling”, der das wirklich sendende physische Gerät repräsentiert. Zusätzlich zum Device wurde automatisch auch ein sogenannter Bucket erstellt, in dem die eintreffenden Daten des Geräts gespeichert werden. Der Bucket hat denselben Namen wie das Device und ist im Menü unter Buckets zu finden.
Nachdem wir nun unseren “Digitalen Zwilling” auf der Plattform eingerichtet haben, können wir ein echtes Gerät daran anbinden. Um die durch die Plattform limitierte Anzahl an Devices zu umgehen, verwenden wir nur ein Device, das uns praktisch immer als Eingangspunkt für eintreffende Daten dient. Dadurch werden auch alle Daten im selben Bucket gespeichert. Als Übertragungsstandard nutzen wir MQTT. Die Plattform fungiert hierbei als Broker. Nach Einrichten einer entsprechenden Weiterleitung wie im Blog-Artikel ”Weiterleitungsmöglichkeiten B.One Middleware” beschrieben, werden die Daten des Sensors beziehungsweise alle Sensordaten eines Mandanten an den Broker gepublished. Folgende Parameter werden für die Weiterleitung benötigt:
user: “Token” password: unser Device Token host: “mqtt.tago.io” port: 1883 Beispiel: mqtt://Token:ölakjdfn9@mqtt.tago.io:1883 Wenn die Weiterleitung für ein Gerät aktiv ist, kann dessen Aktivität auf der Plattform verfolgt werden. Dafür im Device Menü auf Live Inspector klicken und diesen über das Pfeil-Icon starten.Wenn Daten, die über ein Device eintreffen, sich im “Tago Format” befinden, werden sie im entsprechenden Bucket unter einer automatisch generierten Variablen (Name/Bezeichnung) gespeichert. Im “Tago Format” muss der JSON payload immer mindestens die keys “variable” und “value” besitzen. Beispiel:
Da dies in unserem Fall nicht gegeben ist, muss zur Anpassung der Payload Parser und eine Action verwendet werden. Der Payload Parser kann die eintreffenden Telegramme umstrukturieren, und Actions sind bestimmte Aktionen, die infolge selbst konfigurierbarer Trigger ausgeführt werden. Zur Einrichtung eines Parsers im Device Menü auf Payload Parser gehen und anschließend oben rechts auf “Run your own parser” klicken. Je nachdem, welche Werte aus dem Sensor ausgelesen bzw. später visualisiert werden sollen, muss der Parser nun initialisiert werden.[{ “variable”: “temperature”, “value”: 71 }]
Nachfolgend ein Beispiel für Sensordaten, wie sie von der B.One.Middleware gepublished werden könnten und ein dazugehöriger Payload Parser, der jedem Wert aus payload_fields (Zusammenfassung der gesendeten Daten) eine eigene Variable zuordnet. Zusätzlich wurde dem jeweiligen Variablen-Namen die Device-Id des sendenden Geräts beigefügt, damit wir die Daten im Bucket später voneinander unterscheiden können.
Sensordaten:Die Werte für longitude (Längengrad) und latitude (Breitengrad) müssen zu einem Wert "location" zusammengesetzt werden, damit die Plattform damit arbeiten kann. Payload Parser:{ “metadata”: { “mqtt_topic” : “test/devices/test/up” }, “payload_fields”: { “ul_counter”: 2, “dl_counter”:2, “temperature” : 12, “battery_level” : 24, “latitude” : 1, “longitude” : 1, “latitude_dmm”: 1, “longitude_dmm”: 1, “gps_quality”: “good”, “snr_dl”:2, “rssi_dl”:2, “stats”:4 “long_hemisphere”: “North”, “lati_hemisphere”: “North” }, “dev_id”: 1111111111111111 }
Zum Erstellen der Action gehen wir im Hauptmenü auf Actions. Anschließend oben rechts auf “Add Action” klicken. Bei “Trigger” wählen wir nun “MQTT Topic” und bei “Type of Action” “Insert into Device Bucket”. Daten, die über ein bestimmtes Topic gepostet werden, werden also an einen Bucket weitergeleitet, wo sie der Payload Parser umstrukturiert und speichert. Als Device wählen wir nun unser eben erstelltes Device und bei “MQTT Topic” legen wir folgendes Topic fest: ” +/devices/+/up“. Unter Letzterem wird von allen Geräten (Wildcared “+”) eine Zusammenfassung des kompletten Telegramms gepublished.if (payload && (!Array.isArray(payload)) || !payload[0].variable) { if (Array.isArray(payload)) payload = payload[0]; //verschachtelte Daten const payload_fields = { …payload.payload_fields}; //unverschachtelte Daten const deviceId = String(payload.dev_id); //Name des Sensors/Device const serie = new Date().getTime(); // generates a unique serie for this batch of data. payload = [ { variable: deviceId + “_ul_counter”, value: Number(payload_fields.ul_counter), serie }, { variable: deviceId + “_dl_counter”, value: Number(payload_fields.dl_counter), serie}, { variable: deviceId + “_temperature”, value: Number(payload_fields.temperature),unit: “°C”, serie }, { variable: deviceId + “_battery_level”, value: Number(payload_fields.battery_level), serie}, { variable: deviceId + “_latitude_dmm”, value: String(payload_fields.latitude_dmm), serie}, { variable: deviceId + “_longitude_dmm”, value: String(payload_fields.longitude_dmm), serie}, { variable: deviceId + “_gps_quality”, value: String(payload_fields.gps_quality), serie }, { variable: deviceId + “_snr_dl”, value: Number(payload_fields.snr_dl), serie }, { variable: deviceId + “_rssi_dl”, value: Number(payload_fields.rssi_dl), serie}, { variable: deviceId + “_stats”, value: Number(payload_fields.stats), serie}, { variable: deviceId + “_long_hemisphere”, value: String(payload_fields.long_hemisphere)}, { variable: deviceId + “_lati_hemisphere”, value: String(payload_fields.lati_hemisphere)}, ] if(payload_fields.latitude && payload_fields.longitude){ //longitude & latitude müssen zu location zusammengefasst werden payload.push({ variable: deviceId+ “_location”, value: String(payload_fields.latitude)+ “, ” + String(payload_fields.longitude), location: { lat: Number(payload_fields.latitude), lng: Number(payload_fields.longitude) }, serie, }) } }
In ihrer kostenlosen Version bietet uns die Plattform die Möglichkeit zum Erstellen von bis zu fünf Dashboards. Auf diesen können wir sogenannte Widgets platzieren, mit welchen wir uns Daten in Echtzeit anzeigen lassen können. Widgets können einfache Karten sein, auf denen wir uns einzelne Werte anzeigen lassen können, aber auch komplexere Dinge wie Maps zum Anzeigen des Standorts oder Graphen zum Visualisieren von Daten über einen bestimmten Zeitraum. Zum Erstellen unseres ersten Dashboards im Hauptmenü unter Dashboard auf das “+”-Icon klicken. Anschließend Dashboard benennen und auf “Create Dashboard” klicken. Das neue Dashboard öffnet sich nun automatisch. Oben rechts können wir uns erneut über das “+”-Icon nun auch unser erstes Widget anlegen. Die Plattform bietet eine Vielzahl von Widgets an. In dieser Anleitung werden wir uns jedoch nur mit dem Map- und dem Line-Widget beschäftigen.
Damit wisst ihr nun, wie sich die B.One Middleware an eine Plattform wie TagoIO anbinden lässt und wie ihr dort eure Daten auf Dashboards visualisieren könnt. Im kommenden Artikel zeige ich euch dies dann anhand der Plattform Kaa. Bis dahin viel Spaß beim Ausprobieren!
COOKIES:
Kommentare