Mein Spielmodul: SMARTLIGHTS

Begonnen von vbs, 15 April 2014, 21:25:19

Vorheriges Thema - Nächstes Thema

vbs

Ich habe mir ein kleines Modul gebastelt, welches dafür gedacht ist, Automatisierung der Lichtsteuerung zu vereinfachen. Das Ganze werden die meisten vermutlich recht speziell finden und wenig mit anfangen können. Aber das ist ok :)
Ich bin sowohl Perl- als auch FHEM-Neuling und daher natürlich dankbar für jegliche Vorschläge, Anregungen, Kritiken, Fragen... Evtl. kann aber auch jemand tatsächlich etwas mit dem Modul anfangen (außer mir).

Also kurz zum Hintergrund: Ich steuere bei mir die Beleuchtung in Abhängigkeit der Umgebungshelligkeit und je nachdem ob jemand zu hause ist. Dafür benutze ich dieses Modul sozusagen als "Proxy" für die Licht-Devices. Das Modul hat folgende Features:

  • einheitliches Interface für verschiedene Lichtmodule (momentan TRX_LIGHT und Homematic) und auch für Dimmer und Switches. Also es werden alle Lichter über ein einheitliches Interface angesprochen. Man gibt zB immer einen Dimmlevel an. Für echte Dimmer-Devices wird der Dimmlevel direkt gesetzt. Für Switch-Lichter kennt das Modul einen (konfigurierbaren) Schwellwert für den Dimmlevel, ab dem das Licht bzw. ausgeschaltet wird. Außerdem gibt man immer eine Ramptime an. Also wie lange soll es dauern, bis das gewünschte Dimmlevel erreicht wird. Ramptime wird bei Switch-Lichtern ignoriert.
    Man würde als "set" nicht mehr direkt auf den konkreten Licht-Devices ausführen, sondern stellvertretend auf dem (einen) smartlights-Device (siehe unten).
  • man teilt dem Modul die aktuelle Umgebungshelligkeit mit. Außerdem kann man jedem Licht-Device einen Helligkeitsschwellwert zuweisen, unter dem das Licht überhaupt erst im Automatikmodus eingeschaltet wird. Diesen Schwellwert kann man entweder einem Device direkt oder einem Raum zuweisen. Man stellt zB ein, dass im Flur das Licht unterhalb von Umgebungshelligkeit 3000 Lux und im Wohnzimmer unter 2000 Lux. Und man kann sagen, dass zB speziell die Vitrinenbeleuchtung bereits bei 3500 Lux eingeschaltet werden soll.
    Über eine Hysteresefunktion wird verhindert, dass das Licht zwischen "an" und "aus" hin- und herspringt, wenn es nahe des Schwellwerts ist. Default ist 10%. Also bei einem Schwellwert von 2500, wird das Licht oberhalb von 2750 aus- und unterhalb von 2250 eingeschaltet.
  • Modul speichert einen AUTO_STATE in allen Licht-Devices, welche den Zustand speichert, in dem der Automatikmodus des Gerät zuletzt versetzt hat. Das ist dazu gedacht, dass man manuell in die Automatik eingreifen kann und der Automatikmodus "weiß", dass er den entsprechenden Automatikwert schon gesetzt an. Ein Beispiel: fhem fragt zyklisch die Umgebungshelligkeit ab und wenn der Wert unter einem Schwellwert ist, dann wird das Licht eingeschaltet. Wenn nun der Benutzer das Licht manuell wieder ausschaltet, so wird verhindert, dass die Automatik das Licht beim nächsten Intervall doch wieder einschaltet (da sie sich in AUTO_STATE gemerkt hat, dass das Licht gemäß Automatik bereits eingeschaltet wurde)
  • es wird verhindert, dass set-Befehle nochmal ausgeführt werden, wenn das Gerät sich bereits in diesem Zustand befindet.
  • toggle-Funktion, die ein (oder mehrere) Licht(er) umschaltet. Also ein -> aus, aus -> ein. Wenn mehrere Lichter (oder eine structure) angegeben wurden, dann wird auf "aus" getogglet, wenn mindestens ein Licht noch an ist.
  • es werden bei allen Funktionen auch structures unterstützt und (hoffentlich) korrekt behandelt

Wie man es benutzt (an Beispielen):
Also erstmal wie gewohnt, das Device anlegen (man braucht nur genau eins):
define sl SMARTLIGHTS

Um nun ein Licht zu steuern:
set sl set [device] [dimLevel] [rampTime]
zB:
set sl set wz_licht1 75 5

Es werden auch devspecs unterstützt und auch structures. Also sowas geht auch:
set sl set wz_licht1,structures_alleLichter,bad_licht3 75 5

Die Helligkeitsschwellwerte für Räume und Devices werden in den Attributen twilightRooms und twilightDevices gespeichert. Und zwar in der Form "<RaumOderDev>=<Helligkeitswert>,..."
Also zum Beispiel:
Wohnzimmer=2500,Flur=2500,Schlafzimmer=2500

Zum einfachen Hinzufügen eines Devices in die Liste, kann man auch set verwenden:
set sl twilightDevThresh wz_licht1 3000

Und so speziell für einen Raum:
set sl twilightRoomThresh wohnzimmer 2500

Sobald ein Helligkeitsschwellwert für ein Raum bzw. ein Device gesetzt ist, wird das beim "set" berücksichtigt. Also nur wenn die Umgebungshelligkeit unter dem Schwellwert für das Device liegt, dann wird das Licht auch eingeschaltet (es wird dabei jedoch noch der Hysterese-Wert in Prozent subtrahiert beim Ausschalten bzw. addiert beim Einschalten). Ansonsten wird der Befehl ignoriert. Device-Schwellwerte haben dabei Vorrang vor Raum-Schwellwerten, falls für ein Devices beides gesetzt ist.

So teilt man dem Modul den aktuellen Helligkeitswert mit (zB im notify des Helligkeitssensors):
set sl brightness 3674

So kann ein Licht "getoggelt" werden:
set sl toggle wz_licht1

So kann man den Dimm-Schwellwert konfigurieren, ab dem Switch-Lichter eingeschaltet werden:
attr sl dimSwitchLevel 65

Der Hysterewert (in Prozent) für den Helligkeitsautomatik wird so eingestellt:
attr sl twilightHysteresisPct 12

Oje, ist ganz schön viel Text geworden... :/ Ich hoffe, ich konnte es jetzt einigermaßen rüberbringen. Ansonsten einfach fragen, falls jemand Interesse hat.