Hauptmenü

Watchdog

Begonnen von heramol, 28 Juli 2025, 18:48:40

Vorheriges Thema - Nächstes Thema

heramol

Hallo,

vielleicht hat jemand von Euch auch schon vor so einem Problem gestanden und kann mir hier einen passenden Wink geben.
Problem ist folgendes:
Ich habe 3 verschiedene Situationen, die ich mehr oder weniger interpretieren muss. Ich habe eine Pumpe, die läuft ein paar Sekunden und geht wieder aus, sie kann aber auch 30Min. lang laufen, wenn der Rasen bewässert werden soll. Jetzt kann es aber auch sein, dass die Pumpe länger läuft, als die 2 genannten Laufzeiten. Also länger als 30Min. Durch diesen Mischmasch mit den "Spikes" der kürzeren Laufzeit, so scheint es, interpretiert der Watchdog die Situation iwie falsch und ich erhalte eine "falsche" Meldung. Wie auch immer möchte ich lediglich eine Meldung erhalten, wenn die Pumpe tatsächlich mind. 25 Min am Stück eingeschaltet ist.

Strom.Brunnen.State:on 00:25:00 Strom.Brunnen.State:off {fhem ("set RaspberryBot message \xxxxxxx Die Brunnenpumpe läuft seit 25 Min. ");;}
Gearbeitet wird mit einem passenden Dummy und einem Notify. Bei der Waschmaschine u. Geschirrspüler funktionierte diese "Überwachung", aber wenn kurzgetaktet wird, scheiden sich die Geister.

Danke im Voraus
VG Tom

Nobbynews

Strom.Brunnen.StateIst das das "passende" Dummydevice?
Dann sieht die Definition des watchdog eigentlich Ok aus.
Wie sieht denn das notify aus?

Die Pumpe unserer Waschmaschine überwache ich mit einem Shelly, der dauerhaft eingeschaltet ist. Die Pumpe wird über einen Schwimmerschalter gesteuert.
Über ein userReading wird die Leistungsaufnahme ausgewertet und ein reading Anzeige entsprechend gesetzt.
atrr <device> userReadings Anzeige { if(ReadingsNum($name,"power",0) > 5)
 {if (ReadingsVal($name,"Anzeige","off") eq "off") {"on"} else {} }
 else
 {if (ReadingsVal($name,"Anzeige","off") eq "on") {"off"} else {} }

Der watchdog ist so definiert:
defmod wPumpe watchdog Shelly11:Anzeige:.on 00:03:00 Shelly11:Anzeige:.off {\
fhem ("set mySignal send \@TabletNorbert \@HandyNorbert Die Pumpe läuft seit 3 Minuten ohne Pause!!");;\
}

heramol

Danke erst mal vorab.

Zitat von: Nobbynews am 28 Juli 2025, 19:20:53Strom.Brunnen.StateIst das das "passende" Dummydevice?
exact

ZitatDann sieht die Definition des watchdog eigentlich Ok aus.
Wie sieht denn das notify aus?

Die Pumpe unserer Waschmaschine überwache ich mit einem Shelly, der dauerhaft eingeschaltet ist. Die Pumpe wird über einen Schwimmerschalter gesteuert.
Über ein userReading wird die Leistungsaufnahme ausgewertet und ein reading Anzeige entsprechend gesetzt.
atrr <device> userReadings Anzeige { if(ReadingsNum($name,"power",0) > 5)
 {if (ReadingsVal($name,"Anzeige","off") eq "off") {"on"} else {} }
 else
 {if (ReadingsVal($name,"Anzeige","off") eq "on") {"off"} else {} }

Der watchdog ist so definiert:
defmod wPumpe watchdog Shelly11:Anzeige:.on 00:03:00 Shelly11:Anzeige:.off {\
fhem ("set mySignal send \@TabletNorbert \@HandyNorbert Die Pumpe läuft seit 3 Minuten ohne Pause!!");;\
}

Mein notify:
FBDECT_fb1_5C_49_79_F1_60_F4:power:.* {
  if (ReadingsNum("FBDECT_fb1_5C_49_79_F1_60_F4", "power", 0) > 200 && Value("Strom.Brunnen.State") eq "off") {
    fhem("set Strom.Brunnen.State on");
    fhem("setstate BrunnenAutoStandby defined");
  }
  if (ReadingsNum("FBDECT_fb1_5C_49_79_F1_60_F4", "power", 0) < 10 && Value("Strom.Brunnen.State") eq "on") {
    fhem("set Strom.Brunnen.State off");
  }
}

Im Prinzip funktioniert diese Sache ja, nur kann iwie der watchdog die "Spikes" nicht von dem eindeutigen "Rechteck" unterscheiden. Oder ich muß hier irgendwie den "off"-State schneller auslösen lassen, damit der watchdog-Zähler wieder von vorne beginnt. Da stehe ich aber irgendwie auf dem Schlauch.

Nobbynews

#3
Ich kenne die Leistungskurve der Pumpe nicht, würde aber ggf. als Wert für das Einschalten einen kleineren Wert nehmen.
Und dann würde ich
Value("Strom.Brunnen.State") eq "off")umändern in
ReadingsVal("Strom.Brunnen.State","state","off") eq "off"Siehe hier:
https://forum.fhem.de/index.php?topic=135465.0
bzw.
https://forum.fhem.de/index.php?topic=138497.0
Und aus der cref:
ZitatValue(<devicename>)
liefert das Internal STATE zurück. Achtung: STATE wird in erster Linie für die Anzeige verwendet, und kann vom Benutzer mit dem stateFormat Attribut geändert werden. Für Berechnungen sollte man stattdessen ReadingsVal(<devicename>, 'state', '') verwenden (s.u.).

Edit:
Es handelt sich ja um eine via DECT angesprochene Steckdose.
Wie schnell bzw. wie oft wird der Leistungswert der Steckdose über die Fritte bzw, DECT an FHEM geschickt?

fz55

Hallo,

ich bin nicht der Experte für Watchdog, aber mir ist aufgefallen, dass du im Notify das Dummydevice erst auf on setzt und hinterher den Watchdog aktivierst. Drehe doch diese beiden Aktionen herum oder besser definiere den Watchdog mit dem Attribut autoRestart 1, dann ist 'setstate BrunnenAutoStandby defined' nicht nötig.

Grüße
fz55

Nobbynews

#5
Wenn mit
setstate BrunnenAutoStandby definedwirklich das Watchdog-device aktiviert werden sollte, dann kann es nie funktioniert haben. Der Trigger zum Starten des watchdog wäre dann erst beim nächsten Einschalten gekommen.
Eine Nachricht hätte es dann also nur einmalig bei zwei aufeinander folgenden Betriebszyklen > 25 Minuten gegeben.

Lt. Cref wird damit aber nix gestartet.
Zitatsetstate <devspec> <value>

Der Befehl setzt den STATE Eintrag des Gerätes direkt, ohne Ereignisse zu generieren oder ein Signal an das Gerät zu senden. Dieser Eintrag ist maßgebend für die Status-Anzeige in diversen Frontends. Dieser Befehl wird auch im statefile benutzt.

Was also bitte schön steckt hinter
ZitatBrunnenAutoStandby
?

und dazu dann bitte noch ein list von watchdog und den anderen beteiligten devices.

fz55

#6
In der CommandRef zu Watchdog steht
Zitattrigger <watchdogname> . will activate the trigger if its state is defined, and set it into state defined if its state is active (Next:...) or triggered. You always have to reactivate the watchdog with this command once it has triggered (unless you restart fhem)
, was im Grunde dem 'setstate BrunnenAutoStandby defined' entspricht.

Zitat von: Nobbynews am 30 Juli 2025, 02:35:03Eine Nachricht hätte es dann also nur einmalig bei zwei aufeinander folgenden Betriebszyklen > 25 Minuten gegeben.
Das ist nicht ganz richtig. Es langen zwei Betriebszyklen aus, wobei die Länge des ersten unerheblich ist.

Nobbynews

Zitat von: fz55 am 30 Juli 2025, 18:25:37, was im Grunde dem 'setstate BrunnenAutoStandby defined' entspricht.
Mit dem kleinen aber feinen Unterschied, das setstate das Internal STATE setzt und nicht das reading state.
Zumindest, wenn in der cref die Unterscheidung in Groß- und Kleinbuchstaben korrekt umgesetzt wurde.

Zitat von: fz55 am 30 Juli 2025, 18:25:37Das ist nicht ganz richtig. Es langen zwei Betriebszyklen aus, wobei die Länge des ersten unerheblich ist.
Stimmt.

Otto123

Zitat von: Nobbynews am 30 Juli 2025, 18:37:44Mit dem kleinen aber feinen Unterschied, das setstate das Internal STATE setzt und nicht das reading state.
in dem Fall richtig, setstate kann jedes Reading setzen - aber - es erzeugt in keinem Fall einen Event. trigger erzeugt einen Event so als ob er vom spezifizierten Device kommen würde

@fz55 der Eventmonitor hilft hier auch fürs Verständnis :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

fz55

Ich verstehe die Diskussion hier nicht.

Ich habe nie behauptet, dass ein Event erzeugt wird oder ich eines erzeugen will. Mit 'setstate BrunnenAutoStandby defined' wird der Status des Watchdogs BrunnenAutoStandby vom bisherigen Status (triggered oder Next:...) auf defined gesetzt und somit die Überwachung auf regexp1 (Strom.Brunnen.State:on) aktiviert. Da Strom.Brunnen.State aber im Statement davor auf on gesetzt wurde, reagiert der Watchdog erst beim nächsten Auftreten des Events.

Anscheinend hat der Threadersteller das Problem gelöst, da er sich nicht mehr äußert.


Otto123

Zitat von: fz55 am 30 Juli 2025, 20:25:30Mit 'setstate BrunnenAutoStandby defined' wird der Status des Watchdogs BrunnenAutoStandby vom bisherigen Status (triggered oder Next:...) auf defined gesetzt und somit die Überwachung auf regexp1 (Strom.Brunnen.State:on) aktiviert.
Ich hätte fast gewettet, dass es nicht so ist. Aber Du hast Recht  :) watchdog wertet einfach den STATE aus und braucht für die Aktivierung keinen Event.
Allerdings ist die Aktivierung mit setstate mMn so nicht dokumentiert und ich würde es nicht empfehlen.
Ein Kollege hat mal gesagt: Es besteht kein Rechtsanspruch auf die Beibehaltung von Fehlern... ;)
Ich sage damit nicht, dass es ein Fehler ist, aber es kann immer sein, dass bei Weiterentwicklung ein nicht dokumentiertes Verhalten geändert wird. ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Nobbynews

Zitat von: Otto123 am 30 Juli 2025, 21:05:58Ich hätte fast gewettet, dass es nicht so ist. Aber Du hast Recht  :) watchdog wertet einfach den STATE aus und braucht für die Aktivierung keinen Event.
Habe ich gerade auch erstaunt feststellen müssen.

fz55

Schön, dass das geklärt ist :).

Zitat von: Otto123 am 30 Juli 2025, 21:05:58Allerdings ist die Aktivierung mit setstate mMn so nicht dokumentiert und ich würde es nicht empfehlen.
Es ist nicht mein Code und ich habe die Verwendung von autoRestart 1 empfohlen.