ioBroker: MQTT-Adapter-Daten in FHEM verarbeiten

Begonnen von uron, 10 Februar 2024, 10:42:40

Vorheriges Thema - Nächstes Thema

uron

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 hilft mir leider final nicht weiter.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

uron

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!
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

Otto123

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.

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

uron

#4
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.

Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

fz55

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")}}

TomLee

#6
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]")}

Otto123

#7
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

uron

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
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

Otto123

#9
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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Upps, habs korrigiert, ist halt zusammenkopiert gewesen.

uron

#11
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?
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

fz55

Es wurde ein schlecht gewählter Devicename durch einen schlechten Alias verschlimmbessert. Gibt der Device doch einfach einen sprechenden Namen und entferne den Alias.

uron

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.
Raspberry Pi  fhem  FHEMobile  CUL  FS20-, HM-, Intertechno-, AVM- und Shelly-Aktoren, Vitoconnect 100, Vitocal 200-S, Optolink, FTUI auf iPad, FTUI auf iPhone, Stromzähler von Powerfox, Wechselrichter Growatt MIN 4600 TL-XH, RasPi ioBroker

TomLee

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 ...