FHEM Forum

FHEM - Hausautomations-Systeme => Homematic => Thema gestartet von: Tommi ratlos am 28 Oktober 2017, 15:34:45

Titel: [GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Tommi ratlos am 28 Oktober 2017, 15:34:45
Hallo,

habe folgendes Notify im Einsatz:
.*:[Bb]attery:.* { if($EVENT !~ m/ok/) {my $FNAME = (AttrVal($NAME,"alias",$NAME));;
{ system "echo '$EVENT' | mail -s  'FHEM Batteriewarnung $FNAME.' xxxxx\@xxxxx.xxx" };
Log 3, "$NAME: Batteriewarnung $EVENT";}
}


Hat heute wie erwartet Mails abgesetzt allerdings 47 mal bis ich die Batterien gewechselt habe.
Gibt es eine Möglichkeit die Mail nur einmal zu senden.

Gruß
Thomas
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Jamo am 28 Oktober 2017, 15:40:32
So in etwa:

define batterie_once_in_12_h dummy

define batterie_check_n notify .*:[Bb]attery:.* { if($EVENT !~ m/ok/ && ReadingsVal("batterie_once_in_12_h","state","nA") ne "on")
  {my $FNAME = (AttrVal($NAME,"alias",$NAME));;
{ system "echo '$EVENT' | mail -s  'FHEM Batteriewarnung $FNAME.' xxxxx\@xxxxx.xxx" };
Log 3, "$NAME: Batteriewarnung $EVENT";
fhem("set batterie_once_in_12_h on;defmod nach12h at +12:00:00 set batterie_once_in_12_h off")}
}
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Benni am 28 Oktober 2017, 19:19:36
Zitat von: Tommi ratlos am 28 Oktober 2017, 15:34:45
Gibt es eine Möglichkeit die Mail nur einmal zu senden.

bei den einzelnen Geräten das event-on-change-reading (http://commandref.fhem.de/#event-on-change-reading) - Attribut entsprechend setzen, damit nur bei einer Veränderung des Readings auch ein Event erzeugt wird.

"Dein" notify-Code an sich passt schon so!
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: FHEMAN am 28 Oktober 2017, 22:39:25
Bei inomas Lösung werden anschließend alle Batteriewarnungen auch anderer Devices unterdrückt.
Bei Bennis Lösung muss man sehr diszipliniert sein, da das Event insgesamt nur 1x gesendet - weil sich der Status nicht mehr ändert, bevor das Device tot ist.
Ich finde es besser, die Versandinfo am Gerät selbst zu speichern:


.*:[Bb]attery:.* {
  if(($EVENT !~ m/ok/) && ($EVENT !~ m/AC/)) {
    my $valDateToday = substr(ReadingsTimestamp($NAME,"state",""),0,10);
my $valDateLastAnnouncement = substr(ReadingsTimestamp($NAME,"LastLowBattMailSent",""),0,10);
    if ($valDateLastAnnouncement ne $valDateToday) {
my $t = ReadingsTimestamp($NAME,"state","");
    SendMessage("Battery Status",  "$t: $NAME - $EVENT", "Log,Pushover,Mail", "silent");
fhem("setreading $NAME LastLowBattMailSent 1");
}
  }
}


Gruß
Ronny
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Jamo am 28 Oktober 2017, 23:35:11
Hallo Ronny, bei meinem Code bekommt man eine Batteriewarnung alle 12 Stunden, dann vergisst man den Batteriewechsel auch nicht. Aber deine Lösung ist wirklich noch um einiges schicker!!! Danke!
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Tommi ratlos am 29 Oktober 2017, 09:10:05
Hallo Ronny,

deine Lösung finde ich gut, allerdings ist mir nicht klar wie ich das entsprechende userreading anlegen muss.

attr HM_RT_Wohnzimmer userReadings LastLowBattMailSent:trigger.*

Oder bin ich da auf dem Holzweg

Gruß
Thomas
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: MadMax-FHEM am 29 Oktober 2017, 09:15:24
Hi Thomas,

du brauchst kein userReadings dafür.

Das setreading im Code des notify setzt das Reading.

Gruß, Joachim
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Tommi ratlos am 29 Oktober 2017, 09:20:02
Hi Joachim,

Danke

Gruß
Thomas
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Tommi ratlos am 29 Oktober 2017, 11:07:35
Hallo nochmal,

habe es noch etwas geändert, sendet jetzt nur alle x Tage (in meinem Fall 3).

.*:[Bb]attery:.* {
  if(($EVENT !~ m/ok/) && ($EVENT !~ m/AC/)) {
    my $TAGE = 3;
    my $valLowBattDays = ReadingsAge($NAME,"LastLowBattMailSent",(86400*$TAGE));
    my $FNAME = (AttrVal($NAME,"alias",$NAME));

    if ($valLowBattDays >= (86400*$TAGE)) {
         my $t = ReadingsTimestamp($NAME,"state","");
         { system "echo '$t: $NAME - $EVENT' | mail -s  'FHEM Batteriewarnung $FNAME.' xxxxxx\@xxxx.xxxx" };
         Log 3, "$NAME: Batteriewarnung $EVENT";
fhem("setreading $NAME LastLowBattMailSent 1");
}
  } else {
     fhem("deletereading $NAME LastLowBattMailSent");
  }
}


Gruß
Thomas
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Tommi ratlos am 30 Oktober 2017, 16:18:36
Hallo nochmal,

habe das Ganze nocheinmal etwas geändert. Jetzt wird das Reading "LastLowBattMailSent" auch geändert wenn Batt OK und der Timestamp von  "LastLowBattMailSent"  älter als 6 Stunden ist. Gibt es eine elegantere Lösung das Reading "LastLowBattMailSent" wenn die Batterie gewechselt wurde.

Hat jemand Erfahrungen ob die Batteriespannung gegen ende auch schon mal zwischen OK und LOW schwankt wenn z.B. die Entkalkungs-Funktion Strom zieht.



.*:[Bb]attery:.* {
   if(($EVENT !~ m/ok/) && ($EVENT !~ m/AC/)) {
      my $TAGE = 3;
      my $valLowBattAge = ReadingsAge($NAME,"LastLowBattMailSent",(86400*$TAGE));
      my $FNAME = (AttrVal($NAME,"alias",$NAME));

      if (ReadingsVal($NAME,"LastLowBattMailSent",0) eq 0){
         my $t = ReadingsTimestamp($NAME,"state","");
         { system "echo '$t: $NAME - $EVENT' | mail -s  'FHEM Batteriewarnung $FNAME.' thomas\@dann.nrw" };
         fhem("setreading $NAME LastLowBattMailSent 1");
         Log 3, "$NAME: Batteriewarnung $EVENT";
      } else {
         if ($valLowBattAge >= (86400*$TAGE)) {
    fhem("setreading $NAME LastLowBattMailSent 0");
         }
      }
   } else {
      #LastLowBattMailSent zurücksetzen
      if (ReadingsVal($NAME,"LastLowBattMailSent",1) eq 1 && ReadingsAge($NAME,"LastLowBattMailSent",86400) > 21600){
         fhem("setreading $NAME LastLowBattMailSent 0");
      }
     
   }
}


Gruß
Thomas
Titel: Antw:Batteriewarnung Mail 40+ mal
Beitrag von: Kruemel am 02 Oktober 2019, 23:02:39
Zitat von: Tommi ratlos am 29 Oktober 2017, 11:07:35
Hallo nochmal,

habe es noch etwas geändert, sendet jetzt nur alle x Tage (in meinem Fall 3).

.*:[Bb]attery:.* {
  if(($EVENT !~ m/ok/) && ($EVENT !~ m/AC/)) {
    my $TAGE = 3;
    my $valLowBattDays = ReadingsAge($NAME,"LastLowBattMailSent",(86400*$TAGE));
    my $FNAME = (AttrVal($NAME,"alias",$NAME));

    if ($valLowBattDays >= (86400*$TAGE)) {
         my $t = ReadingsTimestamp($NAME,"state","");
         { system "echo '$t: $NAME - $EVENT' | mail -s  'FHEM Batteriewarnung $FNAME.' xxxxxx\@xxxx.xxxx" };
         Log 3, "$NAME: Batteriewarnung $EVENT";
fhem("setreading $NAME LastLowBattMailSent 1");
}
  } else {
     fhem("deletereading $NAME LastLowBattMailSent");
  }
}


Gruß
Thomas


Hallo, ich stehe etwas auf dem Schlauch. Ich versuche diesen code bei mir einzufügen und es hagelt Syntaxfehler  >:(
Hat jemand einen Tipp woran es liegt.
Schon mal vielen Dank.


Unknown command if(($EVENT, try help.
Unknown command my, try help.
Unknown command my, try help.
Unknown command my, try help.
IF: no left bracket:  {
Unknown command my, try help.
Global symbol "$t" requires explicit package name at (eval 188374) line 1, <> line 94.
Global symbol "$NAME" requires explicit package name at (eval 188374) line 1, <> line 94.
Global symbol "$EVENT" requires explicit package name at (eval 188374) line 1, <> line 94.
Global symbol "$FNAME" requires explicit package name at (eval 188374) line 1, <> line 94.

Unknown command Log, try help.
Unknown command fhem("setreading, try help.
Unknown command }, try help.
Unknown command }, try help.
Unknown command fhem("deletereading, try help.
Unknown command }, try help.
Unknown command }, try help.





Titel: Antw:[GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Otto123 am 03 Oktober 2019, 00:32:19
Hi,

dieser zitierte Codeblock ist für die DEF in einem notify. Also mach
define n_battery notify bla {}für ein leeres notify
Dann klickst auf die DEF, der Editor geht auf, Du löschst alles was da steht und ersetzt es mit dem Codeblock den Du zitiert hast.

Gruß Otto
Titel: Antw:[GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Kruemel am 03 Oktober 2019, 11:46:22
Hallo, danke.  Manchmal ist es so einfach.
VG
Titel: Antw:[GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Kruemel am 10 Oktober 2019, 22:34:12
Hallo nochmal, die neue Batteriewarnung funktioniert super. Nochmals Danke für die Hilfe.
VG
Titel: Antw:[(fast)GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Boenne am 01 Februar 2021, 20:09:55
Moin Leutz,
sorry, dass ich in diesem "gelöst"-Thema noch einmal etwas poste, aber meine Frage betrifft unmittelbar dieses notify  ::)

Bisher lief diese Batterieüberwachung fehlerfrei, aber nun bekomme ich laufend eine falsche Meldung bezüglich einer leeren Batterie.
Mein Problem ist, dass das notify alle Readings mit [Bb]attery abfragt, was ja auch Sinn ergibt. Nun habe ich ein neues Device, ein Nuki-Türschloss, in fhem eingebunden. Dieses Device hat insgesamt drei readings mit battery:

batteryChargeState  86
batteryCharging       false
batteryState            ok

Man sieht natürlich, warum ich eine falsche Meldung bekomme, nämlich weil die ersten beiden Readings mit [Bb]attery beginnen und nicht ok sind.

Wie kann ich das notify anpassen, so dass diese beiden speziellen readings ausgeschlossen werden? Logisch muss es ein UND NICHT sein, aber wie lautet die richtige Syntax?

Vielen Dank für Eure Hilfe.

LG
Björn

Titel: Antw:[GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Otto123 am 01 Februar 2021, 20:26:26
Hi,

naja der Trigger ist normal .*:[Bb]attery:.* da kommt ein Reading was länger ist als battery nicht vor (battery:)

Da muss dein notify anders sein ;)

Gruß Otto
Titel: Antw:[(fast)GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Boenne am 01 Februar 2021, 21:13:22
Hallo Otto,
vielen Dank für Deine schnelle Antwort. Ich habe mir das bei mir noch einmal angeschaut und natürlich hats Du Recht: Mein trigger lautet

.*:[Bb]attery.*:.*

Hatte mich nach Deiner Antwort gewundert, dass meine Geräte mit dem reading "batteryState" korrekt behandelt werden. Der (fehlende) Doppelpunkt machts ;-)
Das erklärt aber auch mein geschildertes Problem. Also noch einmal die Frage, wie schließe ich die oben genannten readings aus, während ich (zunächst) alle anderen [Bb]attery.* readings berücksichtige.

Lieben Dank
Björn
Titel: Antw:[GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Otto123 am 01 Februar 2021, 21:33:27
ignoreRegexp wäre das Suchwort :)
https://fhem.de/commandref_DE.html#notify
Titel: Antw:[GELÖST] Batteriewarnung Mail 40+ mal
Beitrag von: Boenne am 01 Februar 2021, 21:58:13
Danke, Otto.
Das war ein sehr hilfreicher Hinweis, damit setze ich mich jetzt mal auseinander.

LG
Björn