đź“— 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.

:red_exclamation_mark: Hinweis: Es gibt auch öffentliche Broker. Technisch kann man die benutzen, dir sollte jedoch klar sein, dass jeder, der es drauf anlegt, deine Daten dort lesen und deinen ESPuino auch steuern kann. Da muss man kein „Hacker“ für sein, sondern lediglich alle Topics abonnieren. Es ist komplett gruselig, welche Produktivdaten manche Leute über diese Systeme schicken…

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 „ESPuino-xxxxxxx/sleep/set“ 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 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 und tun sie auch nicht. 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.B. 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 The Core Concepts & Basics 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 bestenfalls eine Handy-App gibt. openHAB ist z.B. ein solches System; ioBroker wäre ein weiteres oder auch Home Assistant. 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 das Webinterface 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 :slight_smile:.

Was du aber beispielsweise aber auch machen könntest, ist den ESPuino lediglich als Kartenleser zu verwenden. Die Karten-ID wird dann zu deinem Smarthome gepusht, um dort eine hinterlegte Aktion (basierend auf der ID) auszulösen. ESPuino muss diese Karte gar nicht kennen.

Die verwendeten MQTT-Topics

Folgende MQTT-Topics werden von ESPuino verwendet. Konfigurieren kannst du das Ganze ĂĽber das Webinterface, welches hier beschrieben ist.

  • Command-Topics: Ăśber diese kannst du Dinge steuern. An die betreffenden Topics wird hinten ein /set angehängt - das ist auch nicht änderbar.
  • State-Topics: Ăśber diese kriegst du aktuelle Zustände geschickt. Teilweise zyklisch (alle paar Minuten), teilweise nur beim Start oder auch in dem Moment, wenn eine Aktion ausgelöst wurde.
Typ Topic-variable Bereich Bedeutung
Command sleep 0 or OFF Schaltet den ESPuino sofort ab
Command rfid 12 digits Nummer der RFID-Karte (e.g. 123789456089). Schickt man hier eine Nummer rein, so ist das, als ob man eine Karte auflegt
Command trackcontrol 1 → 7 1=stop; 2=unused!; 3=play/pause; 4=next; 5=prev; 6=first; 7=last
Command loudness 0 → 21 Hierrüber wird die Lautstärke eingestellt, wird jedoch durch die konfigurierte minimale und maximale Lautstärke begrenzt
Command sleep_timer 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
Command lock_controls ON, OFF Hier lässt sich eine Tastensperre aktivieren und wieder entfernen
Command repeatmode 0 - 3 Hier kann man den Wiederholungsmodus einstellen: 0=nein; 1=track; 2=playlist; 3=beide
Command led_brightness 0 - 255 Zum Einstellen der Helligkeit des Neopixels
Command ambient_light ON or OFF Zum Aktivieren oder Deaktivieren des Ambientlights
State sleep ON or OFF ESPuino pusht seinen aktuellen Status
State rfid 12 digits ID der Karte, die gerade aufgelegt wurde.
State trackcontrol 1 → 7 Track-Aktion, die gerade ausgelöst wurde: 1=stop; 2=unused!; 3=play/pause; 4=next; 5=prev; 6=first; 7=last
State loudness 0 → 21 Die aktuelle Lautstärke.
State sleep_timer verschiedene Aktuell aktiver Timer (EOP, EOT, EO5T, 0, …)
State lock_controls ON, OFF Dee Status der Tastensperre.
State repeatmode 0 - 3 Der aktuellen Wiederholungsmodus.
State led_brightness 0 - 255 Die aktuelle Helligkeit des Neopixels.
State ambient_light 0 - 255 Der aktuelle Zustand des Ambient Lights.
State track String Zeigt den aktuellen Titel inkl. Nummer und Pfad an. Z.B.. „(2/10) /mp3/kinderlieder/Ri ra rutsch.mp3“
State topicCoverChangedState String Coverart bei Titeländerung, schickt eine leere Nachricht, wenn sich das Coverart potentiell geändert hat.
State ipv4 String Die aktuelle IPv4-Adresse.
State pauseplay ON, OFF Ob ein Abspielvorgang aktiv ist.
State playmode 0 - 17 Aktueller Playmode.
State topicWiFiRssiState -127 bis 127 Aktuelle WLAN-Signalstärke
State software-revision String Aktuelle Software-Revision
State battery_voltage String Aktuelle Akku-Spannung
State battery_soc String Akku-Ladestand

ESPuino und Hausautomation

Wenn du mehr zu Hausautomation wissen willst, dann schau mal hier rein: đź“— ESPuino und Smarthome oder hier: ESPuno und nymea Homeautomation. Oder hier: Espuino und Home Assistant bzw. Home Assistant Integration.

1 „Gefällt mir“