[GELÖST] Batteriewarnung Mail 40+ mal

Begonnen von Tommi ratlos, 28 Oktober 2017, 15:34:45

Vorheriges Thema - Nächstes Thema

Tommi ratlos

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
Pi 3 CUNX868 mit 433 Pigator.

Jamo

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")}
}
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

Benni

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 - Attribut entsprechend setzen, damit nur bei einer Veränderung des Readings auch ein Event erzeugt wird.

"Dein" notify-Code an sich passt schon so!

FHEMAN

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
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Jamo

#4
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!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

Tommi ratlos

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
Pi 3 CUNX868 mit 433 Pigator.

MadMax-FHEM

Hi Thomas,

du brauchst kein userReadings dafür.

Das setreading im Code des notify setzt das Reading.

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)

Tommi ratlos

Pi 3 CUNX868 mit 433 Pigator.

Tommi ratlos

#8
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
Pi 3 CUNX868 mit 433 Pigator.

Tommi ratlos

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
Pi 3 CUNX868 mit 433 Pigator.

Kruemel

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.





RPi, Homematik, LAN-CFG, Bewegungsmelder, Rauchmelder, Rolläden, Schalter, Türkontakte, Heizungsventile, FB7390, Owncloud, xBMC

Otto123

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

Kruemel

Hallo, danke.  Manchmal ist es so einfach.
VG
RPi, Homematik, LAN-CFG, Bewegungsmelder, Rauchmelder, Rolläden, Schalter, Türkontakte, Heizungsventile, FB7390, Owncloud, xBMC

Kruemel

Hallo nochmal, die neue Batteriewarnung funktioniert super. Nochmals Danke für die Hilfe.
VG
RPi, Homematik, LAN-CFG, Bewegungsmelder, Rauchmelder, Rolläden, Schalter, Türkontakte, Heizungsventile, FB7390, Owncloud, xBMC

Boenne

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

#FHEM #RasPI #Homematic #SIGNALduino