[gelöst]Watchdog: <timespec> setzt sich bei jedem Event zurück

Begonnen von frober, 24 November 2022, 18:55:28

Vorheriges Thema - Nächstes Thema

frober

Hallo zusammen,

ich verzweifle an meinem Watchdog.
Den "Gleichen" (w_Teichtemp2) habe ich fürs Frühjahr, bzw. die Funktion ist umgekehrt und der hatte funktioniert.
Bevor die Frage kommt, wenn w_Teichtemp auslöst wird w_Teichtemp2 aktiviert und umgekehrt.

Nun habe ich zufällig festgestellt, dass, wenn ich ihn manuell triggere, der timespec jedes Mal zurückgesetzt wird.
Wenn ich die Zeit abwarte funktioniert er.

defmod w_Teichtemp watchdog MYSENSOR_3:temperature1:[\s][0-6][\.][0-9] 02:00 MYSENSOR_3:temperature1:[\s][7-9][\.][0-9] {\
if($month >=10 && $month <=12) \
{\
if($EVTPART1 < 7) \
{\
  sendMail('xxx@xxx.de', 'FHEM-Meldung:Teich Alarm', "Teichtemp. $EVTPART1 °C, Füttern einstellen und Pumpe abschalten!!!");;\
  return fhem('trigger w_Teichtemp2 .');;\
}\
else \
{\
  return fhem('trigger w_Teichtemp .');;\
}\
}\
else \
{\
return fhem('trigger w_Teichtemp .');;\
}\
return;;\
}


bei jedem trigger MYSENSOR_3 temperature1: 6.4
aktualisiert sich
setstate w_Teichtemp 2022-11-24 18:35:50 Activated activated
setstate w_Teichtemp 2022-11-24 18:35:50 triggeredByDev MYSENSOR_3
setstate w_Teichtemp 2022-11-24 18:35:50 triggeredByEvent temperature1: 6.4


Edit: Die Temperatur wird alle 60Min gesendet, wegen der langsamen Temperatoränderung möchte ich jedoch 2Std warten, bis ausgelöst wird.

Edit2: Je mehr ich darüber nachdenke, ist der watchdog für meine Erwartung gar nicht vorgesehen. D.h. solange ein "Gerät" funktioniert, sollte die Zeit zurückgesetzt werden.
Welche Alternative gibt es für meine Überwachung?

Danke und Grüße
Bernd
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

Zitat von: frober am 24 November 2022, 18:55:28
Welche Alternative gibt es für meine Überwachung?

Ok, ein notify und die Abfrage in myUtils sollte die Lösung sein.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

ZitatWelche Alternative gibt es für meine Überwachung?
Fuer sinnvolle Vorschlaege muesste man verstehen, was die Aufgabe ist :)

frober

Zitat von: rudolfkoenig am 24 November 2022, 19:44:01
Fuer sinnvolle Vorschlaege muesste man verstehen, was die Aufgabe ist :)

Die Aufgabe ist einfach, im Spätjahr eine Nachricht versenden, wenn die Temperatur im Teich "länger" unter 7°C fällt und im Frühjahr, wenn sie wieder "länger" über 7°C steigt.

Der Zweck dabei ist, die Teichpumpe rechtzeitig abzuschalten, damit der Teich nicht "auskühlt" und das Füttern der Fische einzustellen, bzw. im Frühjahr wieder zeitig damit zu beginnen.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

#4
So, ich denke, dass ich es so sinnvoll gelöst habe.  ;)

Edit: es fehlt noch die Zeitabfrage, das hole ich noch nach...

defmod n_TeichTemp notify MYSENSOR_3:temperature1:.* {Teichtemp($EVTPART1, $month)}

myUtil
sub Teichtemp {
my $Temp = shift // return;
my $Month = shift // return;
my $jz = ReadingsVal('n_TeichTemp', 'Jahreszeit', '');

my $file = 'debug.log';
my $debug = 1;

debuglog("$Temp, $Month, $jz", $file) if $debug;

if($jz eq 'warm' && $Month >=10 && $Month <=12 && $Temp < 7)
{
    sendMail('xxx@xxx.de', 'FHEM-Meldung:Teich Alarm', "Teichtemp. $Temp °C, Füttern einstellen und Pumpe abschalten!!!");
debuglog('kalt', $file) if $debug;
    return fhem('setreading n_TeichTemp Jahreszeit kalt');
}

if($jz eq 'kalt' && $Month >=3 && $Month <= 5 && $Temp > 7)
{
  sendMail('xxx@xxx.de', 'FHEM-Meldung:Teich Alarm', "Teichtemp. $Temp °C, Fische wieder füttern und Pumpe einschalten!!!");
debuglog('warm', $file) if $debug;
  return fhem('setreading n_TeichTemp Jahreszeit warm');
}
debuglog('Mist', $file) if $debug;
return;
}


Nehme aber gerne Verbesserungsvorschläge an...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

#5
Zur Vollständigkeit, meine finale Lösung:

sub Teichtemp {
my $Temp = shift // return;
my $Month = shift // return;
my $jz = ReadingsVal('n_TeichTemp','Jahreszeit','');
my $starttime = ReadingsNum('n_TeichTemp','Startzeit','');
my $countdown = ReadingsNum('n_TeichTemp','Countdown', 0);
my $counttime = 7200;  # 120 Min

my $file = 'debug.log';
my $debug = 1;

my $hash = $defs{'n_TeichTemp'};


if($jz eq 'warm' && $Month >=10 && $Month <=12)
{
debuglog("Temp: $Temp, Monat: $Month, Jahreszeit: $jz", $file) if $debug;
if ($Temp < 7)
{
my $timenow = time_str2num(ReadingsTimestamp('MYSENSOR_3','temperature1',''));
debuglog("Temp: $Temp, Zeit: $timenow", $file) if $debug;
#fhem("setreading n_TeichTemp Countdown 1; setreading n_TeichTemp Startzeit $timenow") if !$countdown;
if ($countdown == 0)
{
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Countdown', 1);
readingsBulkUpdate($hash, 'Startzeit', $timenow);
readingsEndUpdate($hash, 0);
return;
}
my $t = $timenow - $starttime if $debug;
debuglog("abgelaufe Zeit: $t s", $file) if $debug;

if ($timenow - $starttime > $counttime)
{
    sendMail('xxx@xxx.de', 'FHEM-Meldung:Teich Alarm', "Teichtemp. $Temp °C, Füttern einstellen und Pumpe abschalten!!!");
debuglog('kalt', $file) if $debug;
    #return fhem('setreading n_TeichTemp Jahreszeit kalt; setreading n_TeichTemp Startzeit 0; setreading n_TeichTemp Countdown 0');
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Jahreszeit', 'kalt');
readingsBulkUpdate($hash, 'Startzeit', 0);
readingsBulkUpdate($hash, 'Countdown', 0);
readingsEndUpdate($hash, 0);
return;
}
}
else
{
if ($countdown != 0)
{
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Countdown', 0);
readingsBulkUpdate($hash, 'Startzeit', 0);
readingsEndUpdate($hash, 0);
return;
}
return;
}
return;
}

if($jz eq 'kalt' && $Month >=3 && $Month <= 5)
{
if ($Temp > 7)
{
my $timenow = time_str2num(ReadingsTimestamp('MYSENSOR_3','temperature1',''));
#fhem("setreading n_TeichTemp Countdown 1; setreading n_TeichTemp Startzeit $timenow") if !$countdown;
if ($countdown == 0)
{
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Countdown', 1);
readingsBulkUpdate($hash, 'Startzeit', $timenow);
readingsEndUpdate($hash, 0);
return;
}

if ($timenow - $starttime > $counttime)
{
  sendMail('xxx@xxx.de', 'FHEM-Meldung:Teich Alarm', "Teichtemp. $Temp °C, Fische wieder füttern und Pumpe einschalten!!!");
debuglog('warm', $file) if $debug;
  #return fhem('setreading n_TeichTemp Jahreszeit warm; setreading n_TeichTemp Startzeit 0; setreading n_TeichTemp Countdown 0');
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Jahreszeit', 'warm');
readingsBulkUpdate($hash, 'Startzeit', 0);
readingsBulkUpdate($hash, 'Countdown', 0);
readingsEndUpdate($hash, 0);
return;
}
}
else
{
if ($countdown != 0)
{
readingsBeginUpdate($hash);
readingsBulkUpdate($hash, 'Countdown', 0);
readingsBulkUpdate($hash, 'Startzeit', 0);
readingsEndUpdate($hash, 0);
return;
}
return;
}
return;
}
return;
}


Die Funktion debuglog() ist eine eigene Sub, die ich mir erstell habe.
Beschrieben ist das hier
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...