[gelöst] Wieder mal: Watchdog triggert nur 1 mal

Begonnen von isy, 18 November 2020, 18:53:58

Vorheriges Thema - Nächstes Thema

isy

Moin zusammen,

Der Watchdog soll jede Minute (1 Minute hier beim Testen) auslösen und eine Mail senden.

Definition:
HM_6674CF_Btn_01:closed 00:01 SAME {DebianMail} ; ; trigger HM_6674CF_Btn_01_watchdog_1 .
Der WD löst aus "triggered", sendet die Mail und geht wieder auf "defined". Das war's.
Er wurde angelegt aus dem "Event Monitor".

Der Status kommt vom HM-MOD-EM-8, hier der Sensorkanal 1.
Der HM-MOD-EM-8 setzt keine Status-Updates alle 3 Minuten oder so. Es gibt also keinen weiteren Trigger, der Status bleibt "closed", bis der Sensorkanal wieder auf "open" geht.
Das gesetzte Attribut event-min-intervall auf .*:60 zeigt keine Änderung am Verhalten (wieder gelöscht).

Was kann das sein?

Gruß Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Otto123

Hallo Helmut,

was erwartest Du denn für ein Verhalten?
Wenn der Kontakt das erste mal schließt wird der Hund scharf.
Wenn er dann unter einer Minute einmal open/closed macht, wird der Timer neu gesetzt und der Hund bliebt ruhig.
Wenn die Zeit verstreicht und es macht nicht nochmal closed, bellt er einmal und wartet wieder scharf gemacht zu werden.

Gruß Otto
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

isy

Hallo Otto,
dank für deine Antwort!

Ich hatte das so verstanden, dass mit "SAME" geprüft wird, ob nach Ablauf der gesetzten Zeit der Status unverändert ist und der WD somit erneut auslöst.
Zitat: Wenn <regexp2> SAME ist , dann ist es das gleiche wie das erste regexp, und wird reaktiviert wenn es empfangen wird.
Ich brauche eine Mail jede Minute (später dann 30 Minuten...logisch).
Das ist für die Überwachung der Frischwasser-Einspeisung der Regenwasser-Zisterne. Die hatte schon mal gehangen und 6000 Liter Frischwasser sind über den Überlauf ab ins Regenwasser geflossen.

Problem ist halt, dass der EM-8 kein weiteres Event auslöst.
Ich denke, ich baue die Überwachung auf DOIF um.

Viele Grüße,
Helmut
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Otto123

Ich hab's noch nicht verstanden: Was macht der EM-8 oder was macht er nicht? Was passiert im Normfall und was im Gefahrenfall?

Du willst jede Minute ein Email solange der Schalter closed ist? Oder nach einer Minute wenn der Schalter nach einer Minute nicht wieder open geht?
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

betateilchen

Vermutlich wurde noch nicht richtig verstanden, wie so ein watchdog eigentlich funktioniert.

Beschreibe doch bitte mal den zeitlichen Ablauf, den Du überwachen möchtest.

Zeitpunkt 0: Die Frischwasserzufuhr ist geschlossen.
Zeitpunkt 1: (welcher Event löst das Öffnen der Frischwasserzufuhr aus? Was soll nun passieren?)
Zeitpunkt 2 (=Zeitpunkt 1 +1 Minute): Was soll nun passieren?
Zeitpunkt 3 (=Zeitpunkt 2 +1 Minute): Was soll nun passieren?
...
Zeitpunkt x: (welcher Event löst das Schließen der Frischwasserzufuhr aus?)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

isy

Moin auch betateilchen.

Also das Magentventil hat mal länger als erwartet Spannung gehabt.
Mit 12 V geht das Ventil auf, Wasser fließt. Ich möchte die Steuerung des Magnetventils überwachen.
Problem mit meinem WD: Die 1. Mail kommt, dann aber keine mehr. Es soll jede Minute eine Mail kommen, solange, bis die Steuerung auf 0 V schaltet.

Diese 12V aus der Steuerung werden mit dem EM-8 Sensoreingang überwacht.
Bei 12V geht der EM-8 in den  Status "closed", ohne Spannung auf "open".

Wenn der EM-8 also länger als 1 Minute auf "closed" steht, soll die Mail gesendet werden und zwar jede Minute erneut, solange, bis der EM-8 wieder auf "open" (=spannungslos) geht.

Ein Weg wird erst zu einem Weg, wenn man ihn geht

Damian

#6
Zitat von: dl4fbr am 18 November 2020, 20:29:02
Wenn der EM-8 also länger als 1 Minute auf "closed" steht, soll die Mail gesendet werden und zwar jede Minute erneut, solange, bis der EM-8 wieder auf "open" (=spannungslos) geht.

hier eine von vielen Alternativen, falls du mit Watchdog nicht weiterkommst:

defmod di_alarm DOIF {["HM_6674CF_Btn_01:closed"];set_Exec("timer",60,'fhem("send myphone alarm!")','ReadingsVal("HM_6674CF_Btn_01","state","") eq "closed"')}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Sowas würde ich auch nicht mit einem watchdog lösen.


  • ein at anlegen, das alle 30 Minuten eine Mail verschickt
  • ein notify anlegen, das auf den EM8 (open|closed) triggert. Dieses notify schaltet das at active oder inactive


defmod test_at at +*00:00:10 {Debug "test"}
setstate test_at inactive



defmod test_notify notify test_dummy:(closed|open) {$EVENT eq 'closed' ? CommandSet(undef,'test_at active') : CommandSet(undef,'test_at inactive')}


test_dummy musst Du natürlich durch Deinen EM-8 ersetzen, mit dem dummy hatte ich nur getestet, ob mein Plan so funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

isy

Ich danke euch allen für den Support.
Morgen werden ich beide Vorschläge mal testen und hier das Ergebnis posten.

Für heute erst mal gute Nach!
Ein Weg wird erst zu einem Weg, wenn man ihn geht

isy

#9
Moin zusammen,
ich habe die Aufgabe jetzt so gelöst, wie ich mich mit den FHEM Funktionen / Befehlen auskenne, damit das erst mal funktioniert und ich Zeit habe, mich weiter in eure Vorschläge einzuarbeiten. :)

- Die Idee mit der Aktivierung und Deaktivierung der Alarm-Mail habe ich übernommen
- Notify habe ich mit DOIF ersetzt (@betateilchen: ich muss mich weiter in die Struktur im Bereich " ? CommandSet(undef,'test_at active') : CommandSet(undef,'test_at inactive')}" einarbeiten.
- DOIF @damian: Ich habe es nicht hinbekommen, mein {DebianMail(....)} einzubauen. Auch hier fehlen mit Kenntnisse, in die ich mich einarbeiten muss.

define Alarm_Zisterne at +*00:07:00 {DebianMail(.............)}
define Alarm_Zisterne_DOIF DOIF ([HM_6674CF_Btn_01] eq "closed") (set Alarm_Zisterne active) DOELSE  (set Alarm_Zisterne inactive)

So läuft der private "WD" super.

Vielen Dank für eure Anregungen.
Ein Weg wird erst zu einem Weg, wenn man ihn geht

Damian

#10
Zitat von: dl4fbr am 19 November 2020, 10:35:04

- DOIF @damian: Ich habe es nicht hinbekommen, mein {DebianMail(....)} einzubauen. Auch hier fehlen mit Kenntnisse, in die ich mich einarbeiten muss.

define Alarm_Zisterne at +*00:07:00 {DebianMail(.............)}
define Alarm_Zisterne_DOIF DOIF ([HM_6674CF_Btn_01] eq "closed") (set Alarm_Zisterne active) DOELSE  (set Alarm_Zisterne inactive)

DebianMail ist vermutlich im main-Package, deswegen musst du es mit Doppelpunkt angeben, da DOIF gekapselt im eigenen Package arbeitet:

defmod di_alarm DOIF {["HM_6674CF_Btn_01:closed"];set_Exec("timer",60,'::DebianMail(.............)','ReadingsVal("HM_6674CF_Btn_01","state","") eq "closed"')}

Wenn du dich mit DOIF im FHEM-Modus auskennst, dann dürfte diese Lösung für dich ebenfalls leicht verständlich sein:

define Alarm_Zisterne_DOIF DOIF ([HM_6674CF_Btn_01] eq "closed") {DebianMail(.............)}
attr wait 60
attr repeatcmd 420

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

betateilchen

Zitat von: dl4fbr am 19 November 2020, 10:35:04
ich muss mich weiter in die Struktur im Bereich " ? CommandSet(undef,'test_at active') : CommandSet(undef,'test_at inactive')}" einarbeiten.

Die korrekte (vollständige) Struktur ist:


$EVENT eq 'closed' ? CommandSet(undef,'test_at active') : CommandSet(undef,'test_at inactive')


und man könnte das auch so schreiben:


if( $EVENT eq 'closed') {
   CommandSet(undef,'test_at active');
} else {
   CommandSet(undef,'test_at inactive');
}


Das ? ersetzt sozusagen das "if" (es stellt die Frage: ist $EVENT closed?)
Der Doppelpunkt ersetzt die Unterscheidung "else"

Dann könnte man noch das CommandSet() ersetzen durch


if( $EVENT eq 'closed') {
   fhem('set test_at active');
} else {
   fhem('set test_at inactive');
}


Damit sollte klar werden, worum es da geht. Das ist alles purer perl Code.

Für einen Einzeiler ist die von mir verwendete Variante mit ?: einfach kürzer und weniger zu tippen :)

73, DG1UDO
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: dl4fbr am 19 November 2020, 10:35:04
define Alarm_Zisterne_DOIF DOIF ([HM_6674CF_Btn_01] eq "closed") (set Alarm_Zisterne active) DOELSE  (set Alarm_Zisterne inactive)

Du hast in dem Fall aber ein Problem im DOELSE, wenn der Button einen anderen event erzeugt als "closed" oder "open".
Denn dann wird Alarm_Zisterne auf inaktiv gesetzt und der Mailversand beendet.

Und Homematic devices/channels erzeugen jede Menge andere events...  8)

Deshalb hatte ich in meinem vorgeschlagenen notify die beiden zulässigen Zustände open und closed explizit in der regex vorgegeben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

ZitatDeshalb hatte ich in meinem vorgeschlagenen notify die beiden zulässigen Zustände open und closed explizit in der regex vorgegeben.
Vielleicht wird das hier zu philosophisch - aber ich habe da in letzter Zeit etwas über den Mechanismus wie Rudi den Trigger im notify optimiert erfahren und mal was dazu gefragt
Danach wäre die etwas mehr ausformulierte Schreibweise
test_dummy:closed|test_dummy:open
performanter im System als der Vorschlag von Dir:
test_dummy:(closed|open)
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

betateilchen

#14
Zitat von: Otto123 am 19 November 2020, 13:43:09
Danach wäre die etwas mehr ausformulierte Schreibweise
...
performanter im System als der Vorschlag von Dir:

Hast Du mal in den code von 91_notify.pm geschaut, bevor Du solche Aussagen triffst?
Deine Frage in dem zitierten Thread ging um NOTIFYDEV, soweit so gut.


Variante 1
defmod n_test notify (t_1:open|t_1:closed) {}
ergibt:

Internals:
   .COMMAND   {}
   DEF        (t_1:open|t_1:closed) {}
   FUUID      5fb66ecb-f33f-22e2-bf46-009284ddcf140df4
   NAME       n_test
   NR         24
   NTFY_ORDER 50-n_test
   REGEXP     (t_1:open|t_1:closed)
   STATE      active
   TYPE       notify
   .attraggr:
   .attrminint:
   READINGS:
     2020-11-19 14:12:29   state           active
Attributes:



Variante 2
defmod n_test notify t_1:(open|closed) {}
ergibt:

Internals:
   .COMMAND   {}
   DEF        t_1:(open|closed) {}
   FUUID      5fb66ecb-f33f-22e2-bf46-009284ddcf140df4
   NAME       n_test
   NR         24
   NTFY_ORDER 50-n_test
   REGEXP     t_1:(open|closed)
   STATE      active
   TYPE       notify
   .attraggr:
   .attrminint:
   READINGS:
     2020-11-19 14:16:48   state           active
Attributes:



Variante 3
defmod n_test notify t_1:open|t_1:closed {}
ergibt:

Internals:
   .COMMAND   {}
   DEF        t_1:open|t_1:closed {}
   FUUID      5fb66ecb-f33f-22e2-bf46-009284ddcf140df4
   NAME       n_test
   NR         24
   NTFY_ORDER 50-n_test
   REGEXP     t_1:open|t_1:closed
   STATE      active
   TYPE       notify
   .attraggr:
   .attrminint:
   READINGS:
     2020-11-19 14:19:21   state           active
Attributes:




In keinem der Fälle wird überhaupt ein NOTIFYDEV angelegt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!