Hallo, ich habe mal wieder ein kleines (hoffentlich) Problem.
Ich habe eine Sonoff RF-Bridge, die per MQTT Daten an FHEM sendet.
3 Bewegungsmelder im Haus nutzen diese Bridge per 433Mhz. Alle geben einen anderen Datenwert raus:
RfReceived_Data oder Data: E7D74E zum Beispiel.
Wenn sich nun irgendwer im Haus bewegt und es dunkel genug ist, soll das FLurlicht für kurze Zeit angehen.
defmod Flur_Bewegung_oben DOIF ([MQTT2_Wlan_Bridge_01:Data] eq 'E7369E' and [MQTT2_Sensor_Schlafzimmer:BH1750_Illuminance]<=20 and [Licht_automatik] eq 'on') (set MQTT2_Wlan_Steckdose_21 on-for-timer 120;;set MQTT2_Wlan_Steckdose_20 on-for-timer 120)
Jetzt kommt das Problem:
Beim 1. Mal pro Bewegungsmelder geht es.
Sollte sich wer das 2. Mal durch denselben Bewegungsmelderbereich gehen, geht nichts.
Was ich schon gefunden habe:
Der Sonoff-RF gibt jedes Mal eine volle Meldung:
18:02:05.325 MQT: tele/Wlan-Bridge-01/RESULT = {"Time":"2021-10-16T18:02:05","RfReceived":{"Sync":12520,"Low":420,"High":1220,"Data":"E7D74E","RfKey":"None"}}
Nur in FHEM wird, wenn es derselbe Code ist, das Reading: RfReceived_Data oder Data nicht geändert.
Es werden nur die Readings: Sync, Low, High und Time geändert.
Damit triggert das DOIF auch nicht.
Was kann man tun?
Lieben Gruß,
Ingo
Zitat von: eisi am 16 Oktober 2021, 19:14:38
Was kann man tun?
a) vollständige Infos liefern (z.B. wie event-on-change-Attribute gesetzt sind)?
b) im richtigen Bereich posten.
Das hier ist m.E. kein MQTT(2?)-"Problem", sondern eher ein Einsteiger-DOIF-Thema, das nach ELSE oder repeatsame riecht (nicht meine Stärke, würde das vermutlich über ein notify lösen, wenn man die Events kennen würde (=> Siehe a)))...
Zu a) Da habe ich bis eben nichts verstellt.
Zu b) Das ist kein DoIF Thema, da das DOIF nur dann getriggert werden kann, wenn sich der Wert für Data ändert, was er bis eben nicht tat. :-)
Lösung:
event-on-update-reading data
Damit wird auch der Datawert immer neu mitübertragen, auch wenn sich an dem Wert nichts geändert hat.
Aber Danke für den richtigen Pfad :-)
::) schön, wenn's irgendwie geholfen hat...
(da sind gleich ein paar Dinge "unsauber" formuliert, aber ohne a) tappe ich auch weiter nur im Dunkeln, wie es vorher "eingestellt" war. So habe ich immerhin die Idee, dass das ein MQTT2_DEVICE sein könnte, bei dem attrTemplate "tasmota_rf" gesetzt war... Das ist experimentell, und eventuell könnte ich das ja irgendwohin schreiben, wenn man mir sinnvolle Rückmeldung gibt, wie und wo...!)
Für a) Ich habe noch nie (seit 2015) daran etwas verstellt. Ich wusste nicht, dass es das so gibt.
Es ist ein MQTT2 Device mit Tasmota RF
Was möchtest du genau wissen?
Wenn es ums entwickeln geht, bin ich gerne behilflich.
Also: MQTT2_DEVICE gibt es seit 2018. Das Device kann also nicht seit 2015 so eingestellt gewesen sein ;D ...
Ein RAW-listing wäre hilfreich. Ich kann sonst nur rätseln, warum bei dir "automatisch" event-on-change-reading auf (vermutlich) ".*" gestanden hat.
Wenn es nicht das attrTemplate war, kann es nur ein notify oä. sein, das das automatisch bei einem "global:DEFINED.*" setzt (was ja oft ok ist, aber leider eben keine 100%-Lösung). Aber auch das wäre kein MQTT-Thema ;D .
Ich meinte ja auch, dass ich seit 2015 mit FHEM herumbastle :-)
Ich habe aber kein Sonoff-RF Forum gefunden :-)
Internals:
CID Wlan_Bridge_01
DEF Wlan_Bridge_01
DEVICETOPIC MQTT2_Wlan_Bridge_01
FUUID 5d5e96f8-f33f-f5fa-7a45-1fe6b3e4134f14cb
IODev m2s
LASTInputDev m2s
MSGCNT 11670
NAME MQTT2_Wlan_Bridge_01
NR 509
STATE 192.168.0.50
TYPE MQTT2_DEVICE
m2s_MSGCNT 11670
m2s_TIME 2021-10-17 19:48:40
READINGS:
2020-01-19 18:15:36 Command Unknown
2021-10-17 19:34:37 Data D69AA8
2021-10-16 18:03:11 FallbackTopic cmnd/Wlan-Bridge-01_fb/
2021-10-16 18:08:31 GPIO12_0 None
2021-10-16 18:08:31 GPIO14_0 None
2021-10-16 18:07:56 GPIO1_0 None
2021-10-16 18:08:31 GPIO2_0 None
2021-10-16 18:07:56 GPIO3_0 None
2021-10-16 18:08:31 GPIO4_0 None
2021-10-16 18:08:31 GPIO5_0 None
2021-10-16 18:03:11 GroupTopic cmnd/sonoffs/
2021-10-17 19:48:40 Heap 27
2021-10-16 18:03:11 Hostname Wlan-Bridge-01-6877
2021-10-04 20:50:04 IODev m2s
2021-10-16 18:03:11 IPAddress 192.168.0.50
2021-10-16 18:08:37 Info1_FallbackTopic cmnd/Wlan-Bridge-01_fb/
2021-10-16 18:08:37 Info1_GroupTopic cmnd/sonoffs/
2021-10-16 18:08:37 Info1_Module Sonoff Bridge
2021-10-16 18:08:37 Info1_Version 9.5.0(tasmota)
2021-10-16 18:08:37 Info2_Hostname Wlan-Bridge-01-6877
2021-10-16 18:08:37 Info2_IPAddress 192.168.0.50
2021-10-16 18:08:37 Info2_WebServerMode Admin
2021-10-16 18:08:37 Info3_RestartReason Software/System restart
2021-10-16 18:08:37 LWT Online
2021-10-17 19:48:40 LoadAvg 19
2021-10-16 18:03:11 Module Sonoff Basic
2021-10-16 18:07:56 Module_2 Sonoff RF
2021-10-16 18:08:31 Module_25 Sonoff Bridge
2021-10-17 19:48:40 MqttCount 1
2021-10-16 18:05:29 OtaUrl http://ota.tasmota.com/tasmota/release/tasmota.bin.gz
2021-10-16 18:08:37 POWER
2021-10-16 18:03:11 RestartReason Software/System restart
2021-10-16 17:31:45 RfKey1 Default sent
2019-09-01 16:18:16 RfKey10 Set to default
2019-09-01 16:18:19 RfKey11 Set to default
2019-09-01 16:18:22 RfKey12 Set to default
2019-09-01 15:47:45 RfKey14 Set to default
2019-09-02 15:18:45 RfKey15 Learn failed
2019-09-01 15:47:38 RfKey16 Set to default
2019-09-01 18:09:17 RfKey2 Set to default
2019-09-01 18:09:55 RfKey3 Set to default
2019-09-01 18:10:00 RfKey4 Saved
2019-09-01 18:10:21 RfKey5 Set to default
2019-09-01 18:10:24 RfKey6 Set to default
2019-09-01 16:15:05 RfKey7 Set to default
2019-09-01 16:15:10 RfKey8 Set to default
2019-09-01 16:18:12 RfKey9 Set to default
2021-10-17 19:34:37 RfReceived_Data D69AA8
2021-10-17 19:34:37 RfReceived_High 690
2021-10-17 19:34:37 RfReceived_Low 320
2021-10-17 19:34:37 RfReceived_RfKey None
2021-10-17 19:34:37 RfReceived_Sync 5040
2021-10-17 19:48:40 Sleep 50
2021-10-17 19:48:40 SleepMode Dynamic
2021-10-17 19:48:40 Time 2021-10-17T18:48:40
2021-10-16 18:05:29 Upgrade Version 9.5.0 from http://ota.tasmota.com/tasmota/release/tasmota.bin.gz
2021-10-17 19:48:40 Uptime 1T01:40:08
2021-10-17 19:48:40 UptimeSec 92408
2021-10-16 18:05:06 Vcc 3.504
2021-10-16 18:03:11 Version 9.1.0(lite)
2021-10-16 18:03:11 WebServerMode Admin
2021-10-17 19:48:40 Wifi_AP 1
2021-10-17 19:48:40 Wifi_BSSId 7C:FF:4D:73:6C:3D
2021-10-17 19:48:40 Wifi_Channel 5
2021-10-17 19:48:40 Wifi_Downtime 0T00:00:03
2021-10-17 19:48:40 Wifi_LinkCount 1
2021-10-17 19:48:40 Wifi_Mode 11n
2021-10-17 19:48:40 Wifi_RSSI 84
2021-10-17 19:48:40 Wifi_SSId eisenkraemer2
2021-10-17 19:48:40 Wifi_Signal -58
2021-10-17 19:34:37 json_raw {"Time":"2021-10-17T18:34:37","RfReceived":{"Sync":5040,"Low":320,"High":690,"Data":"D69AA8","RfKey":"None"}}
Attributes:
IODev m2s
alias Wlan-Bridge-1
event-on-change-reading .*
event-on-update-reading Data
model A_01d_tasmota_rf
readingList tele/Wlan-Bridge-01/INFO.:.* { json2nameValue($EVENT) }
tele/Wlan-Bridge-01/RESULT:.* { $EVENT =~ m,..RfReceived....Sync..([A-Za-z0-9]+)..Low..([\d]+)..High..([\d]+)..Data...([A-Za-z0-9]+)...RfKey...([^"]+)..., ? {"json_raw"=>$EVENT} : undef }
tele/Wlan-Bridge-01/RESULT:.* { $EVENT =~ m,..RfReceived....Sync..([A-Za-z0-9]+)..Low..([\d]+)..High..([\d]+)..Data...([A-Za-z0-9]+)...RfKey...([^"]+)..., ? {"Data"=>"$4"} : undef }
tele/Wlan-Bridge-01/STATE:.* { json2nameValue($EVENT) }
tele/Wlan-Bridge-01/RESULT:.* { json2nameValue($EVENT) }
stat/Wlan-Bridge-01/RESULT:.* { json2nameValue($EVENT) }
Wlan_Bridge_01:tele/Wlan-Bridge-02/LWT:.* LWT
Wlan_Bridge_01:cmnd/Wlan-Bridge-02/POWER:.* POWER
Wlan_Bridge_01:tele/Wlan-Bridge-01/LWT:.* LWT
Wlan_Bridge_01:cmnd/Wlan-Bridge-01/POWER:.* POWER
room Funk2MQTT
stateFormat IPAddress
OK, das war also eine ziemlich alte Version von dem tasmota_rf attrTemplate.
Nach etwas nachdenken finde ich nach wie vor das "event-on..." eigentlich für die generelle Anwendung so passend gesetzt ist - das ganze ist aber halt eigentlich eine Art "IO"-Device und von daher sollte/könnte man auch für jedes "richtige Device" eine eigene MQTT2_DEVICE-Instanz anlegen. Für jeden der Bewegungsmelder macht das z.B. Sinn. Aber dann müßte man jeweils den zugehörigen DATA-Teil separat abgreifen und könnte dann "klassische" Events wie "motion" (und "nomotion", hier vermutlich dann über ein temporäres at, definiert in userReadings) in "state" schreiben.
Falls Interesse besteht: Es müßte eigentlich bereits einen Thread dazu geben; wenn der nichts hergibt, bitte hier nochmal durchklingeln... tasmota-rf ist halt schon etwas "nieschig" und speziell...