MiLight Aquarienbeleuchtung mit Sonnenauf- und Untergangssimmulation

Begonnen von Muschelpuster, 24 Mai 2015, 10:22:47

Vorheriges Thema - Nächstes Thema

Muschelpuster

Hallo zusammen,

Nachdem ich hier viele dumme Fragen gestellt habe will ich mal meine erste produktive Anwendung vorstellen. Damit verbreite ich keine ultimativen Weisheiten, aber vielleicht hilft es dem Einen oder Anderen dabei nicht bei Null anzufangen.
In der Aquaristik verbreitet sich LED-Beleuchtung immer stärker und so will man auch deren Möglichkeiten nutzen. Die 'echten' Aquarianer arbeiten da mit RGB-Streifen und mischen aus den Farben einen blauen Nachthimmel sowie Morgen- und Abendrot. Inzwischen ruft man sogar das Wetter aus der Heimatregion der Fische ab und wenn es dann z.B. in Brasilien regnet, dann wird es auch im Aquarium dunkler. Es gibt wohl sogar schon Aquarianer, die es bei Gewitter auch blitzen lassen. Dafür gibt es auch fertige Steuerungen mit vorgefertigten Programmierungen. So ein Teil (TC420) habe ich mir für knapp 30,-€ direkt beim Chinamann bestellt und es tut seinen Dienst. Preislich also im MiLight-Ramen, in Deutschland legt man da deutlich mehr für hin (wenn man es überhaupt noch bekommt). Es macht nicht nur um ein vielfaches solideren Eindruck wie ein MilightController, das Teil hat auch 5 Kanäle die völlig unabhängig voneinander ansteuerbar sind. Aber eben dezentral- zur Programmänderung muss man mit seiner Windose per USB da ran.
Ich habe bislang in unseren großen Becken nur den weißen Leuchtbalken angesteuert. Das ist schon nett, denn die Fische werden nicht mit einem Schlag geweckt. Zudem kann das Licht etwas länger laufen und die dezente Beleuchtung zum Abend passt auch gut in in unser optisches Empfinden. Gleiches sollte nun mein kleines Aufzuchtbecken via FHEM bekommen - primär als Testballon für das Große. Die Automatik sollte abschaltbar sein, da das Becken im Gästezimmer steht und unser Besuch ja nicht von dem Licht geweckt werden. Gleichzeitig sollte sie tolerant gegenüber manuellen Eingriffen sein.
Damit genug der vielen Vorworte, los geht es:
Zuerst muss natürlich ein MilightController definiert werden. Ich habe die Milight-Module genommen, mit WiFiLight funktioniert es aber genauso, denn damit habe ich getestet. Bei WifiLigth fiel es mir lediglich leichter, das WebCmd auf meine Wünsche anzupassen:#Bridge:
define MilightBridge1 MilightBridge milight-1
attr MilightBridge1 checkInterval 10
attr MilightBridge1 event-on-change-reading state
attr MilightBridge1 port 8899
attr MilightBridge1 room Maschinenraum
attr MilightBridge1 sendInterval 100

#Controller 2
define aqua_GZ_LED MilightDevice RGBW MilightBridge1 6
attr aqua_GZ_LED IODev MilightBridge1
attr aqua_GZ_LED defaultBrightness 90
attr aqua_GZ_LED devStateIcon {(MilightDevice_devStateIcon($name),"toggle")}
attr aqua_GZ_LED dimStep 4
attr aqua_GZ_LED event-on-change-reading state,transitionInProgress
attr aqua_GZ_LED group Aquarium GZ
attr aqua_GZ_LED lightSceneParamsToSave hsv
attr aqua_GZ_LED room Gästezimmer
attr aqua_GZ_LED webCmd on:off:dim
Der erste Controller ist noch im Testfeld, daher hier der 2. Controller.
Nun brauche ich noch einen Dummy, um die Automatik zu aktivieren oder zu deaktivieren:#Schalter Automatiklicht
define aqua_GZ_Automatiklicht dummy
attr aqua_GZ_Automatiklicht alias Zeitschaltuhr Aquarium
attr aqua_GZ_Automatiklicht devStateIcon an:general_an:aus aus:general_aus:an
attr aqua_GZ_Automatiklicht group Aquarium GZ
attr aqua_GZ_Automatiklicht icon hourglass
attr aqua_GZ_Automatiklicht room Gästezimmer

Und dazu kommt noch die Zeitplanung, die ich über DOIF gelöst habe:define aqua_GZ_sunrise DOIF ([+00:08:00] and [aqua_GZ_Automatiklicht:state] eq "an" and [aqua_GZ_LED:brightness] < 96 and [?06:15-15:00]) (set aqua_GZ_LED dimup 4)
attr aqua_GZ_sunrise do always
attr aqua_GZ_sunrise group Aquarium GZ
attr aqua_GZ_sunrise room Maschinenraum
define aqua_GZ_sunset DOIF ([+00:08:00] and [aqua_GZ_Automatiklicht:state] eq "an" and [aqua_GZ_LED:brightness] > 0 and [?17:30-23:59]) (set aqua_GZ_LED dimdown 4)
attr aqua_GZ_sunset do always
attr aqua_GZ_sunset group Aquarium GZ
attr aqua_GZ_sunset room Maschinenraum
Beim WifiLight-Modul entfällt im Kommando der DimStep (die 4 ganz am Ende), der wird hier im Controller über ein Attribut konfiguriert. Dieses gibt es beim MiLight-Modul zwar auch, aber irgendwie kam nicht das dabei heraus, was ich wollte...
Die Intervalle, die Schrittweite etc. muss natürlich an die jeweiligen Gegebenheiten und Wünsch angepasst werden, da bin ich auch noch etwas am Drehen. Wenn auf meinem 56W-Leuchtbalken 10% anstehen, sieht das schon gut aus, auf dem 12W-Balken ist das fast nix. Daher habe ich die Startzeit jetzt einfach weiter in die Frühe gelegt. Auch die Endleistung ist variabel. Nach einhelliger Meinung erhöht die Reduzierung um einige Prozent die Lebensdauer der LEDs deutlich. Alleine an der gemessenen Wärmeentwicklung bei 96% und 100% kann ich dem wohl zustimmen.

So, nun kann ich die Zeitschaltuhr ein- und ausschalten. Schalte ich sie irgendwann ein, dann wird die Sequenz nachgeholt, wenn es noch im Rahmen ist. Drehe ich manuell am Licht, wird das nachkorrigiert. Ich kann also morgens die Automatik ausmachen und voll aufdimmen um was am Becken zu machen, solange ich nicht vergesse die Automatik wieder zu aktivieren, geht danach alles weiter. Oder eben Abends deaktivieren und morgens etwas später aktiveren und der Sonnenaufgang wird 'nachgeholt'. Oder ich dimme beim Aktiveren gleich in etwa in die Richtung wo es jetzt sein müsste, dann läuft die Sequenz eben ab dem Wert weiter.

Und so sieht das Ganze dann aus:
(http://forum.fhem.de/index.php?action=dlattach;topic=37457.0;attach=32449;image)

Verdammt, so viel wollte ich gar nicht schreiben, aber wie eingangs schon gesagt, vielleicht hilft es ja einigen Anderen.

langatmig gedimmte Grüße
Niels

PS: Und jetzt baue ich dem LED-Balken noch einen Alias, mir ist ja gerade aufgefallen, dass das noch fehlt  8)
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Muschelpuster

#1
So ein Sch...! Das MiLigth-Modul zeigt zwar 100% brightness an, gibt aber keine 100% raus (4,5V anstelle der erwarteten 12V). Also schnell zurück zu WifiLight, das klappte im Test so schön. Und siehe da, schon stehen nicht nur 100% drin, sondern kommen auch wirklich raus. Im Gegensatz zum Auqariencomputer muss ich auch noch korrigieren, denn bei MiLight sind 96% und 100% das Gleiche. Die vorletze Dimmstufe liegt bei 92%. Das ist aber in meinem Fall nun in Ordnung, denn der systembedingte Verlust von ca. einem Volt über die Bridge bringt das Licht recht genau dahin, wo es hin soll, denn von meinem 12,4V aus dem Netzteil bleiben am Ende maximal 11,3V übrig.
Der große Balken läuft mit 24V, da sind die Systemverluste weniger relevant.

Ich bekomme auch mit WifiLight einen reinen Dim-Slider hin, doch den bekomme ich nicht mit Werten gefüllt:#Aquarium Gaestezimmer
define aqua_GZ_LED WifiLight RGBW2 bridge-V3:milight-1
attr aqua_GZ_LED alias LED-Licht
attr aqua_GZ_LED defaultColor 0,0,100
attr aqua_GZ_LED dimStep 4
attr aqua_GZ_LED group Aquarium GZ
attr aqua_GZ_LED icon message_light_intensity
attr aqua_GZ_LED room Gästezimmer,Maschinenraum
attr aqua_GZ_LED webCmd dim
attr aqua_GZ_LED widgetOverride dim:slider,0,4,100
Hat jemand eine Idee, wie ich hier nun die Werte des Readings Brightness auf dem Slider abbilden kann?
Über ein Dummy-Device und Notifys geht das, aber vielleicht geht es ja auch noch eleganter direkt im WifiLight-Objekt?
define Test dummy
attr Test setList state:slider,0,4,100
attr Test webCmd state

define aqua_GZ_dim notify aqua_GZ_LED:brightness:.* set Test state $EVENT
define aqua_GZ_dummy notify Test:state:.* set aqua_GZ_LED dim $EVENT


umgekehrte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

herrmannj

Hi

Geht. Such mal bitte, gibt schon threads drüber. Du benötigst ein User Reading was brightness auf dim setzt. Ganz easy

Muschelpuster

#3
Zitat von: herrmannj am 24 Mai 2015, 17:45:17Ganz easy
Jo, wohl wahr! Danke!
Ich habe gleich das Knob-Widget aus dem Beispiel gelassen, sieht etwas eleganter aus, auch wenn mir nicht ganz klar ist, warum darunter so viel Platz bleibt:
#Aquarium Gaestezimmer
define aqua_GZ_LED WifiLight RGBW2 bridge-V3:milight-1
attr aqua_GZ_LED alias LED-Licht
attr aqua_GZ_LED defaultColor 0,0,100
attr aqua_GZ_LED dimStep 4
attr aqua_GZ_LED group Aquarium GZ
attr aqua_GZ_LED icon message_light_intensity
attr aqua_GZ_LED room Gästezimmer,Maschinenraum
attr aqua_GZ_LED sortby 10
attr aqua_GZ_LED userReadings dim { ReadingsVal("aqua_GZ_LED","brightness",0)}
attr aqua_GZ_LED webCmd dim
attr aqua_GZ_LED widgetOverride dim:knob,min:0,max:100,step:4,width:75,thickness:.2,fgColor:#f8c649,bgcolor:#cccccc,cursor:false,anglearc:270,angleoffset:0,linecap:round


alternative Grüße
Niels

fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

Muschelpuster

Verdammt, im Test lief das alles gut, nach der produktiven Umsetzung gibt es Probleme. Erst das Leid mit dem MiLight-Modul und jetzt ist es scheinbar so, dass das DoIf immer doppelt ausgeführt wird, da in 8-er-Schritten gedimmt wird.  :'(
Wenn ich das Dim-Kommando in der Komandozeile ausführe, dann dimme ich nur um 4%.
Da der MiLight-Controller ja sowieso nicht so viele Dimmstufen kennt, ist das nicht schlimm, ich könnte das Intervall halbieren, aber ich wüsste schon gerne, warum das so ist:
#Aquarium Gaestezimmer
define aqua_GZ_LED WifiLight RGBW2 bridge-V3:milight-1
attr aqua_GZ_LED alias LED-Licht
attr aqua_GZ_LED defaultColor 0,0,100
attr aqua_GZ_LED dimStep 4
attr aqua_GZ_LED group Aquarium GZ
attr aqua_GZ_LED icon message_light_intensity
attr aqua_GZ_LED room Gästezimmer,Maschinenraum
attr aqua_GZ_LED sortby 10
attr aqua_GZ_LED userReadings dim { ReadingsVal("aqua_GZ_LED","brightness",0)}
attr aqua_GZ_LED webCmd dim
attr aqua_GZ_LED widgetOverride dim:knob,min:0,max:100,step:4,width:75,thickness:.2,fgColor:#f8c649,bgcolor:#cccccc,cursor:false,anglearc:180,angleoffset:-90,linecap:round

#Schalter Automatiklicht
define aqua_GZ_Automatiklicht dummy
attr aqua_GZ_Automatiklicht alias Zeitschaltuhr Aquarium
attr aqua_GZ_Automatiklicht devStateIcon an:general_an:aus aus:general_aus:an
attr aqua_GZ_Automatiklicht group Aquarium GZ
attr aqua_GZ_Automatiklicht icon hourglass
attr aqua_GZ_Automatiklicht room Gästezimmer

define aqua_GZ_sunrise DOIF ([+00:08:00] and [aqua_GZ_Automatiklicht:state] eq "an" and [aqua_GZ_LED:brightness] < 96 and [?06:30-16:00]) (set aqua_GZ_LED dimup)
attr aqua_GZ_sunrise do always
attr aqua_GZ_sunrise group Aquarium GZ
attr aqua_GZ_sunrise room Maschinenraum
define aqua_GZ_sunset DOIF ([+00:08:00] and [aqua_GZ_Automatiklicht:state] eq "an" and [aqua_GZ_LED:brightness] > 0 and [?18:30-23:59]) (set aqua_GZ_LED dimdown)
attr aqua_GZ_sunset do always
attr aqua_GZ_sunset group Aquarium GZ
attr aqua_GZ_sunset room Maschinenraum
Beim Posten dachte ich jetzt noch, dass das irgendwie mit dem widgetOverride zu tun hat, weil ich das ja zuletzt geändert habe. Dem ist aber leider nicht so.
Hat jemand bessere Ideen dazu?

doppelte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

herrmannj

Hallo Niels,

magst Du bitte noch mal kurz beschreiben was passieren soll ?

Um 6:15 soll das Licht langsam angehen und um 17:30 soll es langsam wieder ausgehen ?

vg
joerg

Muschelpuster

Zitat von: herrmannj am 28 Mai 2015, 07:53:20...Um 6:15 soll das Licht langsam angehen und um 17:30 soll es langsam wieder ausgehen ?...
Jo, gaaanz langsam. Und ich will ggf. noch eingreifen können.

entschleunigte Grüße
Niels
fhem @ ZBOX mit 1,6MHz Celeron, 4GB RAM & 120GB SSD mit Debian Bullseye # MiLight # Homematic via CCU3 # W&T WebIO # Rademacher DuoFern # ESPeasy # logdb@mysql # configdb@mysql # Shelly @ MQTT2 # go-eCharger mit PV-Überschussladung via DOIF

herrmannj

Hi Niels,

Nur mal so als Vorschlag, mach das doch über ein einfaches "at"

define sunup at *06:15 set aqua_GZ_LED HSV 0,100,0; set aqua_GZ_LED HSV 55,100,100 600 q; set aqua_GZ_LED HSV 55,0,20 0 q; set aqua_GZ_LED HSV 55,0,100 600 q

Mit den Farben musst Du dann so spielen das sie Deinen stripe treffen. Der Übergang von Gelb, volle Helligkeit, auf White mit 20% Helligkeit ist notwendig weil die Milights hart zwischen Farbe und White schalten. Mit Werten in etwa dieser Gegend ist der Übergang recht smooth, hängt aber vom stripe ab. Zeiten usw kannst Du ja anpassen.

Eingreifen kannst Du jederzeit indem Du einen direkten Befehl absetzt (HSV, dimup etc). Dann wird der Sonnenaufgang sofort gestoppt und vom direkten Befehl ersetzt.

vg
Joerg

reacend

Zitat von: herrmannj am 29 Mai 2015, 11:27:50
Hi Niels,

Nur mal so als Vorschlag, mach das doch über ein einfaches "at"

define sunup at *06:15 set aqua_GZ_LED HSV 0,100,0; set aqua_GZ_LED HSV 55,100,100 600 q; set aqua_GZ_LED HSV 55,0,20 0 q; set aqua_GZ_LED HSV 55,0,100 600 q

Mit den Farben musst Du dann so spielen das sie Deinen stripe treffen. Der Übergang von Gelb, volle Helligkeit, auf White mit 20% Helligkeit ist notwendig weil die Milights hart zwischen Farbe und White schalten. Mit Werten in etwa dieser Gegend ist der Übergang recht smooth, hängt aber vom stripe ab. Zeiten usw kannst Du ja anpassen.

Eingreifen kannst Du jederzeit indem Du einen direkten Befehl absetzt (HSV, dimup etc). Dann wird der Sonnenaufgang sofort gestoppt und vom direkten Befehl ersetzt.

vg
Joerg


Hey Joerg,
es wäre genial wenn du noch deinen Sonnenuntergangs-AT-Code posten würdest :)

Grüße,

herrmannj

am einfachsten wenn Du das rückwärts nimmst:
set aqua_GZ_LED HSV 55,0,100;  set aqua_GZ_LED HSV 55,0,20 600 q; set aqua_GZ_LED HSV 55,100,100 0 q; HSV 0,100,0 600 q;