Battery Low Email mit Zeitverzögerung

Begonnen von Sonic, 10 März 2015, 23:40:39

Vorheriges Thema - Nächstes Thema

Sonic

Guten Abend,
ich wäre dankbar wenn jemand mal kurz meinen Code anschauen könnte.

Ich habe mir diesen gebaut, um eine Battery Low Meldung per Mail zu bekommen.
Damit ich aber nicht alle 3 Minuten diese Mail bekomme, habe ich die Verzögerung + 7200 eingebaut.

define n_batt_chk notify .*:[Bb]attery.* { if ($EVENT !~ m/ok/) && (time > $main::NewMailtime) {\
   Log (3, "$NAME : Batteriewarnung $EVENT");;\
   DebianMail('test@tester.de','FHEM Batteriewarnung', $NAME.': '.$EVENT);; \
   $main::NewMailtime = time + 7200;;\
  }\
}

Leider funktioniert der Code so nicht.

danke im voraus

borsti67

Ich habe das bei mir mit einem Dummy (d_LastWarning) gelöst, so kann ich den Stand der letzten Warnung leichter ablesen. Das notify dazu sieht dann so aus:

.*:[Bb]attery.* {
  if(("%" !~ m/ok/) && (time-Value("d_LastWarning") > 60*60*8)) {
    sendmail('test@@tester.de','FHEM Batteriewarnung',q[Hallo,\n\n@ %\n\nGruss\nEuer HausAutomat]);
    fhem("set d_LastWarning " . time);
    Log(3,'@: Batteriewarnung %')
  }
}
cu/2
Borsti
---
FHEM 5.8 auf Synology DS211j (bis 11/17) | FHEM 6.0 auf Raspi Zero W (bis 11/20) | FHEM 6.2 als VM in Synology DS1815+ (ab 11/20)

Sonic

Hallo Borsti 67

vielen Dank für deine Antwort.

Sorry, aber als Anfänger möchte ich gerne nachfragen.

Ich habe deinen Code in die cfg integriert, und erhalte diese Meldung beim speichern.

Ich habe den Code so eingesetzt:

define n_batt_chk notify .*:[Bb]attery.* {
  if(("%" !~ m/ok/) && (time-Value("d_LastWarning") > 60*60*8)) {
    DebianMail('test@@tester.de','FHEM Batteriewarnung',q[Hallo,\n\n@ %\n\nGruss\nEuer HausAutomat]);
    fhem("set d_LastWarning " . time);
    Log(3,'@: Batteriewarnung %')
  }
}

---------------------------------------

ich erhalte diese Fehler:

Unknown command if(("%", try help. Unknown command DebianMail('test@@tester.de','FHEM, try help. Unknown command fhem("set, try help. Unknown command Log(3,'@:, try help. Unknown command }, try help. Unknown command }, try help.

----------------------------------------

Ich nehme an ich muss noch ein Dummy Device anlegen. Wie hast du das gemacht bzw. benannt ?
Wie kann ich dann den letzten Stand der Warnung dann leichter ablesen ?


Es wäre sehr nett wenn du mir mit deiner Antwort helfen würdest.

gruss
KLAUS

borsti67

Hallo Klaus,

mein Code ist aus dem Eingabefenster, NICHT aus der CFG (in letzterer musst Du die Zeilen korrekt beenden und die Trenner verdoppeln etc pp!).
Also klicke in FHEM auf Dein Notify und dort auf "DEF". Dann kannst Du den Code in das Fenster dort kopieren und Deine Änderungen anbringen.

Das Dummy kopiere ich Dir hier dann mal aus der fhem.cfg:
define d_LastWarning dummy
attr d_LastWarning comment Timestamp der letzten Warnmeldung
set d_LastWarning 0
cu/2
Borsti
---
FHEM 5.8 auf Synology DS211j (bis 11/17) | FHEM 6.0 auf Raspi Zero W (bis 11/20) | FHEM 6.2 als VM in Synology DS1815+ (ab 11/20)

Icinger

Ich habs so gelöst, dass ich auf alle Battery-Readings prüfe und beim auslösen dementsprechend ein attr comment setze:

.*:[Bb]attery:.* {if($EVENT !~ m/ok/i) {
   if (AttrVal("$NAME","comment",0) ne 1) {
      Log 3,"Bat $NAME $EVENT";
      fhem "attr $NAME comment 1";
      fhem "set Pushover1 msg 'Batterie' 'Bitte Batterie bei Gerät $NAME tauschen' '' 0 '' ";
   }
}elsif($EVENT =~ m/ok/i) {fhem("setreading $NAME lastBatChange ".localtime)}
elsif (AttrVal("$NAME","comment",0) eq 1) {fhem("deleteattr $NAME comment")}

}


Beim ersten mal BatLow wird ne Pushover-Msg geschickt, dann nichtmehr.
Wenn die Batterie ewieder "ok" ist, wird das attribut dann gelöscht.

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

Sonic

vielen Dank für die Hinweise,

ich konnte nun das Problem lösen.
Alles funktioniert jetzt wunderbar.

gruss

slor

#6
Guten Abend,

ich habe das Beispiel von Icinger übernommen, nur hapert es bei mir beim Versand der Nachricht via Exim:

Aus der DEF meines Notify's:

.*:[Bb]attery:.* {if($EVENT !~ m/ok/i) {
   if (AttrVal("$NAME","comment",0) ne 1) {
      Log 3,"Bat $NAME $EVENT";
      fhem "attr $NAME comment 1";
      {exmail('mail@mail.de','FHEM-Batteriewarnung $NAME', 'Batteriewechsel erforderlich bei $NAME -> Status: $EVENT')};
   }
}elsif($EVENT =~ m/ok/i) {fhem("setreading $NAME lastBatChange ".localtime)}
elsif (AttrVal("$NAME","comment",0) eq 1) {fhem("deleteattr $NAME comment")}
}


Die Mail kommt an, allerdings wird $Name und $Event im Betreff und Body nicht aufgelöst, sondern so direkt versendet.
Log und Attribut werden korrekt ausgegeben.
Was habe ich übersehen?

Btw, wofür steht das i im RegEx !~ m/ok/i) ?

slor

Nochwas ist aufgefallen:
Nachdem ich die Batterie gewechselt habe wird das Reading so gefüllt.
lastBatChange             Thu Jun 4 22:50:23 2015                  2015-06-04 22:50:23

Würde das auch so gehen?
lastBatChange             2015-06-04 22:50:23                       2015-06-04 22:50:23

das Attribute Comment wird leider auch nicht gelöscht. Es bleibt auf 1 stehen.

Talkabout

Hallo zusammen,

lässt sich dieses Problem denn nicht mit dem Attribut

event-on-change-reading

lösen? Damit wird das Event nur dann getriggert, wenn sich der Status ändert, was ja wirklich nur dann passiert, wenn er von "ok" nach "low" springt.

Gruss