Metainformationen zur Seite
MQTT Gateway - Alle FHEM-Readings weitergeben
Um generisch alle Readings von FHEM an den MQTT-Broker weiterzugeben (z.B. Daten von EnoceanPi), kann diese Minimalkonfiguration verwendet werden:
define lb_mosquitto MQTT loxberry:1883 loxberry <deinMQTTPasswort> define mqttGeneric MQTT_GENERIC_BRIDGE attr mqttGeneric IODev lb_mosquitto attr mqttGeneric globalDefaults sub:qos=2 pub:qos=0 retain=1 attr mqttGeneric globalPublish *:topic={"fhemwohnzimmer/$device/$reading"}
Kurz-Beschreibung:
Zeile 1: lb_mosquitto ist der Name der Verbindung, und loxberry:1883 der Hostname:Port des Brokers am LoxBerry. Dahinter der Benutzer und das Passwort des MQTT-Brokers (siehst du im Plugin unter MQTT-Broker)
Zeile 2: Das GENERIC_BRIDGE Plugin wird definiert
Zeile 3: Der generischen Bridge wird die Verbindung zugeordnet
Zeile 4: Es wird mit retain=1 an den Broker übergeben, d.h. das LoxBerry MQTT Gateway erhält bei einem Neustart die letzten Daten
Zeile 5: Es wird * (alles) an das Topic fhemwohnzimmer/device/reading übergeben. Die Topicbezeichnung fhemwohnzimmer ist dabei frei wählbar. Sie sollte eindeutig sein - und muss konsequent verwendet werden.
Im LoxBerry MQTT Gateway folgende Subscription erstellen: fhemwohnzimmer/#
Mit Filter-Attributen in mqttGeneric können die übermittelten Readings eingegrenzt werden (z.B. nur Temperatur), siehe Doku.
Dokumentation des FHEM mqttGeneric Moduls: https://fhem.de/commandref_DE.html#MQTT_GENERIC_BRIDGE
"Cannot load module MQTT"
Sollte bei der Eingabe der Minimalkonfiguration die Fehlermeldung ""Cannot load module MQTT" ausgegeben werden, dann scheint noch ein Modul resp. Repository zu fehlen. In diesem Falle sind folgende Schritte notwendig:
- Login auf dem Loxberry per SSH mit dem SSH-/Konsolen-Login (Standard User: loxberry, alternativer User kann z.B. bei der Loxberry Installation geändert worden sein)
- Wechsel zu root mittels „su -<ENTER>“ (Passwort für den root Superuser wurde typischerweise ebenfalls bei der Loxberry Installation gesetzt)
- Ausführen von "cpan install Net::MQTT:Constants"
Nach der Installation des Repositories kann die Minimalkonfiguration oben fortgesetzt werden.
Problem mit dem MQTT Modul
Bei einem Benutzer analysierte ich das Verhalten, dass die MQTT-Verbindung von FHEM durchgehend geöffnet und geschlossen wurde (zick mal pro Sekunde). Das Problem war, dass die Credentials initial falsch eingegeben wurden. Durch einen Bug in FHEM/MQTT werden bei einem erneuten define lb_mosquitto MQTT
in der fhem.cfg die neuen Zugangsdaten nicht übernommen.
Lösungsweg:
- An der Shell anmelden (Eine SSH-Verbindung mit putty aufbauen / Shell-Zugriff)
- Zu root machen:
su
cd /opt/fhem/FHEM/FhemUtils
(bei alten Versionen des FHEM-Plugins:/opt/loxberry/data/plugins/fhem/FHEM/FhemUtils
)nano uniqueID
- In der Datei befinden sich sämtliche Zugangsdaten, die du in der fhem.cfg definiert hast. Prüfe den Benutzernamen und das Passwort bei den Einträgen von lb_mosquitto, dass diese mit den Daten im MQTT Gateway Plugin übereinstimmen.
- In nano speicherst du mit Strg-X ("Änderungen speichern?") und J ("Ja").
- Danach FHEM neu starten und prüfen, ob die Verbindung nun offen ist (nicht mehr "flackert").
Nur die Readings aus einem bestimmten Raum übergeben
Damit nicht global alle Geräte senden, besteht die Möglichkeit durch einen Raum (z.B. MQTT) eine Art Filter anzulegen. Also nur die Geräte die sich im Raum MQTT befinden, senden dann noch an den Miniserver.
Dazu wird der folgende Befehl in die Commandozeile von FHEM eingegeben:
defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt room=MQTT
Rückgängig machen, um wieder alle Geräte, aus allen Räumen zu übergeben:
defmod mqttGeneric MQTT_GENERIC_BRIDGE
FHEM-Dienststatus per MQTT publishen
Der Status von FHEM selbst kann auf diese Weise an den Broker übergeben werden:
attr lb_mosquitto last-will retain:1 fhemwohnzimmer/connection/status disconnected attr lb_mosquitto on-connect retain:1 {Log3("mqtt",3,"connected to MQTT server");;1} fhemwohnzimmer/connection/status connected attr lb_mosquitto on-disconnect retain:1 {Log3("mqtt",3,"disconnected from MQTT server");;1} fhemwohnzimmer/connection/status disconnected
Man kann 'connected' und 'disconnected' dann mit Conversions in Zahlen übersetzen (z.B. 1 und 0), oder man übergibt statt 'connected' und 'disconnected' direkt die entsprechenden Zahlen.