Hallo zusammen,
habe folgendes in mein FHEM eingebaut um eine Warnung zu bekommen wenn der Batteriestatus auf low geht:
define n_batt_chk notify .*:[Bb]attery.* { if("%" !~ m/ok/) {\
{FB_mail('MEINEADRESSE@@MEINPROVIDER.de','FHEM Batteriewarnung','@ %')};;\
Log 3, "@: Batteriewarnung %";;\
}\
}
Funktioniert auch soweit prima. Leider etwas zu gut.
Ich werde mit Warn-mails zugespamt.
LOG meiner FritzBox:
04.01.13
17:41:04
E-Mail-Zustellung gescheitert. SMTP-Server meldet: "550 5.7.1 Send quota exceeded, try again in 22738 seconds".
Wie kann ich erreichen, dass diese Benachrichtigung nur beim initialen Ändern des Status auf low kommt und nicht andauernd.Desweiteren würde ich noch gerne einen 2. Empfänger ins CC setzen für diese Nachricht.
Vielen Dank schonmal für eure Hilfe.
Alex
Hallo,
Willst du nur einmal pro Gerät ne Mail bekommen oder generell nur die erste Batteriewarnung seit rücksetzen?
Grüße
Lasse Dir doch einmal am Tag die Mails zusenden:
define n_batterie_check notify .*:.*[Bb]attery.* { \
my $myNow = sprintf("%%02d:%%02d:%%02d", $hour, $min, $sec);;\
if("%" !~ m/ok/ and $myNow gt "19:00:00" and $myNow le "20:00:00") {\
{Log 3, (' n_batterie_check Notify: @: Batteriewarnung %') }\
FB_mail('deine.email@@adresse.de',"FHEM Batterie-Warnung","@: Batteriewarnung %") ;;\
} \
}
Hallo und Guten Morgen,
und das klappt das nur einmal am Tag Mails rausgehen?
Oder kann es passieren das zwischen 19 Und 20 Uhr dann im Minutentakt Mails einrauschen?
Grüße
Ich hätte gerne nur die erste Warnung seit der Status der Batterie des Geräts von OK auf low geht (und umgekehrt).
Also Batterie für irgendein Gerät ist low / state wechselt auf low -> ich bekomme eine Mail.
Das Problem ist behoben (Batteriewechsel) / state wechselt zurück auf OK -> ich bekomme erneut eine Mail, dass das Problem behoben ist.
Für mich ist es so genau richtig. Es kommen halt ein paar Mails, aber dann wechsele ich die Batterien auch schnell und übersehe es nicht.
Falls doch nicht, werde ich am nächsten Tag eben wieder erinnert.
Du kannst jedoch auch den Zeitraum auf z.B. 5 Minuten stellen und alles ist auch gut.
Alle anderen Konstrukte gehen natürlich auch. Z.B. über ein if ... else mit einem Dummy, der auf "gesendet" gesetzt wird und danach eben den Versand verhindert.
Allerdings muss man diesen dann wiederum auch irgendwann wieder reseten.
So etwas ist mir aber in diesem Fall zu aufwändig. Die Batterien halten ja für mein Empfinden sehr lange.
Aber vielleicht hat ja noch jemand einen anderen Codeschnipsel?
Hi,
wenn das wirklich in state steht, kannst Du mit OldValue() arbeiten, siehe http://fhem.de/commandref.html#perl (//fhem.de/commandref.html#perl)
M.Wö. steht aber der Batterie-Status nur in einem Reading, da gibt's so ne Funktion m.W. nicht.
D.h. Du müsstest den aktuellen Batteriestatus immer irgendwo hineschreiben, um beim nächsten Durchlauf prüfen zu können, ob er sich im Vergleich zum vorherigen Lauf geändert hat.
Anregung:
Link (http://forum.fhem.de/index.php?topic=10018.msg56996#msg56996)
Gruß, Uli
Zitat von: Puschel74 schrieb am Do, 10 Januar 2013 09:22kann es passieren das zwischen 19 Und 20 Uhr dann im Minutentakt Mails einrauschen?
Hallo Puschel74,
die Anzahl der Mails im o.g. Zeitraum hängt von der "Geschwätzigkeit" deiner Geräte ab.
Mein geschwätzigster Sensor liefert ca. alle 20 Sec eine Meldung.
3 Mails/Min sollte dein Mailprovider noch nicht als SPAM einordnen.
Wenn Du den "Meldezeitraum" aus dem Codebeispiel von LaLeLu auch noch auf deine Anwesenheitszeit @home/FHEM begrenzt, kannst Du die Batterien ja sofort tauschen.
Ohne eigenes kompetentes Servicepersonal @home/FHEM kannst Du ja mit der Information bzgl. der leeren Batterie z.B. um 11:00 Uhr Unter Tage/Im Büro absolut nichts am Zustand des Sensors ändern.
Schön wäre deine angestrebte Lösung mit nur 1 Meldung/Sensor schon, der dazu notwendige Code müsste allerdings für jeden Sensor eine eigene Variable verwalten.
Lt. Murphy leidet nicht nur ein Sensor an Batterieinsuffizienz.
Weniger ist manchmal mehr.
@LaLeLu: Lieben Dank für den Code - ist übernommen und reicht mir ebenso wie dir.
VG
WiKa
Hallo,
da ich sowieso zur Anzeige auf der Hauptseite einen Dummy benutze erlaube ich mir mal auch meinen
Teil hier rein zu kopieren ;-)
define Batterie_Leer dummy
attr Batterie_Leer eventmap /on:Batterie/off:OK/
attr Batterie_Leer webcmd OK
.*:[Bb]attery.* {
if("%" !~ m/ok/) {
if (Value("Batterie_Leer") eq "OK") {
fb_mail('xxxxx.yyyyyyy@@zzzzzzz.dd','FHEM Batteriewarnung','@ %');
fhem ("set Batterie_Leer on");
}
Log (3,"Mail ist schon raus");
Log (3,"@: Batteriewarnung %");
}
}
Logeinträge stören mich weniger ;-)
Aber so gibt es, leider?, nur eine Mail pro Auslösung - egal welches Device Batterie nicht ok meldet.
Aber im Logfile sehe ich ja dann wenn es mehr sind.
Vllt. gefällt es ja dem einen oder anderen ;-)
Grüße
Das klingt ja interessant. Wie könnte ich das denn für meine HMS 100-TF Temperaturfühler übernehmen, so dass mir die FritzBox mailt?
Im Log steht immer folgendes:
2013.01.19 19:56:33 3: list KlimaGarten STATE : KlimaGarten T: -6 H: 70.3 Bat: ok
Muss in der FritzBox noch irgend etwas aktiviert werden, damit Mails verschickt werden können?
Ich habe gerade einmal folgendes probiert, doch da tat sich gar nix:
define n_batt_chk notify .*:Bat:.* { if("%" ~ m/ok/) {\
{FB_mail('meine@@adresse.xx' (@@adresse.xx'),'FHEM Batteriewarnung','@ %')};;\
Log 3, "@: Batteriewarnung %";;\
}\
}
Danke für Hilfe.
Ich hab den Push-Service auf der Fritzbox aktiviert.
als notify
hms2:T:.* {if (%EVTPART1 < 9) { fb_mail('xxxxx@@xxxxx.com' (@@xxxxx.com'),'hms2 %EVTPART1','HMS2 ist zu kalt') }}
funktioniert
mfg Frank
Ich finde das Thema BattWarnung im Log oder EMail prima, komme aber wohl momentan nicht dazu.
Damit die Info nicht verloren geht, könnt Ihr das finale Ergebnis vielleicht in den CodeSnippets posten ?
Dieses Thema hat bestimmt viele Anhänger !
Danke
Gruss
Holger
define nBatChk notify KlimaGarten:T:.* {if (%EVTPART1 < 9) { use FritzBoxUtils;; FB_mail('email@@adresse.com' (@@adresse.com'),'KlimaGarten %EVTPART1','KlimaGarten...')}}
scheint zu funktionieren, wobei ich das
use FritzBoxUtils;;
noch einfügen musste. Kann das auch einmal zentral außerhalb des define in der fhem.cfg passieren?
Wie kann ich denn jetzt aber den Batteriezustand prüfen?
2013.01.19 19:56:33 3: list KlimaGarten STATE : KlimaGarten T: -6 H: 70.3 Bat: ok
Hallo zusammen,
ich hole diesen alten Thread mal wieder hoch, weil ich die Anregung von hier habe, aber bei der Umsetzung gerade auf ein Problem stoße.
Ich möchte auch eine Benachrichtigung bei einer schwachen Betterie realisieren. Allerdings soll diese Benachrichtigung nur alle Stunde (später vielleicht sogar in einem noch längeren Intervall) kommen. Hierzu habe ich mir aus verschiedenen Beiträgen mal diesen Code für ein Notify zusammen geklaut:
.*:[Bb]attery:.* {(if($EVENT !~ m/ok/) && (time - ReadingsVal("Batterie_Leer","comment",time)) > 3600) {
system("/usr/syno/bin/synonotify fhemBatteryWarning");
Log 3, "+++Batteriewarnung $EVENT gesendet per Synonotification für $NAME";
fhem("attr Batterie_Leer comment ".time)}}
Wenn ich das Notify nun versuchsweise triggere bekomme ich leider immer folgenden Syntaxfehler:
Batterie_check_n return value: syntax error at (eval 107054) line 1, near "(if"
syntax error at (eval 107054) line 4, near "}}"
Was überseh ich hier? Ich find den Fehler nicht. Wahrscheinlich seh ich den Wald vor lautet Bäumen nicht.
Gruß
Wolle
Hab des Rätsels Lösung dann doch noch gefunden. Wie gesagt, manchmal sieht man den Wald vor lauter Bäumen nicht. Selbstverständlich gehört die öffnende runde Klammer hinter das if und nicht vor das if.
Aus dem ReadingsVal musste ich noch ein AttrVal machen und jetzt läuft das Notify wie es soll ;D
Vielen Dank fürs Lesen.
Gruß
Wolle 8)