FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: uron am 10 Februar 2024, 10:42:40

Titel: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 10:42:40
Ich stehe seit einigen Tagen völlig auf dem Schlauch:
Ich generiere Daten im ioBroker und möchte diese über MQTT in FHEM verarbeiten. Der MQTT-Server ist im ioBroker konfiguriert, die benötigten Daten finde ich in FHEM in folgendem Device wieder
Internals:
   CID        MQTT2_FHEM_Server
   DEF        MQTT2_FHEM_Server
   FUUID      653d051d-f33f-aab4-f2d7-8769d64aadf4e42c
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_CONN MQTT2_FHEM_Server_192.168.2.193_46440
   MQTT2_FHEM_Server_MSGCNT 17085
   MQTT2_FHEM_Server_TIME 2024-02-10 10:22:47
   MSGCNT     17085
   NAME       MQTT2_MQTT2_FHEM_Server
   NR         2000
   STATE      ???
   TYPE       MQTT2_DEVICE
   eventCount 1912
   READINGS:
     2024-02-08 17:40:06   IODev           MQTT2_FHEM_Server
     2024-02-10 10:22:00   RaumanforderungFBH 0
     2024-02-10 10:22:47   bdc1Soc         13
     2024-02-10 10:22:47   bdc1Temp1       13.6
     2024-02-10 10:22:47   pac             205.8
Attributes:
   alias      MQTT2_FHEM_Server
   event-min-interval .*:300
   event-on-change-reading .*
   readingList MQTT2_FHEM_Server:growatt/0/1397806/devices/SML0CHH0FT/historyLast/bdc1Soc:.* bdc1Soc
MQTT2_FHEM_Server:growatt/0/1397806/devices/SML0CHH0FT/deviceData/pac:.* pac
MQTT2_FHEM_Server:growatt/0/1397806/devices/SML0CHH0FT/historyLast/bdc1Temp1:.* bdc1Temp1
MQTT2_FHEM_Server:0\x20userdata/0/W\xc3\xa4rmepumpe/RaumanforderungFBH:.* RaumanforderungFBH
   room       MQTT2_DEVICE
Hierbei interessiert mich insbesondere das Datum "RaumanforderungFBH".
Dies möchte ich mit notify tracken und daraus eine Pumpenschaltung aktivieren. Hierzu habe ich folgende Abfrage erstellt:
define KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_FHEM_Server:0\x20userdata/0/W\xc3\xa4rmepumpe/RaumanforderungFBH:.* RaumanforderungFBH { if ( MQTT2_FHEM_Server:0\x20userdata/0/W\xc3\xa4rmepumpe/RaumanforderungFBH:.* RaumanforderungFBH == 0 && AutoKG_FBH_Pumpe_Heizraum eq "on") {fhem ("set KG_FBH_Pumpe_Heizraum off")} elsif {fhem ("set KG_FBH_Pumpe_Heizraum on")}}Nach Änderung der Variablen "RaumanforderungFBH" schaltet aber die Pumpe nicht. Ich vermute eine inkorrekt definierte Abfrage im notify.
Versuche ich nun in der DEF die Abfrage zu verändern
define KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_FHEM_Server:RaumanforderungFBH { if ( MQTT2_FHEM_Server:RaumanforderungFBH == 0 && AutoKG_FBH_Pumpe_Heizraum eq "on") {fhem ("set KG_FBH_Pumpe_Heizraum off")} elsif {fhem ("set KG_FBH_Pumpe_Heizraum on")}}bekomme ich die Fehlermeldung
syntax error at (eval 107427) line 1, near "MQTT2_FHEM_Server:"
syntax error at (eval 107427) line 1, near "}}"
Klar , die Syntax stimmt nicht, aber wie lautet sie korrekt, der Fehler liegt ja offenbar ich der Benennung des Device!
Kann mir bitte jemand helfen?

Der Thread https://forum.fhem.de/index.php?topic=103093.msg969665#msg969665 (https://forum.fhem.de/index.php?topic=103093.msg969665#msg969665) hilft mir leider final nicht weiter.
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: Otto123 am 10 Februar 2024, 10:52:14
Hi,

Du solltest mMn einfach auf das Reading triggern und nicht auf den MQTT Event.
define KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_FHEM_Server:RaumanforderungFBH:.* {}Ich habe nicht genau verstanden ob das notify nur auf den Wert 0 triggern soll, wenn ja, kannst Du Dir die Abfrage danach sparen und exakt triggern.
define KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_FHEM_Server:RaumanforderungFBH:.0 {}
Am einfachsten erstellt man sowas mit dem Eventmonitor :)

Gruß Otto
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 11:06:32
Danke für die schnelle Rückmeldung.
Ich hab das mal so umgestelltdefine KG_FBH_Pumpe_HeizraumONOFF MQTT2_FHEM_Server:RaumanforderungFBH:.0 {fhem ("set KG_FBH_Pumpe_Heizraum off")} else {fhem ("set KG_FBH_Pumpe_Heizraum on")}Klappt aber nicht! Fehlermeldung: syntax error at (eval 108771) line 1, near "} else"
syntax error at (eval 108771) line 1, near "}}"
Bin heuite Nachmittag nochmals an dem Thema, sorry!
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: Otto123 am 10 Februar 2024, 11:18:46
Weil der Syntax im Ausführungsteil nicht stimmt! Sowas sollte man einfach separat testen :)
Allgemein Perl: { if (Bedingung) {Befehl} else {Befehl} }

Aber Deine Bedingung fehlt jetzt komplett! Ich habe nicht gesagt Du sollst die Abfrage komplett weglassen nur die Abfrage nach dem Triggerwert.

Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 15:48:09
Aber dann müsste ja
define KG_FBH_Pumpe_HeizraumONOFF MQTT2_FHEM_Server:RaumanforderungFBH:.0 {if ("RaumanforderungFBH"==0) {fhem ("set KG_FBH_Pumpe_Heizraum off")} else {fhem ("set KG_FBH_Pumpe_Heizraum on")}} passen. Die DEF scheint OK, die Pumpe läuft aber immer noch bei Raumanforderung=0  :-\
Das Event (MQTT2_DEVICE MQTT2_MQTT2_FHEM_Server RaumanforderungFBH: 0) erscheint im EventMonitor.

Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: fz55 am 10 Februar 2024, 16:16:08
Hallo,

dieses Define-Statement funktioniert nicht (typ notify fehlt) und die Abfrage würde nur auf einen Wert von 0 ansprechen. Probiere mal (ungetestet):

defmod KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_FHEM_Server:RaumanforderungFBH:.* {if ($EVTPART1==0) {fhem ("set KG_FBH_Pumpe_Heizraum off")} else {fhem ("set KG_FBH_Pumpe_Heizraum on")}}
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: TomLee am 10 Februar 2024, 16:44:45
Hallo,

Vorschlag:

defmod KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_MQTT2_FHEM_Server:RaumanforderungFBH:.0| MQTT2_MQTT2_FHEM_Server:RaumanforderungFBH:.1 { my@cmd=qw(off on);;fhem ("set KG_FBH_Pumpe_Heizraum $cmd[$EVTPART1]")}
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: Otto123 am 10 Februar 2024, 17:21:06
Zitat von: fz55 am 10 Februar 2024, 16:16:08und die Abfrage würde nur auf einen Wert von 0 ansprechen
Das war aber laut Ausgangsfrage genau das Ziel!
Und warum erst reinlassen um dann auszufiltern? if ($EVTPART1==0) ::)
Aber ja: der else Fall käme sonst nie zum tragen - mein Denkfehler!  :-X
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 17:28:48
Hab jetzt eure beiden Lösungsvorschläge getestet - die von fz55 und TomLee:
Leider schaltet die Pumpe nicht, weder beim Wechsel des Wertes RaumanforderungFBH von 0 auf 1, noch umgekehrt.
Der Wert wird vom ioBroker sauber an FHEM "übermittelt", jedoch schaltet die Pumpe nicht um.
Irgendwie irritiert mich aber immer noch die Meldung im Eventmonitor
MQTT2_DEVICE MQTT2_MQTT2_FHEM_Server RaumanforderungFBH: 0 mit dem doppelten MQTT2_MQTT2_, was bedeutet das?

@Otto123: Die Anforderung ist die, dass ich bei einer RaumanforderungFBH=0 die Pumpe abschalten und bei RaumanforderungFBH=1 die Pumpe wieder einschalten möchte. Insofern muss mMn auf beide Werte getriggert werden
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: Otto123 am 10 Februar 2024, 17:31:02
Zitat von: uron am 10 Februar 2024, 17:28:48mit dem doppelten MQTT2_MQTT2_, was bedeutet das?
Dein Device heist so - siehe Dein erster Beitrag
ZitatNAME       MQTT2_MQTT2_FHEM_Server
ich sage doch: nimm den Eventmonitor um die Grundlage anzulegen! Der spricht die Wahrheit. ;)

Zitat von: uron am 10 Februar 2024, 17:28:48Insofern muss mMn auf beide Werte getriggert werden
Dann hat Tom recht! Nur er hat auch (wie ich) deine falsche Annahme übernommen.
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: TomLee am 10 Februar 2024, 17:41:44
Upps, habs korrigiert, ist halt zusammenkopiert gewesen.
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 17:47:26
Jetzt klappt es mit
defmod KG_FBH_Pumpe_HeizraumONOFF notify MQTT2_MQTT2_FHEM_Server:RaumanforderungFBH:.0|MQTT2_MQTT2_FHEM_Server:RaumanforderungFBH:.1 { my@cmd=qw(off on);fhem ("set KG_FBH_Pumpe_Heizraum $cmd[$EVTPART1]")} wird die Pumpe nun auch geschaltet :)
Der Ansatz mit notify MQTT2_MQTT2_FHEM_Server:RaumanforderungFBH:.* müsste sicher aber auch funktionieren!?
Otto, ich hätte sofort auf dich hören sollen, Dank an euch alle!
An solch einer Lösung my@cmd=qw(off on) hab ich aber zu knabbern, wo findet man denn so etwas?
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: fz55 am 10 Februar 2024, 17:56:26
Es wurde ein schlecht gewählter Devicename durch einen schlechten Alias verschlimmbessert. Gibt der Device doch einfach einen sprechenden Namen und entferne den Alias.
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 18:00:23
Zitat von: fz55 am 10 Februar 2024, 17:56:26Es wurde ein schlecht gewählter Devicename durch einen schlechten Alias verschlimmbessert. Gibt der Device doch einfach einen sprechenden Namen und entferne den Alias.
Du hast sicher recht, ich schau mir das die Tage mal an, muss jetzt erst mal Fastnacht feiern.
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: TomLee am 10 Februar 2024, 18:02:07
Zitatmüsste sicher aber auch funktionieren!?

Schon, das notify wär aber bei jedem Event des Device beschäftigt, wozu ?  Wenn man die auszulösenden Readings direkt angibt, dann halt nur dann.

und mein Vorschlag würd nicht mehr klappen

Zitat von: uron am 10 Februar 2024, 17:47:26An solch einer Lösung
my@cmd=qw(off on) hab ich aber zu knabbern, wo findet man denn so etwas?

Wenn du dich etwas mit Perl beschäftigst und verinnerlicht hast, irgendwo in einer Schublade in deinem Kopf ...
Titel: Aw: ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten
Beitrag von: uron am 10 Februar 2024, 18:07:12
Zitat von: TomLee am 10 Februar 2024, 18:02:07Wenn du dich etwas mit Perl beschäftigst und verinnerlicht hast, irgendwo in einer Schublade in deinem Kopf ..
OK, soweit bin ich noch lange nicht, Danke für beide Hinweise.