MQTT und FHEM: Zwischen 2 Raspberry Pi kommunizieren
Mit MQTT kann man, nach dem ersten Einrichten, Daten oder Befehle zwischen verschiedenen Geräten austauschen. Das funktioniert auch sehr gut mit mehreren Raspberry Pi Rechnern, auf denen FHEM läuft: Anders als RFHEM blockiert MQTT die Rechner nicht, falls die andere FHEM Instanz gerade nicht antwortet: Der „Broker“ und die sendende FHEM Instanz laufen stabil weiter.
Mit MQTT werden die Daten unabhängig von FHEM über einen eigenen Server, den “Broker”, verteilt. Dieser kann auch auf dem gleichen Raspberry laufen wie FHEM. Außerdem unterstützt FHEM mittlerweile einige Broker-Funktionen selber. In unserem Beispiel wird trotzdem mit Mosquitto ein separater Broker eingesetzt, um FHEM von MQTT zu trennen: So lassen sich die MQTT Nachrichten später auch mit eigenen Programmen empfangen. Das klappt zum Beispiel auch gut mit Python-Skripten.
Topic-Namen für FHEM und MQTT
Möchte man nicht nur den Status, sondern auch Kommandos von FHEM per MQTT senden, braucht man eine passende Struktur für die MQTT Topics. Das FHEM Wiki schlägt hier folgende Struktur vor: Pro Gerät soll ein Topic für den Status und eines für den Befehl angelegt werden, also entweder:
- zuHause/1_OG/Kueche/Lichtschalter/set
- zuHause/1_OG/Kueche/Lichtschalter/state
…oder (weil besser zu filtern):
- set/zuHause/1_OG/Kueche/Lichtschalter
- state/zuHause/1_OG/Kueche/Lichtschalter/state
Über das SET-Topic sendet man Schaltbefehle, die andere Geräte (ESP, Arduino oder eine weitere FHEM Instanz) empfangen. Die Geräte können dann selbstständig darauf reagieren. Das STATE-Topic nutzt man, um den Status eines Gerätes abzufragen: Hier kann ein Temperatursensor zum Beispiel die Werte senden, Schaltbefehle gibt es hier nicht.
Wichtig sind die beiden Topics nachher für das FHEM Device: Das abonnierte Topic (auf dem nur gelesen wird) wird über das Attribut “subscribeSet” gesetzt. Das Topic, indem man auch senden kann, wird über das Attribut “publishState” definiert.
Möchte man jetzt zwischen mehreren FHEM Rechnern Befehle senden, muss man das beachten: Wenn man nur einen Hauptserver hat, der Befehle (oder einen Status) an andere Rechner schickt, braucht man für die Client-Rechner “publishState” gar nicht zu setzen.
Für jedes Topic, das man empfangen möchte, braucht man zwei devices: Einmal die MQTT_Bridge, die die Nachrichten aus dem Topic empfängt (oder auch hier sendet) und ein dummy-device, in das die empfangenen Werte geschrieben werden.
Beispiel: Anwesenheit-Status per MQTT senden
In diesem Beispiel meldet FHEM per MQTT den Anwesenheitsstatus: Meldet man sich bei FHEM als “zuhause” oder “nicht zuhause”, wird dieser Status an andere Geräte weiter übermittelt. Das ist zum Beispiel praktisch, um die Anzeige auf den anderen Rechnern zu steuern. Oder, falls man nicht zu Hause ist, dort die angeschlossenen Kameras zu aktivieren.
Als Beispiel senden wir den Status, ob jemand bei FHEM angemeldet ist oder nicht (das geht im einfachsten Fall mit einem dummy, den man mit “set Zuhause on” steuert) in diesem Topic: “FHEM/state/Anwesend”.
Auf dem Haupt-Rechner, auf dem man sich zuhause an- und abmeldet, würde die FHEM Definition zum Beispiel so aussehen:
define mqtt MQTT 127.0.0.1:1883 define MQTT_dummy_Anwesend dummy attr MQTT_dummy_Anwesend room MQTT define MQTT_dev_Anwesend MQTT_BRIDGE MQTT_dummy_Anwesend attr MQTT_dev_Anwesend IODev mqtt attr MQTT_dev_Anwesend publishState FHEM/state/Anwesend
Die erste Zeile definiert die Adresse des MQTT Broker: In unserem Fall ist das Mosqitto, der auf dem gleichen Rechner läuft. Läuft der MQTT Server auf einem anderen Rechner, muss man hier die IP Adresse ändern!
Der dummy “MQTT_dummy_Anwesend” speichert den Status, ist aber vor allem auf den Client-Rechnern wichtig. Die MQTT Bridge “MQTT_dev_Anwesend” definiert das Topic, auf dem die Meldung gesendet wird.
MQTT Message senden mit FHEM
Um eine MQTT Nachricht mit FHEM zu senden, braucht man nur folgenden Befehl:
set mqtt publish FHEM/state/Anwesend on
Damit andere Geräte diese Meldung auch empfangen können, müssen sie dieses MQTT topic abonnieren. Anschließend werden sie automatisch benachrichtigt, wenn eine MQTT Message veröffentlicht wurde: so können sie auch direkt darauf reagieren und eine Aktion auslösen.
- datenschutz (15x gelesen)
- windows-beschleunigen (10x gelesen)
- windows-schneller-starten-autostart-aufraeumen (10x gelesen)
- pc-einsteigerkurs (6x gelesen)
- pc-einsteigerkurs-1-1 (3x gelesen)
Mehr Tipps zu MQTT und FHEM: Zwischen 2 Raspberry ...
-
FHEM: JeeLink / LaCrosse Sensor: Batterie wechseln
Wer bei einem LaCrosse Temperatursensor die Batterien tauscht, muss eine Sache beachten - andernfalls wird die Hardware-ID zurückgesetzt und der Sensor wird unter einem neuen...
-
FHEM: Logitech Harmony Hub “Disconnected”
FHEM / Logitech Harmony Hub: Steht der Harmony Hub nach einem Update in der Smart Home Software plötzlich auf "Disconnected", lässt sich das in der...
-
Automagic Download für Android, AMAD und FHEM
Automagic ist eine Android-Software, über die sich zahlreiche Automatisierungen auf dem Gerät einstellen und planen lassen. Automagic ist aber auch wichtig, um Android-Tablets oder -Handys...
-
MQTT: Mosquitto nach Raspberry Neustart automatisch starten
So startet man den MQTT Broker "Mosquitto" auf dem Raspberry Pi automatisch nach jedem Neustart: Nach der Installation muss man den Mosquitto Broker noch zu...
-
MQTT und FHEM auf dem Raspberry Pi: MQTT installieren
MQTT ist ein praktischer Dienst, um Daten zwischen verschiedenen Geräten auszutauschen. Damit lassen sich schnell und einfach Sensor-Werte in FHEM empfangen, aber auch Geräte in...
-
FHEM if-Abfrage – Beispiel: Schalten nach Wochentag
In unserem Artikel "Intelligente Zeitschaltuhr mit FHEM" zeigen wir bereits, wie man das Licht oder die Rolläden jeden Tag zu einer bestimmten Zeit schalten kann...
- Drucker kann nicht mit pc kommunizieren
- AppHangB1 - Prgramm kann nicht mehr mit Windoes kommunizieren
Hallo. Meine Freundin hat neuerdings immer öfter Probleme mit Outlook. Heute die Meldung: "Auf...
- Videoüberwachung mit dem Raspberry Pi 3
- Raspberry Pi & Notify my Android
- fhem 5.7.deb installation
- Langes Netzwerkkabel - schlechte Verbindung mit Raspberry Pi
- Einplatinencomputer mit AMD-Ryzen-Prozessor im Raspberry-Pi-Formfaktor
MQTT und FHEM: Zwischen 2 Raspberry Pi kommunizieren