Hallo,
ich schalte OTA Updates über einen MQTT Wert frei. Die Sensoren (ESP8266) laufen dann in einer Schleife und verzichten auf den Deep-Sleep.
Nun vergesse ich gelegentlich OTA wieder abzuschalten, was sehr auf die Batterien geht.
ich wollte das nun mittels watchdog verbessern.
Doch der erstellt watchdog startet nicht.
defmod watchdogS3SetOTPState watchdog WeMos_S3.setOTAState:on 00:00:15 SAME set WeMos_S3 setOTAState off;; trigger watchdogS3SetOTPState .
setze ich als trigger einen . startet der watchdog sofort und schaltet mir das OTA update ordentlich ab:
defmod watchdogS3SetOTPState watchdog . 00:00:15 SAME set WeMos_S3 setOTAState off;; trigger watchdogS3SetOTPState .
kann mir jemand helfen das richtig zu konfigurieren? Was habe ich falsch gemacht?
Schwierig zu verstehen, was du willst.
Dein watchdog bedeutet im Moment:
"Wenn das Gerät WeMos_S3.setOTAState NICHT jede 15 Sekunden ein neues Event "on" generiert, schalte off."
Ist das was du willst?
Das hast du ganz richtig verstanden, nur die 15 Sekunden sind zum testen. realistisch sind 30 Minuten wenn es funktioniert.
Das Ziel:
Wenn das Event "WeMos_S3.setOTAState = on" erfolgt, soll es nach 30 Minuten genau diesen Wert wieder auf "off" setzen, außer wenn der Timer neu gestartet wird.
Nur der Start passiert nicht, der Timer (watchdog) läuft nicht los!
Setze ich als Startevent den ".", läuft der watchdog sofort nach dem Speichern los und schaltet nach zeit 15Sekunden den Wert auf "off"
Ich denke, daß an meiner Definition des Startevent etwas falsch ist...
WeMos_S3.setOTAState:on
WeMos_S3 ist das Device
setOTAState ein Attribut
on der Wert
hier mal noch die zugehörige Definition von WeMos_S3:
defmod WeMos_S3 MQTT_DEVICE
attr WeMos_S3 IODev mqtt
attr WeMos_S3 alias Sensor 3
attr WeMos_S3 publishSet_setOTAState fhem/sensors/3425514/setOTAState
attr WeMos_S3 stateFormat Temperatur °C, Luftfeuchtigkeit %, Batterie V. BatterieStatus
attr WeMos_S3 subscribeReading_Batterie fhem/sensors/3425514/batterie_voltage
attr WeMos_S3 subscribeReading_BatterieStatus fhem/sensors/3425514/batterie
attr WeMos_S3 subscribeReading_Luftfeuchtigkeit fhem/sensors/3425514/humidity
attr WeMos_S3 subscribeReading_OTA-IP fhem/sensors/3425514/OTA-IP
attr WeMos_S3 subscribeReading_OTAStatus fhem/sensors/3425514/OTAState
attr WeMos_S3 subscribeReading_Temperatur fhem/sensors/3425514/temp_c
In der Readingsgroup kann ich mittels "commads" manuell ein und aus-schalten:
attr rgOTAStatus commands { 'setOTAState.on' => 'set $DEVICE setOTAState off', 'setOTAState.off' => 'set $DEVICE setOTAState on' }
... und genau dafür möchte ich jetzt noch einen Timer der das Abschalten automatisiert.
Kenne MQTT weniger, aber kannst Du bitte ein "list WeMos_S3 " posten?
klar, kein Problem:
Internals:
CFGFN
IODev mqtt
NAME WeMos_S3
NR 161
STATE Temperatur °C, Luftfeuchtigkeit %, 3.02 V. OK
TYPE MQTT_DEVICE
qos 2
retain 1
READINGS:
2017-07-15 23:44:49 Batterie 3.02
2017-07-15 23:44:49 BatterieStatus OK
2017-07-15 23:44:48 OTA-IP 192.168.0.217
2017-07-15 23:44:49 OTAStatus off
2017-07-15 23:44:49 WLANRSSI -74
2017-07-15 18:22:29 setOTAState off
2017-07-15 23:44:49 transmission-state incoming publish received
message_ids:
publishSets:
setOTAState:
topic fhem/sensors/3425514/setOTAState
values:
sets:
setOTAState
subscribe:
fhem/sensors/3425514/
fhem/sensors/3425514/batterie_voltage
fhem/sensors/3425514/batterie
fhem/sensors/3425514/humidity
fhem/sensors/3425514/OTA-IP
fhem/sensors/3425514/OTAState
fhem/sensors/3425514/temp_c
fhem/sensors/3425514/WLANRSSI
subscribeExpr:
^fhem\/sensors\/3425514\/$
^fhem\/sensors\/3425514\/batterie_voltage$
^fhem\/sensors\/3425514\/batterie$
^fhem\/sensors\/3425514\/humidity$
^fhem\/sensors\/3425514\/OTA-IP$
^fhem\/sensors\/3425514\/OTAState$
^fhem\/sensors\/3425514\/temp_c$
^fhem\/sensors\/3425514\/WLANRSSI$
subscribeReadings:
fhem/sensors/3425514/OTA-IP OTA-IP
fhem/sensors/3425514/OTAState OTAStatus
fhem/sensors/3425514/WLANRSSI WLANRSSI
fhem/sensors/3425514/batterie BatterieStatus
fhem/sensors/3425514/batterie_voltage Batterie
fhem/sensors/3425514/humidity Luftfeuchtigkeit
fhem/sensors/3425514/temp_c Temperatur
Attributes:
IODev mqtt
alias Sensor 3
autoSubscribeReadings fhem/sensors/3425514/
publishSet_setOTAState fhem/sensors/3425514/setOTAState
qos exactly-once
retain 1
room Training
stateFormat Temperatur °C, Luftfeuchtigkeit %, Batterie V. BatterieStatus
subscribeReading_Batterie fhem/sensors/3425514/batterie_voltage
subscribeReading_BatterieStatus fhem/sensors/3425514/batterie
subscribeReading_Luftfeuchtigkeit fhem/sensors/3425514/humidity
subscribeReading_OTA-IP fhem/sensors/3425514/OTA-IP
subscribeReading_OTAStatus fhem/sensors/3425514/OTAState
subscribeReading_Temperatur fhem/sensors/3425514/temp_c
subscribeReading_WLANRSSI fhem/sensors/3425514/WLANRSSI
Solche Probleme sollte man immer zusammen mit den Events melden, selbst die Readings koennen (theoretisch) abweichen. Ich gehe davon aus, dass das Event nicht "setOTAState:on" sondern "setOTAState on" ist, das : gehoert normalerweise zwischen Geraetename und Event. Falls man unsicher ist, dann sollte man den Event monitor starten, und den watchdog mit "Create/Modify Device" anlegen. Damit wird wenigstens der erste Regexp richtig angelegt. Den zweiten Regexp muss man weiterhin aus dem gewuenschten Event selbst ableiten, aber auch diesen sollte man im Event monitor zunaechst sehen, um Ungenauigkeiten zu vermeiden.
DANKE, der Hinweis mit dem Evertmonitor und das Gerät von dort zu erstellen brachte die Lösung.
Auf diese Schreibweise bin ich bei allen Versuchen nicht gekommen.
defmod watchdogS3SetOTPState watchdog WeMos_S3:setOTAState:.on 00:00:15 SAME set WeMos_S3 setOTAState off;; trigger watchdogS3SetOTPState .