Hauptmenü

Readings und Value

Begonnen von Obermaster, 15 Januar 2013, 23:16:35

Vorheriges Thema - Nächstes Thema

Obermaster

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

Puschel74

Die Werte vorher in eine my $window und my $previous sichern und dann vergleichen?
evtl. geht ja das.
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.

Obermaster

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

Puschel74

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
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.

Obermaster

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.

Puschel74

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.
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.

jhohn

Du kannst Dir den Status in einen Dummy schreiben und den abfragen.
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Obermaster

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 ??


Obermaster

Das mit der Dummy Datei ist echt eine Überlegung wert

jhohn

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)};
}
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

korbinian

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

Obermaster


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

jhohn

Hast Du das Leerzeichen zwschen WindowDummy und " vergessen?
FHEM auf Synology Diskstation DS413j (DSM4.3), HM LAN Adapter
Steuerung für Nachtspeicheröfen:
Ladung:   HM-WDS10-TH-O, HM-LC-Sw4-DR, Weather-Modul
Gebläse: HM-CC-TC, HM-LC-SW1-FM, HM-Sec-RHS
FHEM auf FritzBox 7390 für Telefon Funktionen

Obermaster

das Du immer so kleinlich sein musst ;-)

Danke ich probier es gleich aus

UliM

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