Integration / Abbildung bzw. Nutzung des FS20 Hardwaretimers in fhem

Begonnen von Guest, 27 Juni 2012, 20:56:41

Vorheriges Thema - Nächstes Thema

Guest

Originally posted by: <email address deleted>

Hallo an Alle,
FS20 Schalter besitzen ja einen in die Hardware integrierten Timer (bin
nicht sicher ob alle oder nur die neueren Modelle).
Meines Wissens nach ist diese Feature in fhem nicht abgebildet. D.h. drücke
ich auf einer Fernbedienung auf "on" so bekommt das fhem mit. Aber da der
Hardware Timer nach z.B. 3 Stunden wieder ausschaltet, fhem davon aber
nichts weiss, bleibt in der Weboberfläche der "on" Status bestehen.
@Rudi: ich bitte jetzt schon um Abbitte falls ich falsch liege (mal
"on-for-timer" nicht mitgezählt). Falls nicht, ist es nicht sinnvoll das
ins FS20.pm zu integrieren?

Ich habe mir deshalb ein zusätzliches Attribut gebildet ("hw_timer") und
ein notify gebaut, welches auf die Befehle "on", "off", und "timer"
reagiert.
Drücke ich jetzt für ein FS20 Schalter im Web oder auf einer Fernbedienung
auf "on", so wird das "notiert" und nach der Zeit im fhem wieder auf "off"
gestellt (per at define).
"on": funktioniert also ähnlich wie "on-for-timer..."
"off": löscht das bei "on" erstellte at
"timer": setzt das Attribut "hw_timer" des FS20 Gerätes
Die drei Befehle funktionieren weiterhin genau wie von den Entwicklern
programiert, bekommen aber per notify Zustatzfunktionen aufgepfropft.

Falls ich nicht allzu wirr beschrieben habe, hier die Codeschnippsel:

Am Anfang der fhem.cfg gibt es bestimmt schon eine Zeile:
attr global userattr ...... , dort per Leerzeichen getrennt das hw_timer
mit anfügen

Diesen notify-Part direkt in die fhem.cfg kopieren und ein rereadcfg
ausführen:

define hwTimerNotify notify .*:on$|:off$|:timer.* {\
    my $OutString = "(Device: %NAME Action: %EVENT)";;\
    if ("%TYPE" eq "FS20") {\
        my $hwt = AttrVal("%NAME", "hw_timer", "0");;\
        my $val = "0";;\
        if ("%EVTPART0" ne "timer") {\
            CommandDelete(undef, "%NAME_timer");;\
            if (("%EVENT" eq "on") and ($hwt > 0)) {\
                LOOP: for(my $i = 0;; $i <= 12;; $i++) {\
                    for(my $j = 0;; $j <= 15;; $j++) {\
                        $val = (2**$i)*$j*0.25;;\
                        if($val >= $hwt) {\
                        if($val != $hwt) {\
                            $OutString .= sprintf " (changing timeout to
$val from $hwt)";;\
                        }\
                        last LOOP;;\
                        }\
                    }\
                }\
                my $to = sprintf("%02d:%02d:%02d", $val/3600,
($val%3600)/60, $val%60);;\
                CommandDefine(undef, "%NAME_timer at +$to setstate %NAME
off;; trigger %NAME off");;\
            }\
        } else {\
            $OutString .= sprintf " (HW-Timer wird gesetzt auf:
%EVTPART1)";;\
            {fhem ("attr %NAME hw_timer %EVTPART1")}\
        }\
    } else {\
        $OutString .= sprintf " (no FS20 Device)";;\
        }\
    sprintf "$OutString";;\
}


VG

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com