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
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 %')
}
}
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
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
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
vielen Dank für die Hinweise,
ich konnte nun das Problem lösen.
Alles funktioniert jetzt wunderbar.
gruss
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) ?
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.
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