Mächtige Dienste sinnvoll nutzen

KI generiertes Bild
Diese Abbildung vom Octopus im Internet der Dinge hat eine KI gemalt. https://www.craiyon.com/

Verteilte Dienste bieten viel Mehrwert

Ein Beispiel verdeutlicht die enormen Möglichkeiten, die uns ein Zusammenspiel verteilter Systeme im Internet bietet. Einfach die Cloud-Dienste nutzen, um vermeindlich komplexe Aufgaben schnell und einfach zu realisieren. Unsere Aufgabe: Wir wollen das IoT-Kit per Alexa-Sprachbefehl fernsteuern und damit die Farbe des Neopixels festlegen. Analog dazu könnte Alexa auch einen digitalen Ausgang schalten (und über ein Relais auch das Garagentor öffnen/schließen, die Waschmaschine oder die Kaffeemaschine steuern). Aber dazu Schritt für Schritt:

IFTTT: Das Schweizer Taschenmesser in der Cloud

Zentrales Element bildet eine Anwendung zur Verknüpfung unterschiedlicher Dienste: IFTTT (If...this…then…that) bietet die Möglichkeit, Geräte und Programme verschiedener Hersteller über einfache Regeln zu koppeln. Von der smarten Kaffemaschine über die Lichtsteuerung, Twitter, Musikdienste und VoIP (Voice over IP) am Smartphone ist so ziemlich alles aus der Konsum-Welt dort versammelt. Einfache App-Services der Form "Wenn ... dann ..." verknüpfen Ereignisse (Trigger) mit Anweisungen (Action). Beispielsweise kann der Eingang einer mail eines bestimmten Absenders (Trigger) dafür sorgen, dass die Wohnzimmerbeleuchtung grün blinkt (Action). Vermeintlich komplexe Programmieraufgaben werden so mit wenigen Kicks gelöst. 

MQTT: Das Protokoll der Profis

Eine Cloud-Anwendung mit IFTTT-Anschluss ist der MQTT-Broker von Adafruit. Im Unterschied zum bereits bekannten Thingspeak verwendet MQTT ein sogenanntes Publisher/Subscriber-Prinzip zur Kommunikation. Hier lassen sich Messdaten speichern (Publisher), aber auch Messkanäle (Topics) abonnieren (Subscribe). Im letzteren Fall informiert der Broker alle angemeldeten Geräte automatisch über das Eintreffen eines neuen Messwertes. Der Vorteil liegt auf der Hand: Ein entsprechender IoT-Superblock beim Octopus sorgt dafür, dass wir jede neue Nachricht für einen bestimmten Messkanal (Topic) sofort mitbekommen. Wenn wir im IFTTT den Versand einer Nachricht mit der gewünschten Neopixelfarbe an den MQTT-Broker bei Adafruit in Auftrag geben (Action), schaut dieser in seine Liste der Abonnenten für diesen Kanal nach und leitet die Nachricht dann an alle Interessierten in der Liste weiter. Dazu braucht IFTTT überhaupt nichts von der Existenz des Octopus zu wissen. Ein Broker ist also ein Vermittler für Nachrichten. Hat sich auch der Octopus per Subscribe beim Broker abonniert, so wird jede auf diesem Kanal eintreffende Nachricht vom Broker direkt an den Octopus weitergeleitet. Am Octopus erfolgt die Auswertung des Nachrichteninhalts (Payload) und die entsprechende Änderung der Neopixelfarbe in einem MQTT-Subscribe Superblock.   

Alexa

So gerüstet ist es nur eine Kleinigkeit um Alexa ins Spiel zu bringen: Auch Alexa besitzt einen IFTTT-Service. Dazu müssen wir unsere Alexa bei IFTTT registrieren. Dann können wir den IFTTT-Trigger so konfigurieren, dass ein Sprachkomando der Form "Alexa trigger Octopus rot" sofort eine Nachricht mit dem Inhalt "rot" an den Broker sendet.

Fazit: Die Kraft der drei Dienste

Durch geschickte Kombination von Cloud-Diensten gelangen wir ohne großen Programmieraufwand zu einem neuen innovativen Use-Case. Wie wäre es mit dem Bau einer sprachgesteuerten Cocktailmixmaschine? Dieses Studierendenprojekt wird unter 100 Ideen vorgestellt. 

Selbst machen: Umsetzung MQTT

Unsere Herausforderung besteht in der Koordination der vielen verschiedenen Plattform-Dienste. Das eigentliche Octopus-Programm ist dagegen erstaunlich minimalistisch. Wir gegen im Folgenden davon aus, dass ein Sprachassistent (hier am Beispiel der Alexa) vorhanden und auf der Plattform des jeweiligen Herstellers registriert ist. Aber auch ohne Alexa lassen sich Teile unseres Beispiels sinnvoll nutzen.

  1. Registrieren bei der Cloud-Plattform von Adafruit (https://io.adafruit.com/): Die Plattform bietet, ähnlich wie das bereits bekannte Thingspeak, vielfältige Möglichkeiten der Datenspeicherung in der Cloud. Die Nutzung dieses Dienstes ist frei, eine Registrierung nötig. Im Beispiel nutzen wir zur Anmeldung den User „IoTWerkstatt“, dieser Username muss beim Nachbau natürlich persönlich angepasst werden.
  2. MQTT-Topic im Broker anlegen: Nach der Anmeldung wählen wir als erste Aktivität auf der rechten Seite die Konfiguration eines neuen Feeds. Als „Action“ legen wir erst eine Gruppe „Octopus“ und anschließend einen Feed „neopixel“ in dieser Gruppe an.
  3. Broker-Anmeldung im Ardublock: Nun sind wir bereits bestens vorbereitet, um  unser Octopus-Programm zu realisieren. Dazu müssen wir uns als erstes beim MQTT-Broker als User authentifizieren, der dazu notwendige IoT-Superblock findet sich im Baukasten „MQTT-Protokoll“. Wichtig ist hier der persönliche Username (bei uns „IoTWerkstatt“) und das Passwort in Form des AIO-Keys. Letzteres übernehmen wir per „Cut&Paste“ von der Webseite (Menü auf der linken Seite).
  4. Subscribe des MQTT-Topics im Ardublock: Unser Programm möchte über Änderungen im Feed informiert werden. Dazu ist ein MQTT-Subscribe auf dem entsprechenden Topic notwendig. Größte Schwierigkeit ist die Wahl der richtigen Topic-Bezeichnung. Diese folgt der Regel „Username/feeds/Gruppe.Feedname“. In unserem Beispiel „IoTWerkstatt/feeds/octopus.neopixel“. Der Name findet sich auch etwas versteckt auf der Webseite (dazu den Feed anwählen und über „Feed Info“ auf der rechten Seite die Informationen abrufen).
  5. Aktivität bei Eintreffen einer neuen Nachricht: Jede neue Nachricht soll eine Änderung der Neopixelfarbe hervorrufen. Im einfachsten Fall werden wir die dazu nötigen Informationen (Payload) einfach im Klartext übertragen. Die Information „rot“ schaltet den rechten Neopixel auf rot usw. Der entsprechende Algorithmus ähnelt stark unserer Lärmampel.
  6. Echtzeittest der der MQTT-Kommunikation: Nach upload des Programmes meldet sich unser Octopus als Subscriber des Feeds beim Broker an. Zum Test klicken wir auf der Webseite direkt auf den Feed, wählen „+ Add Data“ und geben den Text „rot“ ein. Als Reaktion sollte sich kurze Zeit später die Farbe unseres Neopixels ändern.
Anmeldung Adafruit
Nach Anmeldung bei io.adafruit.com legen wir eine neue Gruppe und einen Feed für die Neopixel-Informationen an. Feednamen mit kleinen Buchstaben wählen. Die Gruppe hilft uns später Übersicht zu behalten.
AIO-Key
Nachdem wir den Kanal beim Broker konfiguriert haben, können wir auch unseren Octopus beim Broker anmelden. Username entspricht dem Anmeldenamen bei Adafruit. Das Passwort ist der AIO-Key von der Webseite (Cut&Paste).
Ardublock Subscribe
Da wir auf Änderungen im neopixel Feed reagieren möchten, nutzen wir MQTT-Subscribe zur Anmeldung beim Broker. Die Bezeichnung für das MQTT-Topic ist etwas versteckt in der Menüführung der Webseite zu finden.
Ardublock-Callback
Treffen neue Informationen vom Broker ein, so werten wir diese aus (Payload) und schalten die gewünschte Farbe beim Neopixel.
Test der MQTT-Verbindung
Die Funktion unserer Kommunikationsverbindung lässt sich durch Eingabe einer Farbinformation testen. Dazu auf der Webseite den entsprechenden neopixel-Feed anwählen und Daten eingeben. Anschließend sollte der Octopus reagieren. Gelingt die Anmeldung beim Broker nicht, finden wir im SerialMonitor der Arduino-IDE entsprechende Fehlermeldungen.

Selbst machen Teil 2: Umsetzung IFTTT

Als nächstes werden wir die Farbinformation über IFTTT durch einen Alexa-Sprachbefehl erzeugen. Dazu sind folgende Schritte nötig:

  1. Registrieren bei der Cloud-Plattform IFTT.com.
  2. Erstellen eines Triggers: Nach der Anmeldung bei IFTTT erstellen wir unter dem Menüpunkt „My Applets“ eine neue „Wenn… dann…“- Regel (New Applet). Bei der Auswahl von „+this“ wählen wir die Dienste von „Alexa“, autorisieren uns über das Amazon-Konto und wählen unter „Say specific phrase“ den Text „Octopus rot“.
  3. Erstellen der Action: Im Punkt „+that“ unserer Regel wählen wir den Dienst von „Adafruit“, autorisieren uns mit dem Adafruit-Konto und wählen für den Neopixel-Feed die zu übertragende Information „rot“.
  4. Wiederholen für andere Farben: Analog dazu schnell noch weitere Regeln erstellen, um auch die anderen Farben zu berücksichtigen. Fertig ist die komplexe Sprachsteuerung.
  5. Echtzeittest: Bei einem Sprachbefehl „Alexa trigger Octopus rot“ sollte im entsprechenden Feed des Brokers der Text „rot“ erscheinen und kurze Zeit später leuchtet das Neopixel in der gewünschten Farbe.
IFTTT-App: Trigger
Wenn Alexa einen bestimmten Befehl hört, dann wollen wir reagieren ...
IFTTT-App: Action
.. und die entsprechende Farbinformation an den Broker senden.

Wer Spaß an der Verknüpfungsarbeit gefunden hat, kann z.B. einen weiteren MQTT-Feed „temperatur“ anlegen und neben der Neopixelsteuerung auch zyklisch Messdaten an den MQTT-Broker übertragen. In IFTTT sind dann schnell Regeln formuliert, die per VoIP vor Frostgefahr warnen oder Hitzefrei melden. Voraussetzung ist die Installation der IFTTT-App auf dem eigenen Smartphone. Dann ruft der Octopus an und das System liest den konfigurierten Text als Sprachnachricht vor.

Unserem Octopus genügt übrigens ein weiterer IoT-Superblock, um mittels App-Service "Webhooks" auch ohne MQTT-Broker als Vermittler in der IFTTT-Welt mitspielen zu können. Ein entsprechendes Beispiel findet sich in Form der Zimmerpflanzenüberwachung in den Blaupausen im Downloadbereich.

MQTT: Publish
Fügen wir unserem Programm einen weiteren MQTT-Kanal hinzu, so kann der Octopus auch zyklisch die aktuelle Temperatur an den Broker senden. Achtung: Zykluszeit im delay nicht zu lang, sonst dauert die Reaktion auf einen Sprachbefehl zu lange.
IFTTT-Hitzefrei App
Auch die IFTTT-Regeln lassen sich flexibel erweitern. Ist die Temperatur größer als ein Schwellwert, so ruft das System unser Smartphone an und meldet Hitzefrei.
Verteiltes System
Kommunikation im verteilten System
back-to-top nach oben