WW,CW LED Panel ansteuern, WLED, Athom, CCT RGBW Strip Controller Warmweiß Colortemp

Begonnen von Torxgewinde, 09 April 2023, 10:22:34

Vorheriges Thema - Nächstes Thema

Torxgewinde

Hallo,
Ich wollte ein LED Panel ansteuern, dass warmweiße und kaltweiße LEDs hat (CCT LED Panel 120x60cm 24V 60W Rahmen weiss).

Elektrisch wird aus einem 24V Netzteil (Mean Well HLG-120H-24A LED Netzteil 120W 24V 5A IP65 Schaltnetzteil CV) der Ausgang mit einem LED-Strip-Controller (WLED RGBW Light Strip Controller) verbunden. Vom LED-Controller werden nur zwei Kanäle genutzt, nämlich "W" und "B", VCC wird mit dem Pluspol V+ vom Panel verbunden. Der LED-Strip-Controller ist direkt mit WLED geflasht, man muss also nichts extra machen außer den LED Strip Controller einzurichten und zu verbinden.

Da der Controller allerdings nur RGBW Kanäle bietet, sind die warmweißen LEDs auf dem Kanal "W" und die kaltweißen LEDs des LED-Panels auf dem "B" Kanal. Die Kanäle "R" und "G" sind ungenutzt in meinem Fall und können weitere Aufgaben übernehmen, oder einfach ungenutzt bleiben.

WLED wird ins WLAN gebracht, die Firmware aktualisiert (ESP02 firmware) und MQTT eingerichtet. Bei den WLED-Settings --> LED-Preferences sollte man die Gamma-Korrektur für White und RGB beide abschalten, scheinbar macht das Panel es bereits intern selbst und gemischtes Weiß ist dann auch optisch ziemlich gleich hell zu 100% Kaltweiß (=CW) oder auch 100% Warmweiß (=WW). Bei gemischtem Weiß und einer Helligkeit von weniger als 10 (aus dem Bereich 0-255), flackert das LED-Panel ein wenig. Man sollte also IMHO bei sehr geringen Helligkeiten möglichst auf 100% CW oder WW gehen. Die Settings in WLED für CCT habe ich ausprobiert, aber die Ergebnisse waren nicht zufriedenstellend für mich - deswegen wird der WLED-Controller hier im RGBW Modus betrieben und er weiß nicht wirklich welche Farbe da gemischt wird.

Das Template für ein MQTT device brachte mich schonmal in die richtige Richtung, aber da eben nicht der Controller als RGBW controller genutzt wird, sondern für CW und WW LEDs musste ich ein wenig mit den Farbtemperaturen und Berechnungen anpassen, dies ist der eigentliche Grund für diesen Post.

Vor allem die Funktionen zum umrechnen der Farbtemperatur in Kanalwerte und RGB Werte und zurück waren anzupassen. Als Farbtemperatur habe ich dem Datenblatt 6500 und 2700 Kelvin entnommen. Die Werte sind ggf. auf andere Panels anzupassen! Auch war nicht direkt offensichtlich, dass Color::ct2rgb ein Array von RGB Werten zurückgibt, da half ein Blick in die Quelltexte von FHEM color.pm. Das DevStateIcon passt die Farbe an die Farbtemperatur an und zeigt an wenn der Controller offline ist.

Hier die Device-Definition zum nachvollziehen, bzw. kopieren:

defmod LEDPanel.device MQTT2_DEVICE
attr LEDPanel.device alias LED Panel
attr LEDPanel.device devStateIcon {\
    if (ReadingsVal($name,'LWT','offline') eq 'offline') {\
        '.*:message_attention@red';;\
    } else {\
        Color::devStateIcon($name,'rgb','ct_as_rgb','brightness','state')\
    }\
}
attr LEDPanel.device devicetopic myRoom/ledpanel
attr LEDPanel.device model wled_controller
attr LEDPanel.device readingList $DEVICETOPIC/status:.* LWT\
$DEVICETOPIC/g:.* brightness\
$DEVICETOPIC/g:.* {$EVENT ? {state => 'on'} : {state => 'off'}}\
$DEVICETOPIC/c:.* { my @val = $EVENT =~ /^#([0-9A-F]{2}).*([0-9A-F]{2})$/;; my $cw = hex("0x".$val[1]);; return {rgb => substr($EVENT,1), ww => hex("0x".$val[0]), cw => $cw, ct => int($cw*(6500-2700)/255+2700)}}\
$DEVICETOPIC/v:.* {FHEM::attrT_WLED_Utils::WLED_get($NAME,$EVENT)}
attr LEDPanel.device room my-Zimmer
attr LEDPanel.device setList on:noArg $DEVICETOPIC ON\
off:noArg $DEVICETOPIC OFF\
toggle:noArg $DEVICETOPIC T\
ct:colorpicker,CT,2700,10,6500 { my $ct=$EVTPART1;; my $cw=($ct-2700)*255/(6500-2700);; my $ww=255-$cw;; my $ret=sprintf("$DEVICETOPIC/col #%02X0000%02X", $ww, $cw);; return $ret;;}\
brightness:colorpicker,BRI,0,1,255 $DEVICETOPIC/api A=$EVTPART1\
dimup:noArg $DEVICETOPIC/api A=~10\
dimdown:noArg $DEVICETOPIC/api A=~-10
attr LEDPanel.device userReadings ct_as_rgb {\
    #convert colortemperature to RGB-Hex-String without leading #\
    my @rgb = Color::ct2rgb( ReadingsVal($NAME, "ct", "2700"));;\
    my $ret = sprintf("%02X%02X%02X", int($rgb[0]), int($rgb[1]), int($rgb[2]));;\
    return $ret;;\
}
attr LEDPanel.device webCmd ct:brightness:toggle
Du darfst diesen Dateianhang nicht ansehen.