Fensterkontakt *.open (RealTime)

Begonnen von RockSteadyBeat, 21 Januar 2015, 12:41:26

Vorheriges Thema - Nächstes Thema

RockSteadyBeat

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
fhem on OSX
HMLAN,
CUL433

RitterSport

Welche Fensterkontakte hast du?
Die CUL-FHTTK senden ja nicht direkt beim öffnen sondern erst turnusmäßig den Zustand alle 2 oder 3 Min

RockSteadyBeat

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
fhem on OSX
HMLAN,
CUL433

Elektrolurch

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
configDB und Windows befreite Zone!

RockSteadyBeat

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
fhem on OSX
HMLAN,
CUL433

Paul

Dann würde ich bei fensteröffnung ein at setzen, was jede Minute ausgeführt wird und die aktuelle Zeit mit der Öffnungsziet vergleicht.
Cubietruck, HM-USB, CUL, FS20, FHT, HUE, Keymatic