In dem Artikel RaspberryPi – MQTT Server auf dem RaspberryPi installieren hatte ich ein wenig zu MQTT geschrieben und erklärt wie man einen eigenen MQTT Server auf dem RaspberryPi installiert.
Damit ihr einen MQTT Server auch aus FHEM heraus nutzen könnt, müsst ihr allerdings noch ein paar FHEM-Module installieren. Wie das geht und worauf Ihr dabei achten müsst habe ich in dem folgendem Artikel beschrieben.
Sicherheitshinweise
Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/
Affiliatelinks/Werbelinks
Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂
Voraussetzungen
Bevor ihr mit diesem Artikel startet solltet ihr den RaspberryPi soweit vorbereitet haben, dass dieser über das Netzwerk erreichbar und per SSH Steuerbar ist.
Die folgenden drei Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten:
RaspberryPi – Einrichten für Nerdiys!
RaspberryPi – Die Erste Konfiguration!
RaspberryPi – Den RaspberryPi über SSH steuern
Das eigene Smart-Home – Installation und Einstieg in FHEM
Mosquitto auf der Himbeere – MQTT Server auf dem RaspberryPi installieren
Benötigte Werkzeuge:
-keins-
Benötigte Materialien:
In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.
Per SSH auf dem RaspberryPi einloggen
Um zu beginnen müsst Ihr Euch als erstes mit Putty per SSH auf dem RasPi einloggen. Wie das geht ist im Artikel RaspberryPi - Den RaspberryPi über SSH steuern beschrieben.
Paketverwaltung aktualisieren
Die Paketverwaltung in Linux ist eine "zentrale Stelle" über die sich diverse Software-Pakete installieren lassen. Damit dies zuverlässig funktioniert sollten vor jeder Installation von neuen Paketen die Listen und Quellen der Paketverwaltung aktualisiert werden.
sudo apt-get update && sudo apt-get upgrade
Perl MQTT Pakete installieren
Damit FHEM mit dem MQTT Server kommunizieren kann, müssen zwei Perl Paket installiert werden.
sudo apt-get install libmodule-pluggable-perl && sudo cpan install Net::MQTT:Simple && sudo cpan install Net::MQTT:Constants
Die Installation der beiden Pakete hat bei mir ca. fünf Minuten gedauert. Also Zeit genug um sich einen neuen Kaffee zu holen. 🙂
MQTT-Clienten anlegen
Um im nächsten Schritt eine Verbindung mit einem MQTT-Device aufbauen zu können muss nun zuerst ein MQTT-Client angelegt werden. Dadurch wird später notwendige zur Verbindung mit dem MQTT-Server gespeichert.
define mqttClient MQTT 192.168.0.1:1883
Der Befehl zum erstellen eines MQTT-Clienten entspricht dabei der folgenden “define Name-des-mqtt-clienten MQTT host-oder-ip-des-mqtt-servers:port-des-servers”. Hat Euer MQTT-Server also die IP-Adresse “192.168.0.1”, den Port 1883 was dem Standardport für MQTT entspricht) so lautet der Befehl zum erstellen des MQTT-Clienten “define mqttClient MQTT 192.168.0.1:1883”. Dabei kann für “mqttClient” natürlich auch jeder andere beliebige Name verwendet werden.
shutdown restart
Nachdem der Server neu gestartet ist, seid Ihr so weit neue MQTT-Bridges und -devices anzulegen.
MQTT-Bridge einrichten am Beispiel eines MAX!-Heizungsthermostats
In diesem Beispiel legen wir eine MQTT-Bridge an. Wie der Name schon erahnen lässt verbindet die MQTT-Bridge etwas miteinander. In diesem Fall den MAX!-Heizungsthermostat mit der MQTT-Welt. Diese Verknüpfung funktioniert prinzipiell nach dem gleichen Schema mit allen bereits installierten Sensoren oder Aktoren. Im Fall des MAX! Heizungsthermostats funktioniert dies geht mit folgendem Befehl.
define HeizungArbeitszimmerMqtt MQTT_BRIDGE MAX_15504f
Dadurch wird das Modul “HeizungArbeitszimmerMqtt” vom Typ “MQTT_BRIDGE” angelegt und mit dem bereits vorhandenen Modul “MAX_15504f” verknüpft.
Dazu gibt es das Attribut “publishReading_XYZ”. Dieses bewirkt, dass die MQTT-Bridge alle Aktualisierungen auf dem Reading “XYZ” automatisch an das angegebene Topic weitergeleitet wird.
attr HeizungArbeitszimmerMqtt publishReading_temperature heizung/Arbeitszimmer/temperature
Achtet hierbei darauf, dass “publishReading” und “temperature”(das reading des Heizkörperthermostats(oder jedes anderen Sensors/Aktors)) mit einem Unterstrich verbunden sein müssen. So ergibt sich “publishReading_temperature”.
Für das Reading “Battery” würde das ganze dann folgendermaßen aussehen.
attr HeizungArbeitszimmerMqtt publishReading_battery heizung/Arbeitszimmer/battery
attr HeizungArbeitszimmerMqtt subscribeSet_desiredTemperature heizung/Arbeitszimmer/desiredTemperature
Dies bewirkt, dass das Topic “heizung/Arbeitszimmer/desiredTemperature” aboniert wird und jeder darauf eingehender Wert automatisch in das Reading “desiredTemperature” eingetragen wird. Auf diesem Wege könnt Ihr die gewünschte Temperatur des Heizungsthermostats per MQTT-Nachricht steuern.
Testen der eingestellten MQTT-Bridge
Eine Möglichkeit die frisch erstellte MQTT-Bridge testen zu können, ist hier beschrieben.
Dazu habe ich in NodeRed einen Mini-MQTT-Viewer gebastelt, der Euch die Werte anzeigt die an die eingestellten Topics “heizung/Arbeitszimmer/temperature” und “heizung/Arbeitszimmer/battery” gesendet werden. Außerdem habt ihr die Möglichkeit an das Topic “heizung/Arbeitszimmer/desiredTemperature” den Wert 25 zu senden. Dies hat zur Folge, dass – sollte alles korrekt funktionieren – der verknüpfte Heizkörperthermostat auf 25°C gestellt wird.
… “desiredTemperature” findet. Dies ist das Reading, dass wir in der Konfiguration der MQTT-Bridge mit dem MQTT-Topic “heizung/Arbeitszimmer/desiredTemperature” verknüpft haben. Hier werden euch außerdem der aktuelle Wert des Readings und der Zeitpunkt der letzten Aktualisierung angezeigt.
Klickt Ihr in dem selbst gebauten MQTT-Viewer nun auf die Inject-Node sendet Ihr damit den Wert 25 an das Topic “heizung/Arbeitszimmer/desiredTemperature”. Dadurch sollte nun also auch das Reading Eures Heizungsthermostats auf den Wert 25 aktualisiert werden. Außerdem wird der Zeitpunkt der letzten Aktualisierung auf den aktuellen Zeitpunkt gesetzt.
Um nun den umgekehrten Weg – also die Veröffentlichung eines geänderten Readings auf ein MQTT-Topic – zu testen genügt es in der Detailansicht des MAX!-Heizungsthermostats nach ganz oben zu scrollen. Dort angekommen ändert Ihr wie abgebildet die gewünschte Temperatur Eures Heizungsthermostats.
MQTT-Device anlegen am Beispiel eines Temperatursensors
Eine weitere Möglichkeit des MQTT-Moduls ist das Anlegen von MQTT-Devices. Darunter fallen alle Sensoren oder Geräte die ihre Messwerte direkt über MQTT versenden. Damit Ihr diese Werte erfassen und in einem virtuellen Sensor zusammenfassen könnt, müsst Ihr ein MQTT-Device anlegen.
In diesem Beispiel haben wir in unserem Netzwerk einen Temperatursensor, der in regelmäßigen Abständen den gemessenen Temperaturwert per MQTT-Topic “Umgebungsdaten/keller/Temp” versendet. Um diesen nun zu erfassen wird zuerst mit folgendem Befehl ein MQTT-Device angelegt.
define kellerSensor MQTT_DEVICE
Bevor dieses MQTT_Device nun Werte anzeigen kann muss es natürlich zuerst mit dem gewünschten MQTT-Topic verknüpft werden. In diesem Beispiel wollen wir alle auf dem MQTT-Topic “Umgebungsdaten/keller/Temp” eingehenden Werte im erstellten MQTT-Device anzeigen lassen.
Dazu müsst Ihr folgendes Attribut setzen:
attr kellerSensor subscribeReading_Temp Umgebungsdaten/keller/Temp
Dies bewirkt, dass im erstellten MQTT_Device “kellerSensor” das Reading “Temp” erstellt und mit dem abonierten Topic “Umgebungsdaten/keller/Temp” verknüpft wird.
Um die Ansicht nun noch etwas aufzuhübschen könnt Ihr mit folgendem Attribut angeben, dass dem Wert des Readings Temp ein “°C” angehängt werden soll.
attr kellerSensor stateFormat Temp °C
Weitere Informationen
https://wiki.fhem.de/wiki/MQTT_Einf%C3%BChrung
Viel Spaß mit dem Projekt
Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂
P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂
Hi Fab
Thank you so much for all of the information you have made available here. I have spent many years with homeassistant, and no time at all with FHEM which I am now using to try to get better control of my FHT heating devices. If I can get FHEM communicating with an existing MQTT server that would be my dream.
I have FHEM running on Raspian OS within a docker container, the install went as per your advice with no errors – but when I try to enter the commands via FHEM web front end I get Cannot load module MQTT_BRIDGE or Cannot load module MQTT_CLIENT which makes me think either I’ve messed up not installing the perl/mqtt from within the docker container or I’ve not done something within FHEM to invoke the new MQTT capability?
Kind Regards
Nick