notify mit mqtt2 setreading geht nicht

Begonnen von laserrichi, 15 Februar 2024, 11:12:46

Vorheriges Thema - Nächstes Thema

laserrichi

ich bin etwas am rätseln mit dem setreading auf ein mqtt2 device

Folgenes szenario:  ein Temperaturwert soll nur geändert werden wenn er einen bestimmten wert hat.

Im Notify steht folgendes:

G32_Grill.ExternSensor.* { if ($EVTPART1 eq "1500" ) {fhem("setreading ".$NAME." ".$EVTPART0." n/a")}}
G32_Grill ist ein mqtt2 device. Es meldet mir mit ExternSensor1-4 werte, und nur wenn 1500 drin steht  soll das Reading auf n/a gesetzt werden.

Es Triggert auch wunderbar. Aber der Ausführungsteil schlägt fehl.

2024.02.14 18:31:28 5: Triggering 1500_check
2024.02.14 18:31:28 4: 1500_check exec { if ($EVTPART1 eq "1500" ) {fhem("setreading ".$NAME." ".$EVTPART0." n/a")}}
2024.02.14 18:31:28 3: 1500_check return value: Usage: setreading <name> [YYYY-MM-DD HH:MM:SS] <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.

Also mal die Variablen durch feste Namen ersetzt setreading G32_Grill ExternSensor1 n/a... selber Fehler
Mache ich das jedoch auf ein hm Device, funktioniert es.
Setzen über cmd line geht auch wunderbar.

Der Gedanke das aufs selbe Device Probleme gibt, hatte ich auch mit einen sleep ebenso ohne erfolg getestet.

Meine Vermutung ist, es hat etwas damit zu tun das es ein MQTT2 device ist.

mit userreading hatte ich es auch probiert, und funktioniert ebenfalls nicht.

list vom mqtt2 device

defmod G32_Grill MQTT2_DEVICE grill_78e36d177d5c
attr G32_Grill event-on-change-reading .*
attr G32_Grill readingList grill_78e36d177d5c:G32_Grill/debug:.* debug\
grill_78e36d177d5c:G32_Grill/sensor/bt_signalst__rke/.* BluetoothSignal\
grill_78e36d177d5c:G32_Grill/sensor/g32_licht/.* Licht\
grill_78e36d177d5c:G32_Grill/sensor/g32_haube/.* Haube\
grill_78e36d177d5c:G32_Grill/sensor/g32_sensor_1/.* Zone1\
grill_78e36d177d5c:G32_Grill/sensor/g32_sensor_2/.* Zone2\
grill_78e36d177d5c:G32_Grill/sensor/g32_sensor_3/.* Zone3\
grill_78e36d177d5c:G32_Grill/sensor/g32_sensor_4/.* Zone4\
grill_78e36d177d5c:G32_Grill/sensor/g32_external_sensor_1/.* ExternSensor1\
grill_78e36d177d5c:G32_Grill/sensor/g32_external_sensor_2/.* ExternSensor2\
grill_78e36d177d5c:G32_Grill/sensor/g32_external_sensor_3/.* ExternSensor3\
grill_78e36d177d5c:G32_Grill/sensor/g32_external_sensor_4/.* ExternSensor4\
grill_78e36d177d5c:G32_Grill/sensor/g32_gasbuddy_f__llstand/.* Gasbuddy\
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

Beta-User

Hmm, da es mit festen Werten auch nicht klappt, scheint es in der Tat etwas mit der Eventverarbeitung (etvl. der Reihenfolge, durch den Namen vorgegeben) zu tun zu haben.

Jedenfalls könnte man, wenn man schon doppelte Anfühungszeichen verwendet , auch die Interpolation lesbarer machen und den Doppelpunkt entfernen:
G32_Grill.ExternSensor.* { if ($EVTPART1 eq "1500" ) {chop($EVTPART0); fhem("setreading $NAME $EVTPART0 n/a")}}
Da das hier aber ein MQTT2_DEVICE ist, kannst du das auch per Perl-Anweisung in der readingList erledigen lassen:
G32_Grill/sensor/g32_external_sensor_1/.*  {if ($EVENT eq '1500') return {ExternSensor1=>'n/a'}; return {ExternSensor1=>$EVENT}}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

laserrichi

Ok Danke.

Ja das mit den Anführungszeichen ;-)  man probiert so vieles und am ende bleibt sowas dann übrig :-)

Aber mit dem Einbauen im readingList ist eine gute Idee und sorgt für weniger last

Aber da stimmt mit der Syntax noch was nicht: syntax error at (eval 347575) line 1, near ") return"
syntax error at (eval 347575) line 1, near "}}"
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light

Beta-User

Mist, sowas sollte man nicht aus dem Kopf zusammenschustern...
So könnte es klappen (immer noch ungetestet):
G32_Grill/sensor/g32_external_sensor_1/.*  {if ($EVENT eq '1500') {return {ExternSensor1=>'n/a'}}; return {ExternSensor1=>$EVENT}}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

laserrichi

Super Danke, das funktioniert perfekt. Readinglist ist die beste Lösung.
RaspberryPi 4 Bullseye,Homematic,Z-Wave,Rademacher Duofern,Signalduino,Fritz7590,ESPEasy,Tasmota,Robonect,Kameras,1-Wire,Modbus,Solar,Maranz,VU+,ulanzi tc001 mit awtrix light