FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Thyraz am 04 Februar 2016, 20:46:25

Titel: Best Practice: Wandschalter + Bewegungsmelder zur Lichtsteuerung über DOIF?
Beitrag von: Thyraz am 04 Februar 2016, 20:46:25
Hi,

hab mich durch die DOIF Commandref gekämpft und versuche mich nun an ersten Umsetzungen.

Das Modul ist echt genial und erspart eine Menge Dummy Devices oder eine Mehrzahl an Notifies für eine einzelne Aufgabe.
War auch der Grund für mich auf DOIF umzusteigen, da ich gerade einen Aufräumwahn habe was FHEM angeht. ;)

Ich dimme eine Lampe bisher über einen Bewegungsmelder und schalte die Zeitverzögert ab.

Habe nun 2 weitere DOELSEIF eingefügt um mit dem Schalter die Lampe manuell an- und abschalten zu können.
Das funktioniert auch, allerdings muss ich mir jetzt noch irgendwie merken wie die Lampe eingeschaltet wurde: Mit Dimmer oder Manuell.
Ansonsten wird durch das Abschaltsignal des Bewegungsmelder immer das Licht zeitverzögert abgeschaltet.
Bei manuellem Einschalten soll das Licht aber anbleiben bis man es auch wieder manuell abschaltet.

Das ganze müsste dann irgendwie so aussehen:

([MotionSensor01:reportedState] eq "on")
  (set Light01 dim 50)
  (*Hier irgendeinen Merker setzen, dass das Licht über Bewegungsmelder aktiviert wurde*)
DOELSEIF (([MotionSensor01:reportedState] eq "off") and ([?*Hier einen Merker abfragen ob per Bewegungsmelder oder Schalter eingeschaltet wurde*])
  (set Light01 dim 0) ## Über wait Attribut verzögert
DOELSEIF ([WallSwitch01:basicSet] eq "on")
  (set Light01 dim 50)
  (*Hier irgendeinen Merker setzen, dass das Licht über Schalter aktiviert wurde*)
DOELSEIF ([WallSwitch01:basicSet] eq "off")
  (set Light01 dim 0)


Wo speichert ihr solche Zwischenwerte?
Könnte jetzt ja einen Dummy anlegen aber dann hab ich wieder ein unnötiges Device das nicht auf den ersten Blick mit dem DOIF zusammenhängt und die Device Liste wächst und wächst...

Hab überlegt, ob ich ein UserReading zu meiner Lampe hinzufüge nach der Art lastActivationType und da dann "Dimmer" oder "Switch" als Wert reinzuschreiben.

Gibt es da sonst irgendwelche FHEM typischen Lösungen für sowas die ich evtl. noch nicht kenne? (Globale Variablen oder was auch immer....)
Titel: Antw:Best Practice: Wandschalter + Bewegungsmelder zur Lichtsteuerung über DOIF?
Beitrag von: Damian am 04 Februar 2016, 20:59:54
Zitat von: Thyraz am 04 Februar 2016, 20:46:25
Hi,

hab mich durch die DOIF Commandref gekämpft und versuche mich nun an ersten Umsetzungen.

Das Modul ist echt genial und erspart eine Menge Dummy Devices oder eine Mehrzahl an Notifies für eine einzelne Aufgabe.
War auch der Grund für mich auf DOIF umzusteigen, da ich gerade einen Aufräumwahn habe was FHEM angeht. ;)

Ich dimme eine Lampe bisher über einen Bewegungsmelder und schalte die Zeitverzögert ab.

Habe nun 2 weitere DOELSEIF eingefügt um mit dem Schalter die Lampe manuell an- und abschalten zu können.
Das funktioniert auch, allerdings muss ich mir jetzt noch irgendwie merken wie die Lampe eingeschaltet wurde: Mit Dimmer oder Manuell.
Ansonsten wird durch das Abschaltsignal des Bewegungsmelder immer das Licht zeitverzögert abgeschaltet.
Bei manuellem Einschalten soll das Licht aber anbleiben bis man es auch wieder manuell abschaltet.

Das ganze müsste dann irgendwie so aussehen:

([MotionSensor01:reportedState] eq "on")
  (set Light01 dim 50)
  (*Hier irgendeinen Merker setzen, dass das Licht über Bewegungsmelder aktiviert wurde*)
DOELSEIF (([MotionSensor01:reportedState] eq "off") and ([?*Hier einen Merker abfragen ob per Bewegungsmelder oder Schalter eingeschaltet wurde*])
  (set Light01 dim 0) ## Über wait Attribut verzögert
DOELSEIF ([WallSwitch01:basicSet] eq "on")
  (set Light01 dim 50)
  (*Hier irgendeinen Merker setzen, dass das Licht über Schalter aktiviert wurde*)
DOELSEIF ([WallSwitch01:basicSet] eq "off")
  (set Light01 dim 0)


Wo speichert ihr solche Zwischenwerte?
Könnte jetzt ja einen Dummy anlegen aber dann hab ich wieder ein unnötiges Device das nicht auf den ersten Blick mit dem DOIF zusammenhängt und die Device Liste wächst und wächst...

Hab überlegt, ob ich ein UserReading zu meiner Lampe hinzufüge nach der Art lastActivationType und da dann "Dimmer" oder "Switch" als Wert reinzuschreiben.

Gibt es da sonst irgendwelche FHEM typischen Lösungen für sowas die ich evtl. noch nicht kenne? (Globale Variablen oder was auch immer....)

Ich würde UserRadings nehmen, da du dich auf der FHEM-Ebene befindest.  Perl-Programmierer nehmen schon mal globalen $data-Hash.

Gruß

Damian




Titel: Antw:Best Practice: Wandschalter + Bewegungsmelder zur Lichtsteuerung über DOIF?
Beitrag von: Thyraz am 04 Februar 2016, 21:10:17
Ok, vielen Dank. :)

Mir ist beim Einbauen eben noch eingefallen, dass ich das UserReading ja auch direkt dem DOIF  device zuweisen kann.
Damit ist die gesamte Schaltlogik an einem Ort bzw. in einem Device.
Hab es noch mit Twilight verknüpft, dass der Bewegungsmelder nur tagsüber greift.

Scheint auf den ersten Blick problemlos zu funktionieren. 
Titel: Antw:Best Practice: Wandschalter + Bewegungsmelder zur Lichtsteuerung über DOIF?
Beitrag von: Thyraz am 04 Februar 2016, 21:45:22
Hier noch die endgültige Lösung, evtl. findet es ja irgendwann ein Suchender:


## Bewegungssensor aktiviert + Licht aus + Draußen dunkel -> Licht an
  (([MotionSensor01:reportedState] eq "on") and ([?Light01:dimmerVal] == 0) and ([?Twilight:light] < 5))
    (set Light01 dim 50)
    (setReading doif_Light01 lastActivationType Dimmer)
## Bewegungssensor deaktiviert + wurde über Dimmer eingeschaltet -> Licht zeitverzögert aus
  DOELSEIF (([MotionSensor01:reportedState] eq "off") and ([?doif_Light01:lastActivationType] eq "Dimmer"))
    (set Light01 dim 0) ## Über wait Attribut verzögert
## Schalter ein -> Licht an
  DOELSEIF ([WallSwitch01:basicSet] eq "on")
    (set Light01 dim 50)
    (setReading doif_Light01 lastActivationType Switch)
## Schalter aus -> Licht aus
  DOELSEIF ([WallSwitch01:basicSet] eq "off")
    (set Light01 dim 0)


dazu noch ein:

attr doif_Light01 wait 0,0:150:0,0:0