[gelöst]Watchdog: Auslösendes Device per Mail senden ($NAME, $EVENT)

Begonnen von frober, 12 Juni 2021, 13:37:43

Vorheriges Thema - Nächstes Thema

frober

Hallo zusammen,

ich habe folgenden Watchdog definiert:
defmod w_BeregnungAlarm watchdog MYSENSOR_(2|3):(status(1|2|3|4)|status).on 00:00:30 Sonoff_Brunnenpumpe:ENERGY_Power.([1-2][0-9][0-9][0-9]|[3-9][0-9][0-9]) msg |Fhem-Meldung: Beregnung| ein Beregnerkreis funktioniert nicht;; trigger w_BeregnungAlarm .


Der Watchdog funktioniert einwandfrei.
Nun möchte ich über msg das auslösende Device/Ereignis mittels $NAME/$EVENT senden.
defmod w_BeregnungAlarm watchdog MYSENSOR_(2|3):(status(1|2|3|4)|status).on 00:00:30 Sonoff_Brunnenpumpe:ENERGY_Power.([1-2][0-9][0-9][0-9]|[3-9][0-9][0-9]) msg |Fhem-Meldung: Beregnung| ein Beregnerkreis funktioniert nicht $NAME, $EVENT;; trigger w_BeregnungAlarm .

In msgConfig habe ich die Funktion schon mit doppelten Anführungszeichen hinterlegt:
attr globalMsg msgCmdMail {sendMail('%DEVICE%',"%TITLE%","%MSG%")}

ich habe es auch schon direkt mit
{sendMail('<email>',"Titel","Bsp.Text $NAME $EVENT")}
probiert.

Jedes mal bekomme ich eine Logmeldung, dass diese Variablen nicht deklariert sind:
021.06.12 12:39:00 3: Watchdog w_BeregnungAlarm triggered
2021.06.12 12:39:00 1: sendEmail RCP: XXXXXXXX
2021.06.12 12:39:00 1: sendEmail Subject: Fhem-Meldung: Beregnung
2021.06.12 12:39:00 1: sendEmail Text: ein Beregnerkreis funktioniert nicht $NAME, $EVENT
2021.06.12 12:39:02 1: sendEmail returned: Jun 12 12:39:02 raspberrypi sendEmail[12651]: Email was sent successfully!
2021.06.12 12:39:02 3: msg globalMsg: ID=1623494340.86682.1 TYPE=mail ROUTE=XXXXX STATUS=OK PRIORITY=0 TITLE='Fhem-Meldung: Beregnung' MSG='ein Beregnerkreis funktioniert nicht $NAME, $EVENT'
2021.06.12 12:46:24 3: Watchdog w_BeregnungAlarm triggered
2021.06.12 12:46:24 1: ERROR evaluating {sendMail('XXXXXX','Fhem-Meldung: Beregnung',"ein Beregnerkreis funktioniert nicht $NAME, $EVENT")}: Global symbol "$NAME" requires explicit package name (did you forget to declare "my $NAME"?) at (eval 7389364) line 1.
Global symbol "$EVENT" requires explicit package name (did you forget to declare "my $DEVICE"?) at (eval 7389364) line 1.


Soweit ich im Forum nachgelesen habe sollten diese Variablen allgemein so funktionieren.
Verhält sich Watchdog hier anders, oder habe ich eine Denkfehler?

Danke und Gruß
Bernd

EDIT: ich hatte überall $DEVICE anstatt $EVENT geschrieben  :(
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...

MadMax-FHEM

Zitat von: frober am 12 Juni 2021, 13:37:43
Soweit ich im Forum nachgelesen habe sollten diese Variablen allgemein so funktionieren.
Verhält sich Watchdog hier anders, oder habe ich eine Denkfehler?

Wo hast du das her?

Z.B. bei readingsGroup ist es $DEVICE und nicht $NAME...

Ich weiß nichts von: das gilt allgemein in fhem (mag mich aber täuschen, wobei dann täte es ja gehen ;)  )...

Soweit ich weiß kommt es eben drauf an WO du das verwenden möchtest.

In notify gibt es $NAME...
...bei watchdog (nutze ich nicht) wohl eher nicht...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

frober

Zitat von: MadMax-FHEM am 12 Juni 2021, 13:51:22
Wo hast du das her?

Z.B. bei readingsGroup ist es $DEVICE und nicht $NAME...

Ich weiß nichts von: das gilt allgemein in fhem (mag mich aber täuschen, wobei dann täte es ja gehen ;)  )...

Soweit ich weiß kommt es eben drauf an WO du das verwenden möchtest.

In notify gibt es $NAME...
...bei watchdog (nutze ich nicht) wohl eher nicht...

Gruß, Joachim

Meine Aussage bezog sich darauf, dass die Variablen in Perl funktioniere/bekannt sein sollten.
D.h., dass ich diese in sendMail nutzen kann sofern sie vom Device bereit gestellt werden.
Dazu habe ich Bsp. Im Forum gefunden.

Beim notify sind diese Variablen beschrieben und mWn funktioniert Watchdog analog zu notify. Allerdings sind beim Watchdog eigentlich 2 auslösende Ereignisse vorhanden.
Daher bin ich mir hier nicht sicher.
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...

MadMax-FHEM

Zitat von: frober am 12 Juni 2021, 14:08:15
Meine Aussage bezog sich darauf, dass die Variablen in Perl funktioniere/bekannt sein sollten.
D.h., dass ich diese in sendMail nutzen kann sofern sie vom Device bereit gestellt werden.
Dazu habe ich Bsp. Im Forum gefunden.

Ja schon klar.

ABER: wird $NAME bei watchdog bereitgestellt? Sieht ja nicht so aus.

UND:

bei notify "gibt" es $NAME -> triggerndes Device

bei readingsGroup ist es eben NICHT $NAME sondern $DEVICE -> triggerndes Device

Damit wollte ich nur sagen, dass $NAME und andere Variablen "nicht einfach da sind", sondern ja "befüllt" werden müssen.
Und wenn watchdog das nicht tut (was ich nicht behauptet habe zu wissen ;)  ), dann gibt es eben "im watchdog" kein $NAME, daher der Fehler (Vermutung)...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

frober

Daher auch meine Frage, ob Watchdog hier anders funktioniert... ;)

P.S. ich weiß nicht wo ich das nachlesen kann
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...

MadMax-FHEM

Zitat von: frober am 12 Juni 2021, 14:16:16
Daher auch meine Frage, ob Watchdog hier anders funktioniert... ;)

So wie ich die Meldung interpretiere: wohl ja ;)

Zitat von: frober am 12 Juni 2021, 14:16:16
P.S. ich weiß nicht wo ich das nachlesen kann

Hmm, gute Frage.
Ich hab mal die commandref durchforstet und bei vielen Modulen steht es dabei...
...da gilt $NAME dann wohl...

Weiß aber nicht, ob wenn es nicht erwähnt wird dann "zuverlässig" nicht da ist...

Bei DOIF scheint es wohl auch $DEVICE zu sein...

Also irgendwie scheint es wohl mal $NAME und mal $DEVICE zu sein oder aber auch keines von beidem.

Bei watchdog wird nichts erwähnt.
Also entweder mal (auf Verdacht) $DEVICE propieren...
...oder es gibt "sowas" bei watchdog nicht.

Dann: Maintainer bitten oder Patch liefern...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

frober

Danke für deine Mühe.
Wiki, commandref etc. habe ich natürlich auch gesucht. Vielleicht meldet sich auch Rudi zu meinem Problem...

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...

MadMax-FHEM

Zitat von: frober am 12 Juni 2021, 14:35:07
Danke für deine Mühe.
Wiki, commandref etc. habe ich natürlich auch gesucht. Vielleicht meldet sich auch Rudi zu meinem Problem...

Grüße Bernd

Gerne!

Sorry, dass ich es nicht wirklich genau weiß/wusste :-\

Aber ja, vielleicht meldet sich ja noch jemand, der es genau weiß... :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Jamo

Soweit ich weiss, existiert $name oder $NAME nur wenn der Watchdog getriggered wird, aber nicht mehr, wenn der Watchdog ausloest. Ich hatte das Problem auch mal.

Man kann aber einen Watchdog auch über ein notify + 'named' sleep realisieren, weil ein ausgeloestes named sleep ein vorher ausgeloestes überschreibt. Wenn das ausloesende Event kommt, wird also erstmal das named sleep getriggered, jedes weitere Event started das named sleep neu. Erst bei ausbleiben des Events wird dann das commando das auf das sleep folgt abgearbeitet.

Also hier mal schematisch, mal ein notify-Watchdog anhand eines PresenceDetect zur Lichtsteuerung, der auf 2 presence detectoren fuer Schlafzimmer und Wohnzimmer triggered:

Damit kannst Du das $Name auswerten (wie ich hier bei $Room gezeigt habe), Mit diesem einen Notify habe ich bei mir 5 watchdogs ersetzt, ich hatte vorher fuer jeden Raum einen.

defmod myPresence_n notify PresenceDetect1_Schlaf:presence:.presence|PresenceDetect1_Wohn:presence:.presence {myPresenceDetect($NAME)}


sub myPresenceDetect {
  my $NAME  = shift // return "Error, myPresenceDetect: we need NAME as parameter!";
  my $Room  = (split('_', $NAME),'','Schlaf')[1];

fhem("set Licht_$Room:FILTER=state!=on on");
.
fhem ("sleep 210 sleep_PresenceDetect_w_$Room; set Licht_$Room:FILTER=state!=off off");
}
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

frober

@Joachim, dafür musst du dich doch nicht entschuldigen, wenn müsste ich mich entschuldigen dass ich es nicht weiß und um Hilfe bitte  ???
Dafür ist doch das Forum da...

@Jamo, danke. Das schaue ich mir in Ruhe 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

#10
Zitat von: Jamo am 12 Juni 2021, 15:06:10
Soweit ich weiss, existiert $name oder $NAME nur wenn der Watchdog getriggered wird, aber nicht mehr, wenn der Watchdog ausloest. Ich hatte das Problem auch mal.

Man kann aber einen Watchdog auch über ein notify + 'named' sleep realisieren, weil ein ausgeloestes named sleep ein vorher ausgeloestes überschreibt. Wenn das ausloesende Event kommt, wird also erstmal das named sleep getriggered, jedes weitere Event started das named sleep neu. Erst bei ausbleiben des Events wird dann das commando das auf das sleep folgt abgearbeitet.

Also hier mal schematisch, mal ein notify-Watchdog anhand eines PresenceDetect zur Lichtsteuerung, der auf 2 presence detectoren fuer Schlafzimmer und Wohnzimmer triggered:

Damit kannst Du das $Name auswerten (wie ich hier bei $Room gezeigt habe), Mit diesem einen Notify habe ich bei mir 5 watchdogs ersetzt, ich hatte vorher fuer jeden Raum einen.

defmod myPresence_n notify PresenceDetect1_Schlaf:presence:.presence|PresenceDetect1_Wohn:presence:.presence {myPresenceDetect($NAME)}


sub myPresenceDetect {
  my $NAME  = shift // return "Error, $sub: we need NAME as parameter!";
  my $Room  = (split('_', $NAME),'','Schlaf')[1];

fhem("set Licht_$Room:FILTER=state!=on on");
.
fhem ("sleep 210 sleep_PresenceDetect_w_$Room; set Licht_$Room:FILTER=state!=off off");
}


Hallo Jamo,
du reagierst auf das gleiche Device. D.h. du verzögert nur das Abschalten des Lichts.

Ich muss auf 2 Devices reagieren.

Mir geht es darum:
Wenn meine Beregnung startet (Relais bekommt Startbefehl) und die Pumpe läuft nicht an, stimmt etwas nicht und es wird nicht bewässert. Bei mir hat sich vor kurzem ein Photomos-IC verabschiedet....

Ich müsste das eher so in etwa machen:
defmod xxx notify MYSENSOR_2:status.on sleep 30;{SUB($NAME,$EVENT)}



sub SUB {
my $n = SHIFT;
my $e = SHIFT;

If (Pumpe läuft nicht) { sende Mail "Fehler in $n, $e"};
}


Kurzform an Handy  ;)

Werde ich Mal testen...

P.S. Ist sleep in Verbindung eines Perl-Aufrufs immer noch nonblocking?
P.P.S. die Art des Befehls scheint egal zu 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...

Jamo

Zitat von: frober am 12 Juni 2021, 20:58:17
Hallo Jamo,
du reagierst auf das gleiche Device. D.h. du verzögert nur das Abschalten des Lichts.

Ich muss auf 2 Devices reagieren.

Mir geht es darum:
Wenn meine Beregnung startet (Relais bekommt Startbefehl) und die Pumpe läuft nicht an, stimmt etwas nicht und es wird nicht bewässert. Bei mir hat sich vor kurzem ein Photomos-IC verabschiedet....

Ich müsste das eher so in etwa machen:
defmod xxx notify MYSENSOR_2:status.on sleep 30;{SUB($NAME,$EVENT)}



sub SUB {
my $n = SHIFT;
my $e = SHIFT;

If (Pumpe läuft nicht) { sende Mail "Fehler in $n, $e"};
}


Kurzform an Handy  ;)

Werde ich Mal testen...

P.S. Ist sleep in Verbindung eines Perl-Aufrufs immer noch nonblocking?
P.P.S. die Art des Befehls scheint egal zu sein


Hi Frober,
Ich stelle mir das so vor: Das notify reagiert auf beide Bedingungen, also
defmod n_BeregnungAlarm notify MYSENSOR_(2|3):(status(1|2|3|4)|status).on|Sonoff_Brunnenpumpe:ENERGY_Power.([1-2][0-9][0-9][0-9]|[3-9][0-9][0-9]) {mySensorsOrSonoff($NAME)}

Dann wird bei eintreffen eines MYSENSOR events nach 30 sekunden (named sleepBrunnenpumpe) die sub_SendeMail_Brunnepumpe_funktioniert_nicht gestartet, es sei denn es trifft ein Sonoff_Brunnenpumpen event ein, der das sleepBrunnenpumpe wieder cancelled.
Und ja, ein sleep gefolgt von einem fhem commando ist nonblocking. Man muss bei der sub das $NAME in "" setzen, aber dann innerhab des fhem escapen.

Hier mal schematisch:

sub mySensorsOrSonoff {
  my $NAME  = shift // return "Error, $sub: we need NAME as parameter!";
  if ($NAME =~ "MYENSOR.*") fhem ("sleep 30 sleepBrunnenpumpe; {sub_SendeMail_Brunnepumpe_funktioniert_nicht(\"$NAME\")}");
  if ($NAME =~ "Sonoff_Brunnenpumpe.*") {fhem ("cancel sleepBrunnenpumpe quiet")}
}


Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

frober

Zitat von: Jamo am 12 Juni 2021, 21:51:03
Hi Frober,
Ich stelle mir das so vor: Das notify reagiert auf beide Bedingungen, also
defmod n_BeregnungAlarm notify MYSENSOR_(2|3):(status(1|2|3|4)|status).on|Sonoff_Brunnenpumpe:ENERGY_Power.([1-2][0-9][0-9][0-9]|[3-9][0-9][0-9]) {mySensorsOrSonoff($NAME)}

Dann wird bei eintreffen eines MYSENSOR events nach 30 sekunden (named sleepBrunnenpumpe) die sub_SendeMail_Brunnepumpe_funktioniert_nicht gestartet, es sei denn es trifft ein Sonoff_Brunnenpumpen event ein, der das sleepBrunnenpumpe wieder cancelled.
Und ja, ein sleep gefolgt von einem fhem commando ist nonblocking. Man muss bei der sub das $NAME in "" setzen, aber dann innerhab des fhem escapen.

Hier mal schematisch:

sub mySensorsOrSonoff {
  my $NAME  = shift // return "Error, $sub: we need NAME as parameter!";
  if ($NAME =~ "MYENSOR.*") fhem ("sleep 30 sleepBrunnenpumpe; {sub_SendeMail_Brunnepumpe_funktioniert_nicht(\"$NAME\")}");
  if ($NAME =~ "Sonoff_Brunnenpumpe.*") {fhem ("cancel sleepBrunnenpumpe quiet")}
}


Danke Jamo,
da habe ich zu kompliziert gedacht...deine Version leuchtet mir ein und sollte die bessere Variante sein.

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...

Jamo

Hallo Bernd,
ganz einfach könntest Du auch so was machen:

notify nur auf MYSENSORS, und nach 30 Sekunden checken, ob das Reading ENERGY_Power der Sonoff_Brunnenpumpe den erwarteten Wert hat (hier habe ich mal >= 6 angenommen). Wenn nicht (also kleiner6), dann eine Benachrichtigung schicken. Hier mal schematisch:

defmod n_BeregnungAlarm notify MYSENSOR_(2|3):(status(1|2|3|4)|status).on {fhem("sleep 30 sleep_CheckBrunnen; {if (ReadingsNum(\"Sonoff_Brunnenpumpe\",'ENERGY_Power','0') < 6) {myMacroPush(\"Sonoff_Brunnenpumpe funktioniert nicht\")}}")}
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

frober

Hallo Jamo,

Perl-Fehler:  my $sub ist nicht deklariert....
my $NAME  = shift // return "Error, $sub: we need NAME as parameter!";

ich habe das erstmal durch den Namen ersetzt.


Bei deinem letzten Bsp. missfällt mir der "dauernde" Wechsel zw. Fhem und Perl.


Ich habe das nun so umgesetzt:
defmod n_BeregnungAlarm notify MYSENSOR_(2|3):(status(1|2|3|4)|status).on|Sonoff_Brunnenpumpe:ENERGY_Power.([1-2][0-9][0-9][0-9]|[3-9][0-9][0-9]) {Bewaesserungsalarm($NAME,$EVENT)}


sub Bewaesserungsalarm {
  my $NAME  = shift // return "Error, sub Beregnungsalarm: we need NAME as parameter!";
  my $EVENT = shift // return "Error, sub Beregnungsalarm: we need NAME as parameter!";
 
  if ($NAME =~ "MYSENSOR_.*") {fhem ("sleep 1 sleepBrunnenpumpe; msg |Fhem-Meldung: Beregnungsalarm| Ein Beregnerkreis funktioniert nicht ($NAME, $EVENT)")};
  if ($NAME =~ "Sonoff_Brunnenpumpe.*") {fhem ('cancel sleepBrunnenpumpe quiet')}
  return;
}


Funktioniert einwandfrei. :-)

Es wäre trotz allem schön, wenn man diesen Umweg nicht machen müsste und die Variablen im Watchdog zur Verfügung stehen würden.
@Rudi wäre das machbar?

Jamo danke für deine Unterstützung und die Bsp.

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...