Hallo
ich habe einen Fensterkontakt und wie folgt definiert:
define wz_FKT_2 CUL_FHTTK 8c4fc8
attr wz_FKT_2 room Buero
define FileLog_wz_FKT_2 FileLog /var/InternerSpeicher/fhem/log/wz_FKT_2-%Y.log wz_FKT_2
attr FileLog_wz_FKT_2 logtype text
ich möchte gerne eine eMail bei geöffnetem Fenster an mich schicken
aber ich möchte nur eine Email bekommen und nicht so lange wie das Fenster offen ist immer
wieder eMails ( 30 pro Stunde )
hier meine bisherige Lösung :
define MAILTest1 notify wz_FKT_2 {if(ReadingsVal("wz_FKT_2","Window","") ne ReadingsVal("wz_FKT_2","Previous","")) {FB_mail('xxxxxxxxxx@xxxxxxx','wzFKT2','meldet offen');;}}
leider ist Previous immer "ne" zu Window
es gibt aber die Variable PREVSTATE und dieser wäre für mein define genau der richtige Wert
ist es möglich den abzufragen ???
Danke schon mal im vorraus
Gordon
Die Werte vorher in eine my $window und my $previous sichern und dann vergleichen?
evtl. geht ja das.
Danke für die Antwort
aber könntest Du mir ein Beispiel für diese Konfig geben ??
Wie schreibe ich es in eine Variable ??
Wie bekomme ich es wieder raus ??
Danke
In einer Abfrage oder einem notify am Anfang das einfügen -- Achtung! ich erstelle nur Mehrzeiler und keine Einzeiler
define MAILTest1 notify wz_FKT_2 {
my $window = (ReadingsVal("wz_FKT_2","Window","");
my $previous = (ReadingsVal("wz_FKT_2","Previous","");
if ($window ne $previous) {
FB_mail('xxxxxxxxxx@xxxxxxx','wzFKT2','meldet offen');
}
}
Ungetestet!!!
Achtung!! Zeilen sind nicht geschützt da ich grundsätzlich das DEF bearbeite und nicht die fhem.cfg
au man jetzt kommt mein unwissen wieder raus aber:
wenn ich dein Beispiel richtig lese dann macht es nichts anderes als meine Zeile
define MAILTest1 notify wz_FKT_2 {if(ReadingsVal("wz_FKT_2","Window","") ne ReadingsVal("wz_FKT_2","Previous","")) {FB_mail('xxxxxxxxxx@xxxxxxx','wzFKT2','meldet offen');;}}
und die funktioniert ja leider ;-)
was ich möchte ist mir den aktuellen Status weglegen in eine Variable und dann beim nächsten aufruf mit dem aktuellen zustand vergleichen und nur wenn der ungleich ist dann
soll eine Mail rausgeschickt werden. Es würde ja dann eine mail beim öffnen und eine beim schließen gesendet.
ich brauche eine Vatriable die den wert über die Zeit hält und ich dann immer wieder darauf zugreifen kann quasi mit jedem neuen melden eines Zustandes.
Dann brauchst du wohl eine globale Variable oder du schreibst dir den Zustand bei jedem Durchlauf in einen eigenen Dummy.
my $window und my $previous sind lokal also nur in diesem notify zum Prüfzeitpunkt gültig.
Aber das beide Codes das selbe machen kann ich mir fast nicht vorstellen.
Du schreibst das bei dir window ne previous ist.
Das ist logisch.
Aber bei mir müsste der Status von Window und Previous in den beiden Variablen landen welche dann geprüft werden.
Und wenn der Status von $Window ne $Previous ist, was bei "open" und "close" der Fall wäre, müsste deine Prüfung zuschlagen.
Nur wenn beide auf "open" oder "close" stehen dürfte die Prüfung nicht matchen.
Du kannst Dir den Status in einen Dummy schreiben und den abfragen.
Ja du hast Rechnt nur leider gibt Previoas nur aus wann der Letzte Zustandswechsel war,
das heißt sie ist so lange Closed bis das nächste Closed nach einem Open kommt.
Es gibt eine variable die den letzten Prüfstand ausgibt
nur weiß ich nicht wie ich an diese Variable dran komme.
Diese Variable wird nicht unter Readings dargestellt sondern
unter dem Punkt wo STATE steht.
Komme ich an diese Variable ran ??
Das mit der Dummy Datei ist echt eine Überlegung wert
wenn ich mich nicht täusche müsste das
Value("wz_FKT_2");
oder
{fhem ("get wz_FKT_2 param STATE")};
sein
so aus dem Kopf, open und closed gegen den entsprechenden Wert für auf und zu ersetzen, je nachdem was Deine Fenstersensoren da im STATE stehen haben:
define MAILTest1 notify wz_FKT_2 {
my $window = (Value("wz_FKT_2");
my $previous = (Value("WindowDummy");
if (($window eq "open") && ($previous eq "closed")) {
FB_mail('xxxxxxxxxx@xxxxxxx','wzFKT2','meldet offen');
}
{fhem ("set WindowDummy " . $window)};
}
Hi,
ich überwache bei mir einen HMS 100 TFK mit Google Talk Benachrichtigung.
# Tuer Alarm
define Alarm.Haustuer dummy
attr Alarm.Haustuer room Global
define Haustuer_Alarm notify TFK_Haustuer {\
use DateTime;; \
use DateTime::Duration;; \
my $currTime=DateTime->now(time_zone => 'local');; \
my $alarm=ReadingsVal("TFK_Haustuer", "switch_detect", 1);;\
my $alarmstate=ReadingsVal("Alarm.Haustuer","state","");;\
if ($alarm ne $alarmstate){\
fhem("set Alarm.Haustuer $alarm");;\
sendxmpp(" $currTime Haustuer Alarm: $alarm ");;\
Log (3, " Gtalk Message sent at $currTime , TFK_Haustuer: $alarm ");;\
} else {\
Log (3, " TFK_Haustuer: $alarm at $currTime ");;\
}\
}
Du wirst die Zeile mit "my $alarm" anpassen müssen, "switch_detect" ist spezifisch für den HMS 100 TFK.
Gib einfach mal im webcmd "get wz_FKT_2" ein, dann siehste mögliche Abfrage Werte.
Den Aufruf sendxmpp einfach mit FB_mail tauschen.
Grüße
Danke für die vielen Antworten
Das Besipiel von jhohn ist super und ich hab es auch schon angepasst da er die Syntax etwas angemeckert hat ;-)
aber die Zeile
{fhem ("set WindowDummy " . $window)};
will noch nicht die Variable heißt dann WindowDummyClose muss anstatt des . ein = in die Formel ??
Danke für die Hilfe
Hast Du das Leerzeichen zwschen WindowDummy und " vergessen?
das Du immer so kleinlich sein musst ;-)
Danke ich probier es gleich aus
Hi,
es sollte auch ohne dummy&co gehen.
Schau Dir in der commandref mal die Funktion OldValue("<device>") an, die liefert den Zustand, der cor Value("<device>") galt.
Gruß, Uli