Oktober 25, 2018

Projekt der Woche: Node-Red-MAM

Projekt der Woche: Node-Red-MAM

Node-Red ist eine freie Entwicklungsumgebung und visueller Editor für das „Internet der Dinge“. Es werden eine Vielzahl von Plugins unterstützt und man kann andere Dienste (APIs, services) einbinden und mit Plug&Play vernetzen und verdrahten. Hardwaregeräte können somit als visuelle Komponente dargestellt werden und die Architektur des Datenflusses zwischen Hardware- und Softwarekomponenten wird dann über einfach Verdrahtung der Bausteine implementiert. Wer also einen Sensor gerne auslesen möchte und das grafisch darstellen möchte und vielleicht dann die Daten ins Netz bringen möchte, hat hier eine einfach lokale Entwicklungsumgebung, die ihm dabei von A-Z unterstützt.

Was ist MAM?

MAM steht kurz für „Masked authenticated messaging“ und ermöglicht es Daten in den Tangle zu „streamen“, also zu übertragen und für ein bestimmtes Publikum verfügbar zu machen. Die Daten können also verschlüsselt werden und nur wer den richtigen Schlüssel hat, kann den Datenfluss am Ende wieder abgreifen.

Es ist ein bisschen wie bei einem Radiosender und -empfänger. Man kann auf einer bestimmten Frequenz Daten senden und wieder empfangen. Bei IOTA-MAM ist es als Frequenzkette implementiert, so dass jedes Datenpaket eine eigene Frequenz erhält und jeweils wieder verlinkt auf die Frequenzadresse des nächsten Datenpakets, wie im Bild oben dargestellt.

Die Daten (z.B. Sensordaten einer Wetterstation) werden im Tangle gespeichert und sind bis zu einem Snapshot verfügbar. Daher ist es ratsam die Daten aus dem Tangle zu holen und zu verarbeiten.

Node-Red + MAM!

Die Node-Red MAM Funktionstoolbox ist ein in Node-Red integriertes Plugin, um Daten über MAM direkt in den Tangle zu übertragen und abzugreifen – plug-n-play! Jegliche Sensoren, die normalerweise auch mit Node-Red zusammenarbeiten, können verwendet werden. Eingesetzt kann es zum Beispiel zum einfachen Aufbau einer Wetterstation mit UI. Jeder kann damit mit IOTA Daten streamen und abgreifen. Keine Entwicklerkenntnisse sind dafür nötig!

An welche Zielgruppe ist das Projekt gerichtet?

An alle Node-Red-Entwickler, IOTA-MAM-Entwickler und Leute, die mit einfachen Mitteln IoT-Geräte ansteuern und auswerten wollen. Wer bereits Erfahrung mit Node-Red hat, dem fällt es besonders einfach, aber auch für alle Anderen ist der Einstieg sehr einfach, da das MAM von IOTA durch visuelle UI-Elemente ersetzt ist. Es gibt eine UI-Komponente, um einen Datenstream ins Tangle zu senden (PUBLISH) und eine zweite (FETCH), um die Daten von dort auf einer bestimmten Adresse(ROOT) wieder abzugreifen. Alles ist über die UI von Node-Red konfigurierbar. Niemand braucht sich damit wirklich mit IOTA-Entwicklung und MAM beschäftigen, sondern kann gleich loslegen mit seinem Sensor!

Auf welche Vision stützt sich das Projekt?

Die Vision war, IOTAs recht komplexe innere Welt unsichtbar hinter schöner UI und echter Funktionalität zu verbergen. Besonders als Zielgruppe sind Einsteiger in die IOTA-Technik zu nennen. Beispielsweise auch viele Jugendliche, die vielleicht bald mit IoT-Geräten wie Calliope (Einführung an vielen deutschen Schulen in 2017/2018) oder anderen SensorTags (Texas Instruments, Bosch-XDK) arbeiten möchten und das IOTA-Tangle kennen lernen möchten.

Jeder kann zu Hause seine IoT-Geräte zum Messen-Steuern-Regeln nutzen und mit Node-Red gibt es eine Plattform, um die Daten in Windeseile grafisch in Echtzeit auszuwerten. Was fehlte, war eine Anbindung an IOTA. Hier ist sie!

Welche Hard- und Software verwendet ihr?

Als Sensor wurde das SensorTag-CC2650 von Texas-Instrument verwendet. Es bietet Sensoren um Licht, Audio, Luftfeuchte, Druck, Beschleunigung, Drehbewegungen, Magnetfelder und Objekt- sowie Umgebungstemperatur zu messen.

Diese Daten kann das Tag über BLE (Bluetooth low energy) an eine Auswertungsstation (z.B. PC oder Handy) übertragen. Apps werden dazu auch schon bereit gestellt. Eine Node-Red-UI-Umgebung ist auch sehr schnell gebaut und das Gerät wird in Node-Red nativ erkannt und kann sofort nach Einschalten als Komponente verwendet werden.

Wie dies bei anderen Geräten ist, kann ich leider wenig beurteilen. Ich gehe davon aus, dass die meisten, die z.B. Standard-Protokolle zur drahtlosen Kommunikation verwenden sofort einsatzbereit sind.

Node-Red läuft als Software auf allen Plattformen im Browser, da es selbst ein nodeJs-Modul ist und damit plattformunabhängig.

Wie läuft das Ganze technisch ab?

Die Node-Red-Komponenten werden vom Benutzer über die visuelle Entwicklungsumbegung im Browser konfiguriert. Der Sensor wird aktiviert und liefert sofort Messdaten, die dann an das IOTA-MAM-publish Modul als Eingang gesendet werden. Dazu platziert man die Sensorkomponente in ein neues Node-Red-Arbeitsblatt und verbindet ihren Output mit dem Eingang von IOTA-MAM-Publish, welche man ebenfalls auf das neue Arbeitsblatt setzt. Fertig! Nun werden die Temperatur-Daten des Sensors direkt auf das Tangle geschrieben. Wer sehen will wohin genau, kann das in der Ausgabe-Konsole sehen oder einfach eine Ausgabe-Komponente an das IOTA-Publish-Modul dranhängen. Andere Sensordaten können auch geschrieben werden. Dazu ist aktuell eine Änderung im Quellcode des Node-Red-MAM-Moduls nötig. Dies ist im Code als Stelle markiert und auch unter https://www.npmjs.com/package/node-red-contrib-iota-mam erwähnt. Da IOTA-MAM selbst als Modul sehr starker Veränderungen unterzogen ist, werde ich demnächst ein Update machen und das neue IOTA-MAM+ einbauen und auch weitere Sensoren testen, um das Modul so gut es geht zu generalisieren.

Um Daten, die man vorher (bis zum letzten Snapshot von IOTA zurückreichend) ins Tangle gesendet hat, setzt man ein IOTA-MAM-Fetch Modul in das Arbeitsblatt, stellt in dem Modul die Adresse ein, ab der man Daten möchte und verbindet es mit einem Output-Kanal. Fertig!

p.s.: wer nur MAM lernen will und damit entwickeln mag, ist auch herzlich eingeladen, sich den Code durchzusehen. Es ist eine ganz pragmatisch-direkte Art wie MAM in Javascript normalerweise verwendet wird und auch ausreichend kommentiert!

Wer sind die Projektinitiatoren / -beteiligten?

Derzeit arbeite nur ich am Projekt (instantlink99#1577 im Discord).

Qorr#8518 (im Discord) als Hardware-Lieferant :), Tester, Designer, Motivator und Ideengeber hat auch mitgewirkt.

Welche Kenntnisse und Erfahrungen habt ihr?

Ich bin Physiker, Lehrer und ein Teilzeit-Software Engineer und arbeite schon viele Jahre in unterschiedlichsten Projekten als Freelancer. Meist mit Javascript, IOTA und nodeJS-tools. Qorr#8518 ist Sensortechniker und damit wirklich vom Fach was die Hardware betrifft.

Was hat euch motiviert, das Projekt voranzubringen?

Wir alle möchten IOTA als Standard im IoT etabliert sehen. Dazu braucht es Software-Tools für bestehende Umgebungen. Als ich von Qorr, der gerade mit Sensoren experimentierte von Node-Red hörte, war ich Feuer und Flamme, IOTA in dieser Umgebung bekannt zu machen und ein Integrationstool zu entwickeln. Hier ist unser erster Schritt dazu.

Qorr möchte es auch nutzen, um seine Wetterstation zu betreiben und Daten ins Tangle zu schreiben.

Was motiviert euch dazu, das Projekt fortzuführen?

Paul Handy (IOTA Core Developer) meinte, ein Einsatz in Kombination mit Qubic/Abra wäre eine super Idee. Das hat mich motiviert, in diesem Jahr weiter dran zu arbeiten und auch die fortschreitende Standardisierung wird das Modul hoffentlich noch bekannter machen. Unsere wöchtentlichen Downloadzahlen bei npmjs.com (node-Bibliotheken für NodeJS-Entwickler) sind recht gut (100-200 Downloads in der Woche im Schnitt) und das über die letzten Monate. Daher bin ich froh, wohl einigen Leuten geholfen zu haben, die sich meinen Code angeschaut haben und mit Node-Red entwickeln konnten. Es ist wirklich einfach und aus meiner Sicht sogar bezüglich der reinen Javascript/NodeJS-Programmierung eine der motivierendsten Einstiege, die man finden kann, da sich sofort was tut bei der Kombination von Hardware und Software!

Ressourcen

NPM-JS Repository: https://www.npmjs.com/package/node-red-contrib-iota-mam

Ecosystem: https://ecosystem.iota.org/pro…node-red-contrib-iota-mam

Sensortag-libs:

https://flows.nodered.org/node/node-red-node-sensortag

https://github.com/IBM-IoT/node-red-contrib-sensortag