Autor Thema: [gelöst]Watchdog: <timespec> setzt sich bei jedem Event zurück  (Gelesen 343 mal)

Offline frober

  • Hero Member
  • *****
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
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.4aktualisiert 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
« Letzte Änderung: 24 November 2022, 20:11:54 von frober »
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline frober

  • Hero Member
  • *****
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:Watchdog: <timespec> setzt sich bei jedem Event zurück
« Antwort #1 am: 24 November 2022, 19:12:39 »
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, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 26037
Antw:Watchdog: <timespec> setzt sich bei jedem Event zurück
« Antwort #2 am: 24 November 2022, 19:44:01 »
Zitat
Welche Alternative gibt es für meine Überwachung?
Fuer sinnvolle Vorschlaege muesste man verstehen, was die Aufgabe ist :)

Offline frober

  • Hero Member
  • *****
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:Watchdog: <timespec> setzt sich bei jedem Event zurück
« Antwort #3 am: 24 November 2022, 19:55:28 »
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, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline frober

  • Hero Member
  • *****
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:Watchdog: <timespec> setzt sich bei jedem Event zurück
« Antwort #4 am: 24 November 2022, 20:11:06 »
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...
« Letzte Änderung: 24 November 2022, 20:34:04 von frober »
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

Offline frober

  • Hero Member
  • *****
  • Beiträge: 1223
  • Was man nicht kann, kann man lernen...
Antw:[gelöst]Watchdog: <timespec> setzt sich bei jedem Event zurück
« Antwort #5 am: 25 November 2022, 12:20:10 »
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
« Letzte Änderung: 25 November 2022, 12:23:20 von frober »
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, MySensors mit RS485(CAN-Receiver), etc.,
einiges umgesetzt, vieles in Planung :-)

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

 

decade-submarginal