MQTT: Verbindung zwischen FHEM und CCU

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.

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 und off des FHEM-Geräts eg_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.

Empfängerseite CCU
Empfängerseite CCU*

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.

Switch Node bearbeiten
Payload anpassen

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.

Hilf durch deine Bewertung mit, diesen Blog zu verbessern!
Abonnieren
Benachrichtige mich bei
0 Kommentare
Älteste
Neueste Beliebteste
Inline Feedbacks
Alle Kommentare