Hallo.
ich habe folgendes kurioses Problem:
Ich erhalte während des Betriebs folgende Events:
2021-08-24 20:51:32.179 MQTT_DEVICE ESP32_CAM_IoT_KG_VK_Gas SENSOR: 5581534
2021-08-24 20:51:32.179 MQTT_DEVICE ESP32_CAM_IoT_KG_VK_Gas SENSOR_IDENTICAL_COUNT: 11
Wie Ihr seht kommen die Events nahezu gleichzeitig.
Der SENSOR triggert auch den notify (s.u.)
Der SENSOR_IDENTICAL_COUNT triggers aber nicht!!!!
Meine Notify´s sehen so aus:
define ESP32_CAM_IoT_KG_VK_Gas MQTT_DEVICE ESP32_CAM_IoT_GAS
setuuid ESP32_CAM_IoT_KG_VK_Gas 6123defd-f33f-7267-c832-30367468230f105b
attr ESP32_CAM_IoT_KG_VK_Gas IODev MosquittoServer
attr ESP32_CAM_IoT_KG_VK_Gas event-on-change-reading SENSOR_IDENTICAL_COUNT
attr ESP32_CAM_IoT_KG_VK_Gas event-on-update-reading SENSOR
attr ESP32_CAM_IoT_KG_VK_Gas room Keller,MQTT
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_CONNECTION tele/ESP32_CAM_IoT_GAS/connection
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_ERROR tele/ESP32_CAM_IoT_GAS/main/error
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_FREEMEM tele/ESP32_CAM_IoT_GAS/freeMem
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_JSON tele/ESP32_CAM_IoT_GAS/main/json
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_RATE tele/ESP32_CAM_IoT_GAS/main/rate
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_SENSOR tele/ESP32_CAM_IoT_GAS/main/value
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_TIMESTAMP tele/ESP32_CAM_IoT_GAS/main/timestamp
attr ESP32_CAM_IoT_KG_VK_Gas subscribeReading_UPTIME tele/ESP32_CAM_IoT_GAS/uptime
define ntfy_ESP32_CAM_GAS_SENSOR notify ESP32_CAM_IoT_KG_VK_Gas:SENSOR:.* { \
my $myOldReading = ReadingsNum("ESP32_CAM_IoT_KG_VK_Gas","prevSENSOR",1);; \
my $myActReading = ReadingsNum("ESP32_CAM_IoT_KG_VK_Gas","SENSOR",1) ;; \
fhem ("setreading ESP32_CAM_IoT_KG_VK_Gas prevSENSOR $myActReading");; \
if ( $myOldReading == $myActReading) \
{ \
my $count = ReadingsNum("ESP32_CAM_IoT_KG_VK_Gas","SENSOR_IDENTICAL_COUNT",0) + 1;; \
fhem ("setreading ESP32_CAM_IoT_KG_VK_Gas SENSOR_IDENTICAL_COUNT $count");; \
} \
else \
{ \
fhem ("setreading ESP32_CAM_IoT_KG_VK_Gas SENSOR_IDENTICAL_COUNT 0");; \
} \
}
define ntfy_ESP32_CAM_GAS notify ESP32_CAM_IoT_KG_VK_Gas:SENSOR_IDENTICAL_COUNT:.* {\
my $myTime = time();;\
my $gas=ReadingsNum("ESP32_CAM_IoT_KG_VK_Gas","SENSOR",0) * 100.0;;\
my $gasm3Count = AttrNum("GasVerb_GC","GasCubicPerCounts", 1.0);;\
my $gasCount = $gas * $gasm3Count;;\
my $cmd="/?E3=".$gasCount;;\
Log 1,"GAS m3 at $myTime with $gas m3, m3Count=$gasm3Count, gasCount=$gasCount, Instr=$cmd $EVTPART1";;\
if ($EVTPART1 == 10) \
{ \
do something
} \
}
attr ntfy_ESP32_CAM_GAS room System
Habt Ihr eine Idee?
Liegt das vielleicht an der Gleichzeitigkeit?
Danke Andreas
Hallo Andreas,
es gibt keine Gleichzeitigkeit bei FHEM. Ich würde diese Kombination hinterfragen:
attr ESP32_CAM_IoT_KG_VK_Gas event-on-change-reading SENSOR_IDENTICAL_COUNT
attr ESP32_CAM_IoT_KG_VK_Gas event-on-update-reading SENSOR
Woran machst Du das nicht triggern fest?
Gruß Otto
ich denke, dass es am setreading im notify liegt.
ein sicherheitsfeature zur verhinderung von dead loops.
ich glaube, dass ein vorangestelltes sleep cmd das "problem" beseitigt.
ok hab ich übersehen, dass das erste notify das zweite auslösen soll :(
https://fhem.de/commandref_DE.html#setreading