Neben der CCU betreibe ich noch FHEM für einige ältere Geräte, unter anderem Intertechno-Funksteckdosen. Eine häufige Anforderung ist daher, den Schalt-Status des FHEM-Geräts an die CCU*/NodeRED und einen Schalt-Befehl an FHEM zu senden. Dafür eignet sich prima das Telemetrieprotokoll MQTT.
Inhalt
Voraussetzungen
- Die Anleitung geht von einer eingerichteten RedMatic aus, alternativ ist natürlich NodeRED ebenso möglich. Der MQTT-Server sollte bereits eingerichtet sein. Wie eine solche Einrichtung aussehen kann, erfährst Du hier.
- Weiterhin benötigst Du ein FHEM, welches eine Verbindung zu einem MQTT-Server hat. Ich nutze für dieses Beispiel das FHEM-Modul MQTT.
- Außerdem benötigst Du einen lauffähigen MQTT-Server. Wie einer eingerichtet werden kann, siehst Du im Beitrag „MQTT-Server auf der RaspberryMatic„.
Übermitteln des FHEM-Status
FHEM-Seite (Status-Sender)
- Für die Reaktion auf den geänderten Status nutze ich gern das FHEM-Modul DOIF. Es kann jedoch auch das Modul Notify oder andere genutzt werden.
- Ich möchte die beiden Zustände
on
undoff
des FHEM-Gerätseg_kueche_licht
an meine CCU* übermitteln. - Der MQTT-Server heißt „mqtt_broker“. Dort setze ich bei einer Zustands-Änderung das Topic
stat/eg/kueche/licht
mit dem aktuellen Zustand meines FHEM-Geräts. - Das optionale Attribut
do always
übermittelt auch dann den Zustand, wenn er sich nicht geändert hat, sondern nur aktualisiert wurde. Das ist sinnvoll, wenn man mit nur einem Taster eine Szenenauswahl realisieren möchte.
Ein Beispiel: drücke ich ein weiteres mal auf „Ein“, während das Licht bereits eingeschalten ist, so schalten sich weitere Leuchten zu – die Szene „2“ wird aktiviert.
In FHEM sieht meine Konfiguration (Raw-Definition) dazu so aus:
defmod eg_kueche_licht_doif DOIF ([eg_kueche_licht:state]) (\
set mqtt_broker publish stat/eg/kueche/licht [eg_kueche_licht:state]\
)
attr eg_kueche_licht_doif do always
RedMatic-Seite (Status-Empfänger)
Die Verbindung zur RedMatic gestaltet sich simpel. Hier musst Du nur einen „mqtt in“-Node mit dem Topic stat/eg/kueche/licht
anlegen, welches du in obigem DOIF vergeben hast. Mit einem „switch„- oder „debug„-Node kannst Du jetzt bereits die Verbindung überprüfen. Der „switch„- und der „mqtt out„-Node wird nachfolgend noch beschrieben.
Schalten des FHEM-Geräts
RedMatic-Seite (Kommando-Sender)
Den „switch„-Node kannst Du nach dem Test gleich weiter verwenden, um das FHEM-Gerät, die Schaltsteckdose, wieder zu schalten. Um keine Loop zu erzeugen, musst Du im „switch„-Node das Durchreichen „Pass through“ des neuen Status deaktivieren. Der Node bekommt über MQTT die Zeichenketten on
und off
, muss also genau so (als Zeichenkette) den Payload setzen.
Über einen „mqtt out„-Node mit einem Kommando-Topic, hier cmd/eg/kueche/licht
, übermittelst du deinen Schaltwunsch an den MQTT-Server. Das von mir eingesetzte FHEM-Modul „MQTT_DEVICE“ erfordert, dass das Topic mit dem Schlüsselwort cmd
anfängt, was auch eine gute Praxis für Kommandos ist.
FHEM-Seite (Kommando-Empfänger)
Mit dem FHEM-Modul „MQTT_DEVICE“ ist die Einrichtung auch recht einfach. Alles, was man benötigt, ist das Device und ein Attribut, welches auf das Topic reagiert.
defmod eg_kueche_licht_mqtt MQTT_DEVICE
attr eg_kueche_licht_mqtt subscribeReading_cmd {fhem("set eg_kueche_licht $message")} cmd/eg/kueche/licht
Fazit
Die Verbindung der beiden Systeme gestaltet sich über MQTT recht leicht. Zudem bietet MQTT eine gewisse Ausfallsicherheit, sollte Dein Netzwerk oder Server mal ausfallen. Da der MQTT-Server bei größeren Installationen viele Vorgänge bearbeiten muss, sollte dieser nicht auf einer SD-Karte am RPI* laufen. Bei mir hat sich eine kleine USB-SSD als Systemlaufwerk bewährt.