FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: RockSteadyBeat am 21 Januar 2015, 12:41:26

Titel: Fensterkontakt *.open (RealTime)
Beitrag von: RockSteadyBeat am 21 Januar 2015, 12:41:26
Hallo fhem-Gemeinde,

ich suche nun schon länger nach einer Möglichkeit/Lösung um z.B. eine "Öffnungszeit" eines Fensterkontaktes direkt (RealTime) anzuzeigen.

HourCounter bietet mir leider nur die Möglichkeit, den Zeitstempel nach Beenden des "open"-Zustands zu beziehen und halt nicht in RealTime.

Ich würde damit gern einen geöffnetes Fenster auf meinem FrontEnd mit aktuell abgelaufener Zeit anzeigen lassen.

Hat jemand dazu eine Idee oder gibt mir einen Anstoß...?

greetz
RockSteadyBeat
Titel: Antw:Fensterkontakt *.open (RealTime)
Beitrag von: RitterSport am 21 Januar 2015, 13:02:23
Welche Fensterkontakte hast du?
Die CUL-FHTTK senden ja nicht direkt beim öffnen sondern erst turnusmäßig den Zustand alle 2 oder 3 Min
Titel: Antw:Fensterkontakt *.open (RealTime)
Beitrag von: RockSteadyBeat am 21 Januar 2015, 13:59:40
Hallo RitterSport,

ich habe von Homematic HM-SEC-SC-2 Fensterkontakte.

Ich denke das es auch egal ist wie oft sie senden, dachte das man es evtl. mit einem Notify und nem UserReading oder einem Dummy löst.
Mir fehlt da nur der Ansatz, wie.

Greetz
RockSteadyBeat
Titel: Antw:Fensterkontakt *.open (RealTime)
Beitrag von: Elektrolurch am 21 Januar 2015, 14:34:13
Hallo,

habe die CUL_FTKK. Das Modul hatte damals den Bug, das es event-on-change-reading ignorierte, deshalb habe ich jedem Fenster ein dummy zugeordnet. Mit einem notify stelle ich dann fest, ob sich der Status ändert und speichere mir bei Statusänderung die Zeit in einem zusätzlichen reading (Statuszeit) in dem dummy.

Um die Zeitdifferenz einfach in Sekunden berechnen zu können, nutze ich time().
Das sieht dann so aus:

Statusänderung:

readingsSingleUpdate($defs'{Mein_Fenster'},'StatusZeit',time(),0);

Wie lange das Fenster geöffnet oder geschlossen ist, ergibt sich dann zu:

time() - ReadingsVal('mein_Fenster','StatusZeit',0);

Kann man dann z.B. in einer readingsGroup als perl-Code aufrufen:

mein_Fenster:state,<{time()-ReadingsVal($DEVICE,'StatusZeit',0)}>

So mal ein Ansatz zum Basteln.

Elektrolurch
Titel: Antw:Fensterkontakt *.open (RealTime)
Beitrag von: RockSteadyBeat am 21 Januar 2015, 15:07:52
Hallo Elektrolurch,

ich habe mit Deinem Ansatz, vielen Dank dafür, nun mal was gebastelt.

Ein notify was mir mit time() ein "TimeStamp"-Reading in meinem Fensterkontakt beschreibt:



define ntfy_szFenster notify CUL_HM_HM_SEC_SC_2_27729D {
    my $device = $NAME;;
    my $StatusZeit = ReadingsVal("$device","TimeStamp","0");;
    if($EVENT eq "open") {
        $data{einschaltZeit} = time();;
    }
    elsif($EVENT eq "closed") {
    $data{dauer} = time()-$data{einschaltZeit};;
   
    readingsBeginUpdate($main::defs{$device});;
    readingsBulkUpdate($main::defs{$device},"TimeStamp","$data{dauer}");;
    readingsEndUpdate($main::defs{$device},1);;
    }
}


Das notify macht auch genau das was ich definiert habe, jedoch findet die Berechnung, dementsprechend auch die Anzeige des Wertes erst bei schließen des Fensters statt.

Wie könnte man nun die real ablaufende Zeit dort im Reading angezeigt bekommen?

greetz
RockSteadyBeat
Titel: Antw:Fensterkontakt *.open (RealTime)
Beitrag von: Paul am 21 Januar 2015, 17:06:35
Dann würde ich bei fensteröffnung ein at setzen, was jede Minute ausgeführt wird und die aktuelle Zeit mit der Öffnungsziet vergleicht.