Hi,
ich habe ein Problem mit dem Watchdog Device:
Ich möchte gerne fehlende Messages per Meldung an Telegram schicken.
Das funktioniert leider nur einmal. Ich habe den Watchdog so verstanden dass wenn
über ein Zeitintervall kein Event gekommen ist dann schlägt der Watchdog zu und via Trigger oder AutoRestart wird
der Watchdog wieder scharf geschaltet. Das passiert bei mir nicht der Watdchdog zeigt beim Restart nicht die Zeit an sondern immer Defined.
Ich habe mit SAME und sowohl Trigger als auch AutoRestart alles versucht. Es klappt nur einmal.
Meine Implementierung;
define WDG_UG_HK_C02_Rauchmelder watchdog UG_HK_C02_Rauchmelder:battery:.* 00:05:00 UG_HK_C02_Rauchmelder:battery:.* set teleBotAK msg @Andreas_Krause ACHTUNG: UG_HK_C0_RauchmelderWDG liefert keine Daten mehr
setuuid WDG_UG_HK_C02_Rauchmelder 62ae221e-f33f-4db7-f0c6-be249a16ac30780d
attr WDG_UG_HK_C02_Rauchmelder DbLogExclude .*
attr WDG_UG_HK_C02_Rauchmelder activateOnStart 1
attr WDG_UG_HK_C02_Rauchmelder autoRestart 1
attr WDG_UG_HK_C02_Rauchmelder group Grp-System-WDG
attr WDG_UG_HK_C02_Rauchmelder icon dog_silhouette
attr WDG_UG_HK_C02_Rauchmelder room 9.6_System
attr WDG_UG_HK_C02_Rauchmelder verbose 0
oder aber auch:
define WDG_UG_HK_C02_Rauchmelder watchdog UG_HK_C02_Rauchmelder:battery:.* 00:05:00 SAME set teleBotAK msg @Andreas_Krause ACHTUNG: UG_HK_C0_RauchmelderWDG liefert keine Daten mehr;;trigger WDG_UG_HK_C02_Rauchmelder .
setuuid WDG_UG_HK_C02_Rauchmelder 62ae221e-f33f-4db7-f0c6-be249a16ac30780d
attr WDG_UG_HK_C02_Rauchmelder DbLogExclude .*
attr WDG_UG_HK_C02_Rauchmelder activateOnStart 1
attr WDG_UG_HK_C02_Rauchmelder group Grp-System-WDG
attr WDG_UG_HK_C02_Rauchmelder icon dog_silhouette
attr WDG_UG_HK_C02_Rauchmelder room 9.6_System
attr WDG_UG_HK_C02_Rauchmelder verbose 0
list ist:
Internals:
CMD set teleBotAK msg @Andreas_Krause ACHTUNG: UG_HK_C0_RauchmelderWDG liefert keine Daten mehr
DEF UG_HK_C02_Rauchmelder:battery:.* 00:05:00 UG_HK_C02_Rauchmelder:battery:.* set teleBotAK msg @Andreas_Krause ACHTUNG: UG_HK_C0_RauchmelderWDG liefert keine Daten mehr
FUUID 62ae221e-f33f-4db7-f0c6-be249a16ac30780d
NAME WDG_UG_HK_C02_Rauchmelder
NOTIFYDEV WDG_UG_HK_C02_Rauchmelder,UG_HK_C02_Rauchmelder
NR 2991
NTFY_ORDER 50-WDG_UG_HK_C02_Rauchmelder
RE1 UG_HK_C02_Rauchmelder:battery:.*
RE2 UG_HK_C02_Rauchmelder:battery:.*
STATE defined
TO 300
TYPE watchdog
READINGS:
2022-06-18 22:57:25 Activated activated
2022-06-18 23:02:25 Reset reset
2022-06-18 23:02:25 Triggered triggered
2022-06-18 22:57:25 triggeredByDev WDG_UG_HK_C02_Rauchmelder
2022-06-18 22:57:25 triggeredByEvent .
Attributes:
DbLogExclude .*
activateOnStart 1
autoRestart 1
group Grp-System-WDG
icon dog_silhouette
room 9.6_System
verbose 0
Danke für Eure Hilfe
Gruss Andreas
Hallo Andreas,
der Watchdog zeigt solange "defined" an, bis der erste Event aufgetreten ist. D.h. wenn der Rauchmelder ausgefallen ist, dann kommt erst dann die nächste Meldung wenn er mindestens einmal "battery" gesendet hat.
Gruß Detlef
PS: Für gleiche Trigger gibt es "SAME"define WDG_UG_HK_C02_Rauchmelder watchdog UG_HK_C02_Rauchmelder:battery:.* 00:05:00 SAME
Ah danke das erklärt das Verhalten.
Kann man denn den Watchdog so programmieren dass er von selbst wieder startet und bei Ablauf wieder meinen Output erzeugt.
Ich hatte in der Commandref gelesen dass es mit dem . Operator funktionieren müsste,.
Hier wurde auch neu gestartet aber mein Befehl nicht mehr ausgeführt.
Danke Andreas
Das mit dem Punkt habe ich noch nicht ausprobiert.
Für regelmäßige Überprüfungen benutze ich einen Timer.
Als Beispiel:
defmod at_jedestunde at +*01:00:00 {\
WriteStatefile();;\
watch_em();;\
return undef;;\
}
attr at_jedestunde alignTime 15:15
und watch_em steht in 99_myUtils.
sub watch_em(){
foreach my $em(devspec2array("TYPE=MQTT_DEVICE:FILTER=NAME=mqtt_d_dhaem.*")) {
if (ReadingsAge($em,"relay0",3678)>3600){
my $msg="Seit längerem keine Meldungen von $em";
send_telegram($msg);
}
}
}
Hallo,
danke für Eure Antworten aber so ganz gefielen mir die Lösungen nicht.
Somit habe ich noch etwas weiter herumgedoktert und folgend Lösung gefunden:
Die u.g. Implementierung startet den Watchdog immer wieder sofern irgend ein Event im System empfangen wurde.
Sollte innerhalb des Status und einer Zeitdauer von 1h keine Message vom ESP32 Device empfange werden so wird eine Message ausgegeben oder
eine Reovery gestartet.
define WDG_ESP32_CAM_IoT_KG_VK_Gas watchdog .* 01:00:00 ESP32_CAM_IoT_KG_VK_Gas.* {sendMsg("TELEGRAM","Andreas","ACHTUNG: ESP32_CAM_IoT_KG_VK_Gas liefert keine Daten mehr");;}
attr WDG_ESP32_CAM_IoT_KG_VK_Gas activateOnStart 1
attr WDG_ESP32_CAM_IoT_KG_VK_Gas autoRestart 1
attr WDG_ESP32_CAM_IoT_KG_VK_Gas group Grp-System-WDG
attr WDG_ESP32_CAM_IoT_KG_VK_Gas icon dog_silhouette
attr WDG_ESP32_CAM_IoT_KG_VK_Gas regexp1WontReactivate 1
attr WDG_ESP32_CAM_IoT_KG_VK_Gas room System
watchdog .*
Das geht natürlich immer. ;D
Völlig absurd.