Hallo zusammen!
Auf meinem RPi 2 läuft FHEM, und am RPi hängt über einen USB-Seriell-Adapter meine Luftwärmepumpe, deren Werte ich in FHEM lesen und setzen kann (mittels ser2net im lokalen Netzwerk). Nun möchte ich die Kommunikation (Lesen & Schreiben) mit meinem Home Assistant (läuft auf einem anderen Gerät) verbinden, auf dem bereits ein MQTT Service läuft (auch für andere Geräte im Haus). Könnt Ihr mir bitte einen Hinweis geben, wie das funktioniert? Ich verstehe nicht, was ich bzgl. MQTT in FHEM einrichten muss.
Herzlichen Dank für Eure Hilfe! :)
Zu dem Thema gibt es schon gefühlt 1000 Beiträge...
Die verschiedenen Möglichkeiten der Kommunikation von und zu einem entfernten Gerät (HomeAssistant ist eigentlich aus FHEM-Sicht dann auch nichts anderes) hat Rudi hier schön zusammengefasst:
https://forum.fhem.de/index.php/topic,129896.msg1241583.html#msg1241583 und
https://forum.fhem.de/index.php/topic,129896.msg1241617.html#msg1241617
Nur, dass du bei einem entfernten Server halt (sinnvollerweise) MQTT2_CLIENT nehmen solltest, um die Kommunikation mit dem MQTT-Server zu verwalten.
Wegen nur einem Gerät würde ich die raw-Event+notify-Variante nehmen, falls du Interesse an der "Luxusversion" für viele Geräte hast: https://wiki.fhem.de/wiki/MQTT_GENERIC_BRIDGE
Danke! Die gefühlten 1000 Beiträge zu dem Thema sind mein Problem, denn ich sehe den Wald vor lauter Bäumen nicht. Benötige ich auf FHEM nun die MQTT-Bridge oder MQTT2? Einen entfernen MQTT Server habe ich ja bereits. Ich nutze FHEM nur für die Heizung und plane auch nichts anderes, d.h. ich benötige keine "Luxus-Variante". ;)
Nochmal zu meinem Verständnis: Ist es das, was ich benötige?
https://wiki.fhem.de/wiki/MQTT_GENERIC_BRIDGE
Ich frage, weil dies im selben Satz mit "raw-Event+notify-Variante" steht. Wenn MQTT_GENERIC_BRIDGE die "Luxus-Variante" ist, was wäre die Alternative? (short & simple, da nur ein Gerät)
Zitat von: sunrise am 16 November 2022, 14:39:15
Danke! Die gefühlten 1000 Beiträge zu dem Thema sind mein Problem, denn ich sehe den Wald vor lauter Bäumen nicht. Benötige ich auf FHEM nun die MQTT-Bridge oder MQTT2? Einen entfernen MQTT Server habe ich ja bereits. Ich nutze FHEM nur für die Heizung und plane auch nichts anderes, d.h. ich benötige keine "Luxus-Variante". ;)
Wenn du mit MQTT-Bridge das Modul 00_MQTT.pm meinst: das würde ich nicht nehmen, wenn du das Gerät auch (von HA aus) steuern willst...
MQTT_BRIDGE gab es auch mal, aber das ist aus gutem Grund deprecated => nicht verwenden!
Zitat
Nochmal zu meinem Verständnis: Ist es das, was ich benötige?
https://wiki.fhem.de/wiki/MQTT_GENERIC_BRIDGE (https://wiki.fhem.de/wiki/MQTT_GENERIC_BRIDGE)
Ich frage, weil dies im selben Satz mit "raw-Event+notify-Variante" steht. Wenn MQTT_GENERIC_BRIDGE die "Luxus-Variante" ist, was wäre die Alternative? (short & simple, da nur ein Gerät)
raw-Event+notify ist nicht dasselbe wie MQTT_GENERIC_BRIDGE.
raw-Event+notify geht mit MQTT2_CLIENT, um Anweisungen zu empfangen. Für's senden brauchst du dann noch (ohne MGB) notify (oä.) + publish-Anweisung an das IO (hier: MQTT2_CLIENT).
Also ich verstehe dies hier nicht:
ZitatDas MQTT Gateway wird angelegt mit define 'meinMQTT2Client MQTT2_CLIENT <host>:<port>
https://wiki.fhem.de/wiki/MQTT2_CLIENT
Sind 'host' und 'port' identisch zu IP+Port des Geräts, auf dem FHEM läuft?
Nein. Das sind die Koordinaten des MQTT-Servers...
Autsch, klar! :blush:
Und was macht das alleinige Apostroph hier dem define? Ist es überflüssig oder fehlt hinten noch eins?
Typo im Wiki. Im Zweifel immer in die commandref schauten.
Ok, habe "MyMQTT" mit korrekter IP, Port 8083, username (unter 'attr') und password (mittels 'set') definiert.
Was ist für 'rawEvents' unter 'attr' zu setzen?
Danke für Deine/Eure Geduld! :)
rawEvents muss dann dahin zeigen, wo du deine Anweisungen hinschicken willst, also den Topic-Zweig.
Würde mal "fhem/set/.*" vorschlagen.
Dann auch gleich "subscriptions" auf diesen Zweig beschränken, allerdings ist da die Syntax etwas anders:attr MyMQTT subscriptions fhem/set/#
Zitat von: Beta-User am 17 November 2022, 06:47:18
rawEvents muss dann dahin zeigen, wo du deine Anweisungen hinschicken willst, also den Topic-Zweig.
Würde mal "fhem/set/.*" vorschlagen.
Dann auch gleich "subscriptions" auf diesen Zweig beschränken, allerdings ist da die Syntax etwas anders:attr MyMQTT subscriptions fhem/set/#
Vielen Dank! Ich dachte, nun alles korrekt eingestellt zu haben (siehe Screenshot), aber der Status bleibt auf "disconnected" stehen. Zur Erläuterung: pi4.fritz.box ist mein lokaler RPi 4, auf dem der MQTT Server läuft, während pi.fritz.box (taucht auf dem Screenshot nicht auf) mein lokaler RPi 2 ist, auf dem FHEM (und ser2net) läuft.
Was übersehe ich? Wo ist das MQTT Log bzw. ein Log, wo ich sehen kann, was bzgl. MQTT nicht funktioniert?
Ist es übrigens normal, dass nach einem FHEM Shutdown + Restart alle Einstellungen weg sind, also nicht nur die bzgl. MQTT2, sondern auch bzgl. meiner Wärmepumpe?
1., dass Screenshots Mist sind, und 2., dass der übliche Port für MQTT 1883 ist....
Gespeichert wird mit save.
Danke, das mit den Ports verwechsle ich ständig (FHEM:8083 vs. MQTT:1883).
Prima, nun ist er 'opened'. Kaum macht man's richtig, funktioniert's. ;)
Ah, verstehe, habe den "Copy" Knopf unten gefunden:
define MyMQTT MQTT2_CLIENT pi4.fritz.box:1883
attr MyMQTT rawEvents fhem/set/.*
attr MyMQTT subscriptions fhem/set/#
attr MyMQTT username xxxxx
# BUF
# CFGFN
# Clients :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
# ClientsKeepOrder 1
# DEF pi4.fritz.box:1883
# DeviceName pi4.fritz.box:1883
# FD 11
# FUUID xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# NAME MyMQTT
# NR 24
# PARTIAL
# STATE opened
# TYPE MQTT2_CLIENT
# WBCallback
# clientId MyMQTT
# eventCount 12
# lastMsgTime xxxxxxxxxxx.xxxxx
# nextOpenDelay 5
# MatchList:
# 1:MQTT2_DEVICE ^.
# 2:MQTT_GENERIC_BRIDGE ^.
# READINGS:
# 2022-11-17 19:06:12 state opened
#
setstate MyMQTT opened
setstate MyMQTT 2022-11-17 19:06:12 state opened
Muss ich noch einstellen, dass kein TLS verwendet werden soll o.ä.? Ich habe auf dem MQTT Server Username und Password gesetzt und dieselben in FHEM eingetragen, sehe aber diese Meldungen im Log:
2022.11.17 19:04:45 1: pi4.fritz.box:1883 reappeared (MyMQTT)
2022.11.17 19:04:45 1: MyMQTT: Connection refused, not authorized
2022.11.17 19:04:45 1: pi4.fritz.box:1883 disconnected, waiting to reappear (MyMQTT)
2022.11.17 19:05:12 3: Opening Mythz device pi.fritz.box:2000
2022.11.17 19:05:12 3: Mythz device opened
2022.11.17 19:05:33 1: pi4.fritz.box:1883 reappeared (MyMQTT)
2022.11.17 19:05:33 1: MyMQTT: Connection refused, not authorized
2022.11.17 19:05:33 1: pi4.fritz.box:1883 disconnected, waiting to reappear (MyMQTT)
2022.11.17 19:05:41 1: pi4.fritz.box:1883 reappeared (MyMQTT)
2022.11.17 19:06:12 1: pi4.fritz.box:1883 disconnected, waiting to reappear (MyMQTT)
Wenn irgendeine Art von Verschlüsselung gewünscht ist, muss man das afaik nochmal gesondert angeben. Ich vermute einen Typo bei den credentials (nur zur Sicherheit: es sind die MQTT-Credentials, die man angeben muss, nicht die FHEM-credentials)
Auf die Verschlüsselung habe ich bisher bewusst verzichtet, da ich noch beim Testen bin. Die Credentials sind korrekt und die vom externen MQTT Server (RPi 4).
Inzwischen habe ich das serielle Kabel deutlich verkürzt, da ich dort Probleme vermutete, aber die "too slow" Meldungen kommen immer noch (liegt vermutlich am alten RPi 2, auf dem FHEM läuft).
Das hat nichts mit meinem Problem zu tun, dass ich nicht so richtig weiß, wie ich nun diverse Werte über MQTT schicken kann. Im MQTT Snooper habe ich testhalber # subscribed, aber es kommt nichts.
Nach einem Neustart kommen diese FHEM Meldungen im Log:
2022.11.19 19:12:40 0: Server shutdown
2022.11.19 19:12:42 1: Including fhem.cfg
2022.11.19 19:12:43 3: WEB: port 8083 opened
2022.11.19 19:12:43 2: eventTypes: loaded 143 lines from ./log/eventTypes.txt
2022.11.19 19:12:43 3: Opening Mythz device pi.fritz.box:2000
2022.11.19 19:12:43 3: Mythz device opened
2022.11.19 19:12:43 1: Including ./log/fhem.save
2022.11.19 19:12:44 1: Messages collected while initializing FHEM:SecurityCheck:
WEB is not password protected
Protect this FHEM installation by defining an allowed device with define allowed allowed
You can disable this message with attr global motd none
2022.11.19 19:12:44 1: usb create starting
2022.11.19 19:12:44 3: Probing ZWDongle device /dev/serial0
2022.11.19 19:12:44 3: Probing CUL device /dev/ttyAMA0
2022.11.19 19:12:44 3: Probing TCM_ESP3 device /dev/ttyAMA0
2022.11.19 19:12:45 3: Probing ZWDongle device /dev/ttyAMA0
2022.11.19 19:12:45 3: Probing SIGNALDuino device /dev/ttyAMA0
2022.11.19 19:12:45 3: Probing MYSENSORS device /dev/ttyAMA0
2022.11.19 19:12:45 3: Probing ArduCounter device /dev/ttyAMA0
2022.11.19 19:12:45 3: Probing ElsnerWS device /dev/ttyAMA0
2022.11.19 19:12:46 3: Probing FRM device /dev/ttyAMA0
2022.11.19 19:12:51 3: Probing TCM_ESP3 device /dev/ttyUSB0
2022.11.19 19:12:51 3: Probing TCM_ESP2 device /dev/ttyUSB0
2022.11.19 19:12:52 3: Probing FHZ device /dev/ttyUSB0
2022.11.19 19:12:52 3: Probing TRX device /dev/ttyUSB0
2022.11.19 19:12:52 3: Probing ZWDongle device /dev/ttyUSB0
2022.11.19 19:12:52 3: Probing SIGNALDuino device /dev/ttyUSB0
2022.11.19 19:12:53 3: Probing MYSENSORS device /dev/ttyUSB0
2022.11.19 19:12:53 3: Probing ArduCounter device /dev/ttyUSB0
2022.11.19 19:12:53 3: Probing ElsnerWS device /dev/ttyUSB0
2022.11.19 19:12:54 3: Probing FRM device /dev/ttyUSB0
2022.11.19 19:12:59 1: usb create end
2022.11.19 19:12:59 0: Featurelevel: 6.1
2022.11.19 19:12:59 0: Server started with 9 defined entities (fhem.pl:26635/2022-11-01 perl:5.032001 os:linux user:fhem pid:810)
2022.11.19 19:13:02 3: Mythz/RAW: THZ_ReadAnswer: InterfaceNotRespondig. Maybe too slow
2022.11.19 19:13:02 1: pi4.fritz.box:1883 reappeared (MyMQTT)
MQTT state ist "opened". Das ist ok, oder nicht?
Muss ich extra etwas publishen?
define MyMQTT MQTT2_CLIENT pi4.fritz.box:1883
attr MyMQTT rawEvents fhem/set/.*
attr MyMQTT subscriptions fhem/set/#
attr MyMQTT username user
# BUF
# Clients :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
# ClientsKeepOrder 1
# DEF pi4.fritz.box:1883
# DeviceName pi4.fritz.box:1883
# FD 4
# FUUID xxxxxxxxxx
# NAME MyMQTT
# NR 16
# PARTIAL
# STATE opened
# TYPE MQTT2_CLIENT
# WBCallback
# clientId MyMQTT
# eventCount 1
# lastMsgTime xxx.xxx
# nextOpenDelay 5
# MatchList:
# 1:MQTT2_DEVICE ^.
# 2:MQTT_GENERIC_BRIDGE ^.
# READINGS:
# 2022-11-19 19:13:02 state opened
#
setstate MyMQTT opened
setstate MyMQTT 2022-11-19 19:13:02 state opened
@Beta-User und andere Nutzer:
Könnt Ihr mir bitte nochmal einen Tipp geben, ob/was noch zu tun ist, damit Werte von der THZ auch zum MQTT Server geschickt werden? Tausend Dank! :)
Zitat von: sunrise am 21 November 2022, 18:35:21
@Beta-User und andere Nutzer:
Könnt Ihr mir bitte nochmal einen Tipp geben, ob/was noch zu tun ist, damit Werte von der THZ auch zum MQTT Server geschickt werden? Tausend Dank! :)
"Ganz normal" - per Event-Handler, z.B. notify. Am einfachsten geht das, wenn man den "Event-Monitor" zu Hilfe nimmt (bitte im Wiki nachschlagen, falls das noch unklar ist).
Vermutlich hast du dann nur das Problem, dass du mit "komischen" Dingen wie "$EVTPART1" rummachen must. Aktuelles Beispiel wäre hier zu finden: https://forum.fhem.de/index.php/topic,129896.msg1246933.html#msg1246933
(Man kann das auch generalisieren und sollte darauf achten, dass es NOTIFYDEF nicht zerhaut, wenn man mehrere Werte rauspicken will).
@Beta-User
Sorry, dass ich nochmal eine Frage habe, aber ich bin hier nicht weitergekommen. Ich denke, alles richtig eingestellt zu haben (inkl. korrektem Passwort für den "user" am MQTT Server):
define MyMQTT MQTT2_CLIENT pi4.fritz.box:1883
attr MyMQTT rawEvents fhem/set/.*
attr MyMQTT subscriptions fhem/set/#
attr MyMQTT username user
# BUF
# CFGFN
# Clients :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
# ClientsKeepOrder 1
# DEF pi4.fritz.box:1883
# DeviceName pi4.fritz.box:1883
# FD 4
# FUUID xxxxxxxxxxxxx
# NAME MyMQTT
# NR 47
# PARTIAL
# STATE opened
# TYPE MQTT2_CLIENT
# WBCallback
# clientId MyMQTT
# eventCount 1575
# lastMsgTime 1671470513.33139
# nextOpenDelay 5
# MatchList:
# 1:MQTT2_DEVICE ^.
# 2:MQTT_GENERIC_BRIDGE ^.
# READINGS:
# 2022-12-19 18:21:53 state opened
#
setstate MyMQTT opened
setstate MyMQTT 2022-12-19 18:21:53 state opened
Im FHEM Logfile taucht zigfach das auf:
2022.12.19 18:08:24 1: pi4.fritz.box:1883 reappeared (MyMQTT)
2022.12.19 18:08:24 1: MyMQTT: Connection refused, not authorized
2022.12.19 18:08:24 1: pi4.fritz.box:1883 disconnected, waiting to reappear (MyMQTT)
2022.12.19 18:08:53 1: pi4.fritz.box:1883 reappeared (MyMQTT)
2022.12.19 18:08:53 1: MyMQTT: Connection refused, not authorized
2022.12.19 18:08:53 1: pi4.fritz.box:1883 disconnected, waiting to reappear (MyMQTT)
2022.12.19 18:09:02 1: pi4.fritz.box:1883 reappeared (MyMQTT)
2022.12.19 18:09:02 1: pi4.fritz.box:1883 disconnected, waiting to reappear (MyMQTT)
2022.12.19 18:09:02 1: pi4.fritz.box:1883 reappeared (MyMQTT)
Wieso "not authorized"? Nachdem ich nun mehrfach User + PW des MQTT Servers (pi4.fritz.box) überprüft und für richtig erkannt habe, bin ich mit meinem Latein am Ende.
Hast Du (oder sonst jemand) bitte noch einen Tipp, wo ich besonders nachschauen muss? Ganz herzlichen Dank! :-)
@Beta-User
Nachdem ich alles neu aufgesetzt habe, kommen keine "Not authorised" Warnungen mehr, aber ich bekomme von fhem trotzdem keine Nachrichten.
define MyMQTT2 MQTT2_CLIENT pi4.fritz.box:1883
attr MyMQTT2 rawEvents fhem/set/.*
attr MyMQTT2 subscriptions fhem/set/#
attr MyMQTT2 username user
# BUF
# Clients :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
# ClientsKeepOrder 1
# DEF pi4.fritz.box:1883
# DeviceName pi4.fritz.box:1883
# FD 4
# FUUID xxxxxxxxxx
# NAME MyMQTT2
# NR 46
# PARTIAL
# STATE opened
# TYPE MQTT2_CLIENT
# WBCallback
# clientId MyMQTT2
# eventCount 1
# lastMsgTime 1672135920.30195
# nextOpenDelay 5
# MatchList:
# 1:MQTT2_DEVICE ^.
# 2:MQTT_GENERIC_BRIDGE ^.
# READINGS:
# 2022-12-27 11:05:00 state opened
#
setstate MyMQTT2 opened
setstate MyMQTT2 2022-12-26 22:48:29 lastPublish AussenTemp:
setstate MyMQTT2 2022-12-27 11:05:00 state opened
Meine subscription in einem MQTT Browser sieht so aus:
fhem/#
Da der MQTT Server auf dem Pi4 von anderswo Werte bekommt, und ich die auch lesen kann, liegt es m.E. nicht am MQTT Server, sondern an einer falschen Einstellung meinerseits in fhem.
Kannst Du mir bitte noch einen Tipp geben, wo ich nachschauen sollte? Herzlichen Dank!
Würde mal die clientOrder prüfen.
Was ist eine "clientOrder"?
Wenn ich in fhem unter Mythz mittels get einen Parameter lese, müsste der dann nicht automatisch in MQTT auftauchen?
Zitat von: sunrise am 27 Dezember 2022, 11:53:14
Was ist eine "clientOrder"?
Ist deine Suchmaschine kaputt?
Aktuell z.B. (wenn man den Begriff nicht einfach mal in der commandref sucht oder sich die attrTemplate-Sätze zu MQTT_GENERIC_BRIDGE ansieht):
Zitat von: rudolfkoenig am 28 Dezember 2022, 10:47:29
Dafuer werden die ParseFn Funktionen aller Client Module aufgerufen, bei MQTT2_SERVER ist die Voreinstellung fuer Clients :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:, man kan sie aber aendern mit der clientOrder Attribut.
Zitat
Wenn ich in fhem unter Mythz mittels get einen Parameter lese, müsste der dann nicht automatisch in MQTT auftauchen?
Verstehe nicht, was das bedeuten soll, und ich vermute auch, dass die Lösung dafür nicht in diesem Thread steht, oder?