đź“— ESPuino und MQTT

MQTT ist ein Protokoll aus der IOT-Welt, das sich zunehmender Beliebtheit erfreut.

Wie funktioniert MQTT?

Server
Das zentrale Element ist der Serverdienst, ein sog. Broker. Im Internet gibt es öffentlich nutzbare, aber auch lokal, z.B. auf einem Raspberry Pi, lässt sich wunderbar Mosquitto installieren. Man kann den Zugriff auch mit Passwort einschränken, was jedoch im lokalen Netz vielleicht nicht unbedingt notwendig ist. Heißt: Eigentlich muss man Mosquitto nur installieren und starten und dann läuft das erstmal.

Kommunikation
Die Kommunikation zwischen Client und Server erfolgt in sog. Topics. Diese müssen auf dem Broker nicht konfiguriert werden, sondern können einfach frei benutzt werden - es sind einfach Freitextfelder. Wenn ich nun also sage, dass ich gerne in „state/espuino/RFID“ kommunizieren möchte, dann kann ich dies tun. In einem Topic kann ein Client zwei Funktionen einnehmen. Einerseits einen lesenden Zustand „subscribe“ und andererseits einen schreibenden Zustand „publish“. Beides gleichzeitig geht auch, macht der ESPuino z.B. auch.
Nehmen wir also an, bzgl eines Topics melden sich zehn Clients am Broker an, von denen neun lesen und einer schreibt. Verschickt der Eine nun ein publish, so werden alle anderen Teilnehmer vom MQTT-Broker sofort über diese Nachricht notifiziert und erhalten sie gewissermaßen in Echtzeit. Untereinander müssen sich Clients nie kennen. Die Stärke von MQTT liegt nun insbesondere darin, dass auch sichergestellt werden kann, dass Teilnehmer, die zum Zeitpunkt der Nachricht nicht erreichbar sind, diese auch noch nachträglich erhalten. Dies wird bei ESPuino jedoch nicht verwendet - ich erwähne es nur. Wichtig ist zu wissen, dass man Kanäle zwischen subscribe (z.B. State) und publish (z.G: Cmnd) immer trennen muss, da es sonst gewissermaßen zu Rückkopplungen kommen. Wichtig ist auch zu wissen, dass man sich nie darum kümmern muss, welche IP-Adresse ein anderer Client hat: Man muss nur den MQTT-Broker kennen.
Ich will das alles hier auch gar nicht weiter ausfĂĽhren und verweise auf eine sehr gute Dokumentation: MQTT Essentials - All Core Concepts explained
Dadurch, dass man auch RFID-Nummern schicken kann, kann man auch andere Musik starten. Allerdings sei an dieser Stelle erwähnt, dass die ganzen zugewiesenen RFID-Aktionen natürlich nicht von selbst im Hausautomationssystem landen; das muss man händisch übertragen.

Was bringt mir das nun fĂĽr ESPuino

Nun, man kann MQTT in verschiedene Hausautomationssysteme einbinden, für die es eine Handy-App gibt. openHAB ist z.B. ein solches System. So kann man den ESPuino komfortabel über das Handy steuern, was ich z.B. gerne tue, wenn ich meine Kinder ins Bett bringe. Denn so kann man bequem vom Handy aus im dunkeln Zimmer z.B. das Licht des Neopixels dimmen oder heller/dunkler machen. Auch Titel kann man springen, lauter/leiser… also eigentlich alles, was man auch sonst machen kann. Das kann dann z.B. so aussehen:

Die verwendeten MQTT-Topics

Folgende MQTT-Topics werden von ESPuino verwendet. Die u.g. Tabelle verweist auf die Variablennamen in settings.g. Die jeweiligen Topics können nach Belieben umkonfiguriert werden. Aber wie gesagt: Achte darauf, dass Publish und Subscribe getrennt bleiben!

Topic-variable Bereich Bedeutung
topicSleepCmnd 0 or OFF Schaltet den ESPuino sofort ab
topicSleepState ON or OFF ESPuino sendet seinen aktuellen Status
topicRfidCmnd 12 digits Nummer der RFID-Karte (e.g. 123789456089). Schickt man hier eine Nummer rein, so ist das, als ob man eine Karte auflegt
topicRfidState 12 digits Nummer der aktuell aufgelegten Karte, sofern diese keine Modifikationskarte ist
topicTrackState String Zeigt den aktuellen Titel inkl. Nummer und Pfad an. Z.B… „(2/10) /mp3/kinderlieder/Ri ra rutsch.mp3“
topicTrackControlCmnd 1 → 7 1=stop; 2=unused!; 3=play/pause; 4=next; 5=prev; 6=first; 7=last
topicLoudnessCmnd 0 → 21 Hierrüber wird die Lautstärke eingestellt, wird jedoch durch die konfigurierte minimale und maximale Lautstärke begrenzt
topicLoudnessState 0 → 21 Zeigt aktuelle Lautstärke an
topicSleepTimerCmnd EOP Gehe nach dem Ende der aktuellen Playlist in Deepsleep
EOT Gehe nach dem Ende des aktuellen Titels in Deepsleep
EO5T Gehe nach dem Ende von fĂĽnf Titeln in Deepsleep
1 → 2^32 Anzahl in Minuten, nach denen der ESPuino in Deepsleep gehen soll
0 Deaktiviere Timer wieder
topicSleepTimerState verschiedene Sendet aktuell aktiven Timer zurück (EOP, EOT, EO5T, 0, …)
topicState Online, Offline Online wenn Online, Offline beim Wechseln in den Deepsleep
topicCurrentIPv4IP IPv4-string Zeigt die aktuelle IP-Adresse des ESPuino an (z.B. 192.168.2.78)
topicLockControlsCmnd ON, OFF Hier lässt sich eine Tastensperre aktivieren und wieder entfernen
topicLockControlsState ON, OFF Zeigt den Status der Tastensperre an
topicPlaymodeState 0 - 10 Zeigt den aktuellen Playmode an)
topicRepeatModeCmnd 0 - 3 Hier kann man den Wiederholungsmodus einstellen: 0=nein; 1=track; 2=playlist; 3=beide
topicRepeatModeState 0 - 3 Zeigt aktuellen Wiederholungsmodus an
topicLedBrightnessCmnd 0 - 255 Zum Einstellen der Helligkeit des Neopixels
topicLedBrightnessState 0 - 255 Zeigt aktuelle Helligkeit des Neopixels an
topicBatteryVoltage float Zeigt aktuelle Spannung an
topicWiFiRssiState -127 bis 127 Zeigt die aktuelle WLAN-Signalstärke an

ESPuino und Hausautomation

Wenn du mehr zu Hausautomation wissen willst, dann schau mal hier rein: đź“— ESPuino und Smarthome.