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 zu Rückkopplungen kommen kann. 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; ioBroker wäre ein weiteres. 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:
Es sei an dieser Stelle jedoch erwähnt, dass die WebGUI des ESPuinos nach und nach immer leistungsfähiger wird, so dass früher oder später zu erwarten ist, dass man diese Funktionen auch ohne MQTT abdecken kann. Stay tuned .
Die verwendeten MQTT-Topics
Folgende MQTT-Topics werden von ESPuino verwendet. Die u.g. Tabelle verweist auf die Variablennamen in settings.h
. 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 |
topicCoverChangedState | 0 → 21 | Schickt eine leere Nachricht, wenn sich das Coverart potentiell geändert hat |
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 |
topicBatterySOC | float | Zeigt die verbleibende Batterieladung in % an (zB. 83.0) |
topicWiFiRssiState | -127 bis 127 | Zeigt die aktuelle WLAN-Signalstärke an |
topicSRevisionState | String | Zeigt die aktuelle Software-Revision an |
ESPuino und Hausautomation
Wenn du mehr zu Hausautomation wissen willst, dann schau mal hier rein: đź“— ESPuino und Smarthome oder hier: ESPuno und nymea Homeautomation.