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

Begonnen von Obermaster, 17 Januar 2013, 14:08:39

Vorheriges Thema - Nächstes Thema

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' (@@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' (@@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' (@@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:
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)}}


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
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Sonic

Hallo Uli,

whoaw, vielen Dank für deine Hilfe. Ich werde das gleich einbauen und dir dann umgehend berichten ob es geklappt hat.
Die Idee mit dem Zeitstempel ist sehr gut. Ich bin gespannt. Mir reicht eine Mail ca. alle 3 Stunden und werde den Sekundenwert entsprechen erhöhen.


gruss
KLAUS

Sonic


Hallo Uli,
ich bekomme beim speichern folgende Fehlermeldung:

Unknown command fhem("attr, try help

Kannst du mir helfen ?

gruss
KLAUS

UliM

Zitat von: Sonic schrieb am So, 24 März 2013 17:14Fehlermeldung:
Unknown command fhem("attr, try help

Ist meistens Effekt eines unvollständigen Klammerpaars. Bitte mal nachzählen.
Auf den ersten Blick scheint mir, dass bei der if-Bedingung eine schliessende runde Klammer fehlt.

Geht's dann?

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Sonic

Hallo Uli,
richtig, ich habe die fehlende Klammer ersetzt.
Die Fehlermeldung bleibt die selbige. HMM,, hab alles mögliche probiert. Komme nicht weiter....
Noch ein kleine Hilfe möglich ?
Heut ist doch Sonntag ;)



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' (@@online.de'),'Temperaturalarm_high34','text 123');fhem("attr thermostat comment ".time)}}

UliM

Ein Klammerfehler, in der letzuten Zeile muss mE das Semikolon escaped werden:
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)}}

=8-)
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

Sonic

Hallo Uli,
perfect.

Ich habs verstanden. Fehlermeldung ist jetzt weg.

vielen Dank
schönen Sonntag

gruss
KLAUS

Sonic

Hallo Uli, oder Forumgemeinde.
Jetzt muss ich doch bitte nochmal nach Hilfe fragen. Ich habe nach längerer Suche aufgegeben.
Der am 24.3. unten erarbeitete Code will einfach nicht wie ich will.
Das heisst, ich bekomme die Mailbenachrichtigungen zwar zuverlässig, nur scheint der Zeitstempel nicht zu laufen.
Mein Problem, ich bekomme nach wie vor alle ca. 15 Minuten (nach Meldung des FHT) eine Mail, sobald die Grenztemperaturen erreicht werden.
Konkret: der Zeitstempel unterdrückt nicht den erneuten Mailversand wie eingestellt.

vorweg, herzlichen Dank.
Klaus

Mein Code:

define Tempalarm_high27WZ notify thermostat:measured-temp.* { \
if ( (ReadingsVal("thermostat","measured-temp",20) > 27) && ((time - ReadingsVal("thermostat","comment",time)) < 7200) ) { \
FB_mail('test@@online.de' (@@online.de'),'Temperaturalarm_high27','text 123');;fhem("attr thermostat comment ".time)}}

define Tempalarm_low18WZ notify thermostat:measured-temp.* { \
if ( (ReadingsVal("thermostat","measured-temp",20) < 18) && ((time - ReadingsVal("thermostat","comment",time)) < 7200) ) { \
FB_mail('test@@online.de' (@@online.de'),'Temperaturalarm_low18','text 123');;fhem("attr thermostat comment ".time)}}



Puschel74

Hallo,

aber das macht

Zitatif ( (ReadingsVal("thermostat","measured-temp",20) > 27) && ((time - ReadingsVal("thermostat","comment",time)) < 7200) ) { \

genau das was es soll ;-)

Du prüfst ob die Temperatur > 27 ist UND der Zeitstempel < 2 Stunden, das ist er auf alle Fälle alle 15 Minuten daher die Mails.

Willst du nicht prüfen ob der Zeitstempel > 2 Stunden ist, also der letzte Mailversand älter als 2 Stunden?
Oder hab ich da was verpasst?

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Sonic

Hallo Puschel74

OHHH MANN,,, ich fasse es nicht. Natürlich hast du Recht.
Ich danke für den Tipp.

Werde gleich testen.....

gruss
KLAUS

Dixi

Hallo zusammen,

ich bin neu hier und habe in etwa das gleiche Problem! Ich logge zur Zeit Minutenwerte am Pufferspeicher! Es soll eine Email erzeugt werden wenn Temperatur <45 Grad ist aber nur alle 10 Minuten und nicht jede Minute !

Die Email kommt ist auch Richtig, aber leider jede Minute :-(

hier mein Code :

define alarmmail_heizen notify PufferU:temperature.* { \
if ( (ReadingsVal("PufferU","temperature",20)<47)) { \
DebianMail('account@gmx.de','Temperatur unterschritten','Die Temperatur im Pufferspeicher von mindestens 45C Grad wurde unterschritten, bitte nachheizen, aktuelle Temperatur '.ReadingsVal("PufferU", "temperature", "0") .' Grad');;}}


Danke Gruß Dirk

Puschel74

Hallo,

dann würde ich das Beispiel von oben mit dem Dummy nehmen und diesen alle x Minuten wieder zurück setzen lassen.

Es sollte aber evtl. auch einfacher gehen - ich liebe es aber gerne kompliziert ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.