FHEM > Codeschnipsel

Mail beim Tür öffenen ( aber nur eine Mail )

(1/4) > >>

Obermaster:
Hallo

mich hatte es interessiert wenn bei mir die Außentür aufgeht. Ich wollte gerne ne mail
und hab das Abhängig vom Status gemacht Open oder Close. Nur leider bekam ich so lange
ne Mail wie die Tür auf war. Auch schon mal ne halbe Stunde ( 15 Mails ).
Jetzt lasse ich mir nur noch ne Mail bei Statusänderung schicken.

Ich lege den Status in eine Globale Variable ab.  
Anlegen der Variablen:

define variable dummy

Und dann das Notify für den Fensterkontakt:

define MAILTest1 notify wz_FKT_2 {\
   my $window = ReadingsVal("wz_FKT_2","Window","");;\
   my $previous = (Value("variable"));;\
   if (($window eq "Open") && ($previous eq "Closed")) {\
   FB_mail('xxxxxxxx@@xxxxxxxx.de','wzFKT2','meldet offen')} {fhem ("set variable " . $window)};;}

Diese Prozedur überprüft ob der Aktuelle Zustand zum vorherigen Zustand unterschiedlich ist.
Es wird aber nur eine Mail beim öffnen der Tür geschickt nicht beim schließen.
danach wird der Wert der globalen Variable auf den aktuellen stand gesetzt damit keine weiter Mail
geschickt wird.

Obermaster:

ok die IDee war gut aber die Ausführung nicht so bensonders
leider hat mir diese Config die LOG Datei vollgespamt und
ich hab es nochmal abgewandelt.

Danke an Uli da ich es mit seinem Hinweis realisiert habe:

define MAILTest2 notify wz_FKT_1 {\
   if (ReadingsVal("wz_FKT_1","Window","") ne OldValue("wz_FKT_1")) {\
        FB_mail('xxxxx@@xxxxxxxx.de','FKT_2_Terassentür','meldet offen')};;}

OldValue funktioniert sehr gut

in diesem Beispiel bekommt man eine mail beim Öffnen und eine beim Schliessen
und die LOGS bleiben leer ;-)

roedert:
Das sollte sich doch auch mit dem Attribut event-on-change-reading in der Definition des Türkontakts lösen lassen....
Damit kann man bewirken dass ein Event nicht mehr bei jedem Update sondern nur noch bei einem Change ausgelöst wird.

Sonic:

Hallo Obermaster
vielen Dank für dein Codeschnipsel. Ich wollte mir das zurechtbiegen und schaffe es nicht. Würdest du mir freundlicherweise dabei helfen ?
Unten mein funktionierender Zustand. Ich bekomme eine Mail wenn eine Temperatur grösser 34 Grad erreicht ist. Leider bekommen ich viele Mails, ungefähr jede 10-15 Minuten so lange, bis die Temperatur wieder unter 34 Grad fällt.
Ich hätte gerne nur eine Mail, dies habe ich mit deinem Beitrag versucht, leider nicht geschafft.
Könntest du mir dabei helfen ?

Wäre Klasse

vielen Dank
KLAUS


define Tempalarm_high34WZ notify thermostat:measured-temp.* { \
if (ReadingsVal("thermostat","measured-temp",20) > 34) { \
FB_mail('mail.m@@online.de','Temperaturalarm_high34','text 123')}}

UliM:
Hi,
die Frage ist: Wann soll die nächste Mail eben doch versandt werden?
Frühestens nach 1 Stunde? Oder frühestens am nächsten Tag?

Der Ansatz mit OldValue prüft ja nur, welchen Wert es im letzten Zyklus gab. Für einen Tür/Fenster-Kontakt ist das geeignet. Für ein Thermometer, das zB alle 5 Minuten einmal die Werte meldet, aber nicht so sehr, denn die Werte ändern sich ja fast jedes mal.

Ich hab daher den Ansatz gewählt, zum Zeitpunkt des Mailversands einen Zeitstempel wegzuschreieben (hierfür hab ich die perl-Funktion time verwendet und das Attribut 'comment' missbraucht) und zu prüfen, wieviel Zeit seit dem letzten Versand vergangen ist.

Sähe dann in etwas so aus:

--- Code: ---define Tempalarm_high34WZ notify thermostat:measured-temp.* { \
if ( (ReadingsVal("thermostat","measured-temp",20) > 34) && ((time - ReadingsVal("thermostat","comment",time)) < 3600)  ) { \
FB_mail('mail.m@@online.de','Temperaturalarm_high34','text 123');fhem("attr thermostat comment ".time)}}
--- Ende Code ---


3600 ist die Zeitdifferenz (3600sec=1 Stunde) für die keine erneute Mail gesendet wird.
Hinweis: Der Inhalt des Attributs comment sieht etwas seltsam aus, da die perl-Funktion time den Zeitstempel liefert - dieser stellt die bereits vergangenen Sekunden seit dem 01.01.1970 dar. Nicht wundern :)

Kommst Du damit hin?

Gruß, Uli

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln