Seite 1 von 2

Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 14:47
von burliHB
Hallo,
ich möchte meine Aquarien Stück für Stück an openHAB anbinden. Angefangen habe ich mit dem LD382 Wifi LED Controller, um die Beleuchtung zu kontrollieren. Ich habe über dem Aquarium weiße Streifen mit unterschiedlichen Farbtemperaturen und möchte damit einen Sonnenaufgang und Sonnenuntergang simulieren.

Zuerst soll also der warmweiße Kanal langsam heller werden, dann soll der kaltweiße Kanal langsam heller und der warmweiße dunkler werden. Abends soll es umgekehrt laufen.

Da ich noch blutiger Anfänger in openHAB bin tappe ich noch etwas im Dunkeln, wie ich das steuern kann. Das Binding habe ich schon installiert und ich habe den Wifi Controller als Thing hinzugefügt. Elektrisch läuft schon alles. Programmieren kann ich grundsätzlich, ich habe nur noch nicht rausgefunden, wie ich hier vorgehen muss.

Ich bin mir noch nicht ganz sicher, welche Verdrahtung besser ist. Der Controller hat ja 3 Kanäle für RGB und einen für Weiß. Ich kann jetzt zB den roten und den blauen Kanal nutzen und dann einfach die Farbe entsprechend ändern. Oder ich kann einen farbigen und den weißen Kanal verwenden und getrennt steuern

Könnt ihr mir einen kleinen Schubs in die richtige Richtung geben?

Viele Grüße
Markus

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 15:38
von udo1toni
Was die Verdrahtung betrifft, kommt es sicher darauf an, wie die Kanäle angesteuert werden können. Wie wird der Controller denn in openHAB eingebunden? MQTT? Kommst Du an die einzelnen Kanäle ran, oder musst Du eine Farbe senden, die der Controller dann in RGB umsetzt?

Ich kenne den Controller ja nicht, oft ist es aber so, dass solche Controller durchaus etwas Eigenintelligenz besitzen, also z.B. zwei Lichtszenen mit einstellbarer Zeit überblenden können. Falls Du das über den Controlle kontrollieren kannst, wäre das der beste Weg.
Sollte das nicht gehen, müsste halt eine Regel her:
zwei Items für die beiden Streifen:

Code: Alles auswählen

Dimmer Aquarium_WW "Warmweißes Licht" ...
Dimmer Aquarium_KW "Kaltweißes Licht" ...
Und der Code:

Code: Alles auswählen

var Timer tAquaLicht = null
var Number nAquaCount = 0

rule "Aquarium Sonnenaufgang"
when
    Time cron "0 0 7 * * ?" // täglich um 07:00:00 Uhr
then
    tAquaLicht?.cancel
    nAquaCount = 0
    tAquaLicht = createTimer(now.plusMillis(50),[|
        nAquaCount += 1
        if(nAquaCount < 101)
            Aquarium_WW.sendCommand((Aquarium_WW.state as Number) + 1)
        else {
            Aquarium_WW.sendCommand((Aquarium_WW.state as Number) - 1)
            Aquarium_KW.sendCommand((Aquarium_KW.state as Number) + 1)
        }
        if(nAquaCount < 201)
            tAquaLicht.reschedule(now.plusSeconds(6))
    ])
end
Die Rule wird einmalig um 7 Uhr jeden Tag ausgeführt. Innerhalb der Rule werden zunächst die Variablen initialisiert. Anschließend wird ein Timer angelegt, der auch gleich ausgeführt wird. Die kleine verzögerung von 50 Millisekunden ist ein Sicherheitspuffer, damit der ode schon komplett im Speicher liegt, wenn der Timer ausgeführt wird.
Innderhalb des Timers wird die Variable nAquaCount hochgezählt. Sofern die Variable kleiner 101 ist, wird das warmweiße Licht um einen Prozentpunkt heller geregelt. Solange der Counter unter 201 ist, wird der Timer erneut geplant, und zwar in 5 Sekunden. Damit ergibt sich ein allmähliches Aufblenden innerhalb 10 Minuten.
Wenn der Counter über 100 kommt, wird der WW-Anteil pro Durchlauf um einen Prozentpunkt abgesenkt, während der KW-Anteil nun jeweils um einen Prozentpunkt steigt.
erreicht der Counter die 201, wird der Timer nicht erneut geplant.
Die Rule für die Gegenrichtung funktioniert dann genauso, nur in umgekehrter Reihenfolge (und natürlich mit geänderter Startzeit). Du kannst Die Rule auch über Astro-Ereignisse auslösen lassen, dann könnte der Sonnenauf/Untergang quasi synchron zur Natur laufen :)

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 16:56
von burliHB
Ich bin also nicht der einzige, der die Aquarien über openHAB steuern will ;)

Ich verwende dieses Binding

https://www.openhab.org/addons/bindings/wifiled/

Ich schaue mir den Code später noch an. Will gerade ein Walstad Aquarium einrichten ;)

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 18:09
von udo1toni
Ich habe kein Aquarium :) Aber die Aufgabe, zwei Dimmer gegeneinander zu blenden, ist nicht sooo ungewöhnlich...

Was das Binding betrifft:

Mich wundert es ein wenig, dass es von vornherein zwei Dimmerkanäle für weiß gibt. Ist das vom Controller abhängig? (Das geht aus der Beschreibung für mich nicht hervor).

Ah. Gerade nochmal rein geschaut. das wäre der LD686...

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 18:13
von burliHB
Über die Astro Geschichte habe ich auch schon nachgedacht, denke aber, im Sommer wird das zu viel und im Winter zu wenig Licht.

Bei dem Treiber habe ich zwei Möglichkeiten. Entweder ich verwende den Classic Treiber, dann kann ich das Fading selbst im Code machen oder ich verwende den Fading Treiber, der das Fading dann anscheinend selbst übernimmt. Ob das lange genug eingestellt werden kann weiß ich noch nicht. Welche Variante ich verwenden kann muss ich noch ausprobieren.

Ich denke aber es wäre sinnvoll, wenn ich beide Kanäle über die RGB Farben steuere. Dann muss ich nicht alles doppelt machen

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 18:23
von udo1toni
burliHB hat geschrieben: 6. Apr 2019 18:13 Ich denke aber es wäre sinnvoll, wenn ich beide Kanäle über die RGB Farben steuere. Dann muss ich nicht alles doppelt machen
Na ja, Du musst ohnehin zwei Items anlegen, wenn Du das über die Oberfläche vielleicht auch mal manuell steuern möchtest.

openHAB verwendet intern immer HSB als Farbmodell. Du musst also im Zweifel immer rumrechnen.

Innerhalb einer Rule geht das dann so:

Code: Alles auswählen

val hsbValue = HSBType.fromRGB(redValue,greenValue,blueValue)
myColorItem.sendCommand(hsbValue)
wobei der Wertebereich für R,G,B von 0 bis 255 geht, wenn ich es richtig in Erinnerung habe.
In der Gegenrichtung funktioniert es ähnlich:

Code: Alles auswählen

val hsbValue = HSBType.fromRGB(redValue,greenValue,blueValue)
val   redValue = (myColorItem.state as HSBType).red
val  blueValue = (myColorItem.state as HSBType).blue
val greenValue = (myColorItem.state as HSBType).green
Dementsprechend müsste die o.a. Rule dann natürlich angepasst werden.

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 18:40
von burliHB
Ok, dann schaue ich mir das mal an. Danke bis hier her für die Hilfe.

Ich habe gerade festgestellt, dass die Lampen in einem zweiten Aquarium auch mit 24V laufen. Die kann ich dann mit dem gleichen Controller gleich mit steuern. So muss das sein ;)

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 18:43
von udo1toni
Super, wenn die Aquarien dicht genug beieinander stehen. Unschön ist nur die Krücke mit dem geschummelten Color Item.

Re: Zeitgesteuert Licht Dimmen

Verfasst: 6. Apr 2019 20:32
von burliHB
Naja, ein paar Meter Kabel sind es schon, steht aber im gleichen Raum. Ich denke nicht, dass sich da irgendwelche Probleme durch die Leitungskapazität ergeben. Hier steht auch noch ein zweites Aquarium. Da sitzt derzeit eine billige LED Leuchte drüber, die leider nur mit 5V läuft. Vielleicht baue ich da auch noch was mit 24V drüber. Dann habe ich den Controller voll ausgereizt ;). Muss ich nur mit den RGB Kanälen etwas spielen. Bei den beiden anderen Aquarien kann ich dann halt nur dimmen, aber nicht die Farbtemperatur ändern. Aber egal. Besser so als "hart" einschalten.

Ich bin inzwischen zumindest so weit dass ich das Licht von der Classic UI aus steuern kann. Muss mich jetzt noch ein wenig in die Scriptsprache einlesen

Re: Zeitgesteuert Licht Dimmen

Verfasst: 10. Apr 2019 14:12
von burliHB
Nach einigem Rumprobieren, Tutorial lesen und Trail and Error läuft es jetzt. Zumindest der Sonnenaufgang. Den Sonnenuntergang und eigene Anpassungen bekomme ich auch hin.

Was mich im Moment etwas stört ist die Ausfallsicherheit. Wie ist das, wenn es ein Problem wie einen Stromausfall während der Dimmer Phase gibt? Dann bleibt nach dem Neustart das Licht auf dem aktuell im Controller eingestellten Wert, bis der nächste Timer ausgeführt wird.

Ich müsste beim Start die aktuellen Ist Werte aus dem Controller auslesen und anhand von der Zeit mit entsprechenden Soll Werten vergleichen. Oder gibt es da eine andere Möglichkeit?

Ein anderes Problem ist, wenn das Licht manuell verstellt wird. Zum einen kann man es ja zB in der Paper UI oder von den Handy App aus verändert werden, zum anderen kann es ja beabsichtigt sein, dass Licht zB zum Reinigen einmal zu verstellen. Wie kann man zB ein manuelles Verstellen der Werte zB von der Paper UI aus erkennen? Gibt es einen "onChange" Event oder muss ich das manuell regelmäßig abfragen?