FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Topgun am 31 Januar 2017, 23:29:52

Titel: Beleuchtung automatisch ausschalten
Beitrag von: Topgun am 31 Januar 2017, 23:29:52
Hallo,

ich habe für die Treppenbeleuchtung einen Unterputz-Schalter (HM-LC-Sw1PBU-FM), den ich zusätzlich über Funktaster (HM-PB-2-WM55-2) schalten kann.
Die Treppenbeleuchtung möchte ich bei einem Druck auf den Schalter (egal ob Unterputz-Schalter, Funkschalter oder aus FHEM) für eine bestimmte Zeit anschalten (vermutlich set Treppenbeleuchtung on-for-timer 60).
Dazu möchte ich zusätzlich, dass wenn während der "on-for-timer"-Periode erneut der Befehl zum Licht anschalten kommt (= 2. Druck auf den Taster), das Licht für immer an bleibt (set Treppenbeleuchtung on).

Nachdem ich jetzt 3h an dem Problem geknobelt habe, gebe ich das mal an euch weiter. Vermutlich stehe ich nur auf dem Schlauch.
Titel: Antw:Beleuchtung automatisch ausschalten
Beitrag von: KernSani am 01 Februar 2017, 00:01:18
Hi,

wahrscheinlich kommen noch bessere Antworten... aber zum ersten Punkt, einen Homematic Schalter für eine bestimmte Zeit ein zu schalten, würde ich nicht über FHEM sondern direkt über die Register des HM-Schalters machen (dann funktioniert das unabhängig von FHEM) nachzulesen z.B. hier (https://forum.fhem.de/index.php?topic=35429.0) 
Zum zweiten Punkt: Ich weiß nicht ob es über die Register machbar ist, einen zweiten Tastendruck abzufangen. Meine Treppenhausbeleuchtung reagiert auf kurz und lang, kurzer Tastendruck macht Timer gesteuert, langer Tastendruck macht für immer an...

Ich hoffe das hilft erstmal....

Grüße,

Oli
Titel: Antw:Beleuchtung automatisch ausschalten
Beitrag von: Topgun am 01 Februar 2017, 11:37:13
Ob unabhängig von FHEM oder nicht ... das wäre für mich dann die Königsdisziplin. Erst mal geht es um die Funktionalität.

Das mit dem Lang und Kurz hätte ich auch gerne gemacht, aber der Unterputzaktor kennt nur on / off und kein short und long.
Daher benötige ich einen "Umweg", der mit beiden Schaltern zurecht kommt.

Und meiner Frau zu sagen, von dem Schalter aus geht es so, und von dem musst du es anders machen ... das kommt nicht gut an  ;)
Titel: Antw:Beleuchtung automatisch ausschalten
Beitrag von: Per am 01 Februar 2017, 11:49:33
Du kannst die Zeit parallel oder ausschließlich im FHEM (wait) verwalten und dort schauen, ob der wait noch aktiv ist.
define Treppenhaus DOIF ([Taster] eq "on" and [?$SELF] eq "wait") (set Treppenbeleuchtung on)
DOELSEIF ([Taster] eq "on" and [?$SELF] eq "on") (set Treppenbeleuchtung off)
DOELSEIF ([Taster] eq "on" and [?$SELF] eq "off") (set Treppenbeleuchtung on) (set Treppenbeleuchtung off)

attr Treppenhaus wait 0:0:0,60
attr Treppenhaus cmdState on:off:wait,off


(Ungetestet!)
Titel: Antw:Beleuchtung automatisch ausschalten
Beitrag von: Topgun am 01 Februar 2017, 18:11:16
Du hast mir die richtige Richtung gewiesen. 1:1 übernehmen konnte ich es nicht, das hatte nicht funktioniert.

So scheint es zu funktionieren:

defmod di_UG_Treppe_Schalter_Stufen DOIF ([UG_Treppe_Schalter_Stufen:"^on$"] and ([$SELF] ne "cmd_1" and [$SELF] ne "cmd_2")) (set UG_Treppe_Schalter_Stufen on-for-timer 180)\
\
DOELSEIF ([UG_Treppe_Schalter_Stufen:"^on$"] and [$SELF] eq "cmd_1" and [$SELF:state:sec] > 0.2) (set UG_Treppe_Schalter_Stufen on)\
\
DOELSEIF ([UG_Treppe_Schalter_Stufen] eq "off") ()\

attr di_UG_Treppe_Schalter_Stufen do always
attr di_UG_Treppe_Schalter_Stufen room doif


Wichtig für die Umsetzung: Die Logik sitzt "an der Lampe" selber, und nicht an einem Schalter. Somit muss man das Konstrukt nur einmal definieren und nicht jedes mal für jeden Schalter.
Titel: Antw:Beleuchtung automatisch ausschalten
Beitrag von: Topgun am 13 Februar 2017, 10:35:24
Noch zuverlässiger geht es mit einem internen Reading:


defmod di_UG_Treppe_Schalter_Stufen DOIF ([UG_Treppe_Schalter_Stufen:"^on$"] and [UG_Treppe_Schalter_Stufen:oldState] ne "timer" and [UG_Treppe_Schalter_Stufen:oldState] ne "on") (set UG_Treppe_Schalter_Stufen on-for-timer 300) (setreading UG_Treppe_Schalter_Stufen oldState timer)\
\
DOELSEIF ([UG_Treppe_Schalter_Stufen:"^on$"] and [UG_Treppe_Schalter_Stufen:oldState] eq "timer" and [$SELF:state:sec] > 1) (set UG_Treppe_Schalter_Stufen on) (setreading UG_Treppe_Schalter_Stufen oldState on)\
\
DOELSEIF ([UG_Treppe_Schalter_Stufen] eq "off") (setreading UG_Treppe_Schalter_Stufen oldState off)
attr di_UG_Treppe_Schalter_Stufen do always
attr di_UG_Treppe_Schalter_Stufen room doif