NEWS
RGBW Farbe berechnen
-
Ich habe mal wieder eine Denkblockade.
Hintergrund:
Wir haben user Bad renoviert.
Jetzt habe ich in der Decke DualWhite Spots, die über den Tagesverlauf ihre Farbe von 2700K über 5700K wieder auf 2700K ändern. läuft eigentlich ganz gut, mit der HCL Funktion des HmIP RGBW war ich nicht ganz zufrieden.Zusätzlich haben wir noch eine Nische mit einem RGBW Streifen in der Wand.
Anscheinend hat EQ-3 es auch da nicht geschafft RGB und W getrennt zu steuern, so dass man dem Weiss mit ca. 2700K noch RGB mit einem höheren Blauanteil zumischen kann um eine neutralweiße oder gar kaltweiße Farbe zu erhalten.
gehe ich auf dem Colorpicker ein wenig Richtung blau scheint weiss ganz auszugehen und der Streifen wird massiv dunkler.Jetzt versuche ich es über die 4-Kanal Ansteuerung von RGB + WW.
Das klappt auch leidlich.
Meine Herausforderung liegt jetzt daran die Decke mit der Nische zu synchronisieren, so dass beides den annähernd gleichen Farbton bei annähernd konstanter Helligkeit des RGBW Streifens haben.
Mir ist klar, dass dabei der Streifen nicht auf 100% Maximalhelligkeit laufen kann, da der Blau-, ggf. auch Rotanteil des Streifens die maximale Helligkeit beeinflussen werden.
mein erster Versuch

dient eigentlich nur der Vorbereitung der möglichen variablen Anteile.
Erste Hürde:
wie berechne ich aus dem Farbwert der Decke (2700K bis 5700K) die Zusammensetzung der RGB Anteile
(wobei das Weiß aus RGB erschwerend eher Kaltweiß und dann noch mit einem lila stich ist) -
Ich habe mal wieder eine Denkblockade.
Hintergrund:
Wir haben user Bad renoviert.
Jetzt habe ich in der Decke DualWhite Spots, die über den Tagesverlauf ihre Farbe von 2700K über 5700K wieder auf 2700K ändern. läuft eigentlich ganz gut, mit der HCL Funktion des HmIP RGBW war ich nicht ganz zufrieden.Zusätzlich haben wir noch eine Nische mit einem RGBW Streifen in der Wand.
Anscheinend hat EQ-3 es auch da nicht geschafft RGB und W getrennt zu steuern, so dass man dem Weiss mit ca. 2700K noch RGB mit einem höheren Blauanteil zumischen kann um eine neutralweiße oder gar kaltweiße Farbe zu erhalten.
gehe ich auf dem Colorpicker ein wenig Richtung blau scheint weiss ganz auszugehen und der Streifen wird massiv dunkler.Jetzt versuche ich es über die 4-Kanal Ansteuerung von RGB + WW.
Das klappt auch leidlich.
Meine Herausforderung liegt jetzt daran die Decke mit der Nische zu synchronisieren, so dass beides den annähernd gleichen Farbton bei annähernd konstanter Helligkeit des RGBW Streifens haben.
Mir ist klar, dass dabei der Streifen nicht auf 100% Maximalhelligkeit laufen kann, da der Blau-, ggf. auch Rotanteil des Streifens die maximale Helligkeit beeinflussen werden.
mein erster Versuch

dient eigentlich nur der Vorbereitung der möglichen variablen Anteile.
Erste Hürde:
wie berechne ich aus dem Farbwert der Decke (2700K bis 5700K) die Zusammensetzung der RGB Anteile
(wobei das Weiß aus RGB erschwerend eher Kaltweiß und dann noch mit einem lila stich ist)Das hat die ki ungeprüft ausgegeben. Allerdings wurde ich noch nach weitern Informationen gefragt. Was ich so interpretiere, das selbst mit dieser Formel uU nicht das gewünschte Ergebnis herauskommt.
Kelvin Farbe RGB Ergebnis 1800 K Kerzenlicht (255, 147, 41) 2700 K Warmweiß (255, 169, 87) 4000 K Neutralweiß (255, 194, 135) 6500 K Tageslicht (255, 249, 253) 10000 K Bläulich (206, 226, 255) Wenn du mir sagst: Ob du RGBW, RGBWW, RGB+CCT, WS2812, PWM-LEDs, … verwendest In welchem Farbraum oder Controller du das einsetzen willst (z. B. ioBroker, WLED, HomeKit, Zigbee) Ob du eine Variante mit Helligkeitskurve oder Tint-Shift brauchst … dann erstelle ich dir eine optimierte Kelvin-→-RGB-Engine, exakt abgestimmt auf deine Hardware.function kelvinToRgb(tempK) { let T = tempK; // Step 1: CCT → xy let x, y; if (T < 4000) { x = -0.2661239e9 / (T*T*T) - 0.2343580e6 / (T*T) + 0.8776956e3 / T + 0.179910; } else { x = -3.0258469e9 / (T*T*T) + 2.1070379e6 / (T*T) + 0.2226347e3 / T + 0.240390; } y = -3.0 * x * x + 2.87 * x - 0.275; // Step 2: xy → XYZ let Y = 1.0; let X = (Y / y) * x; let Z = (Y / y) * (1 - x - y); // Step 3: XYZ → Linear RGB let r = 3.2406*X - 1.5372*Y - 0.4986*Z; let g = -0.9689*X + 1.8758*Y + 0.0415*Z; let b = 0.0557*X - 0.2040*Y + 1.0570*Z; // Clamp negative r = Math.max(0, r); g = Math.max(0, g); b = Math.max(0, b); // Step 4: Gamma correction function correct(c) { return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1/2.4) - 0.055; } // Step 5: Scale to 0–255 return { r: Math.round(correct(r) * 255), g: Math.round(correct(g) * 255), b: Math.round(correct(b) * 255) }; }Wahrscheinlich gibt es bei npm noch ganz tolle Bibliotheken, die das bis zum Exzess können
-
Das hat die ki ungeprüft ausgegeben. Allerdings wurde ich noch nach weitern Informationen gefragt. Was ich so interpretiere, das selbst mit dieser Formel uU nicht das gewünschte Ergebnis herauskommt.
Kelvin Farbe RGB Ergebnis 1800 K Kerzenlicht (255, 147, 41) 2700 K Warmweiß (255, 169, 87) 4000 K Neutralweiß (255, 194, 135) 6500 K Tageslicht (255, 249, 253) 10000 K Bläulich (206, 226, 255) Wenn du mir sagst: Ob du RGBW, RGBWW, RGB+CCT, WS2812, PWM-LEDs, … verwendest In welchem Farbraum oder Controller du das einsetzen willst (z. B. ioBroker, WLED, HomeKit, Zigbee) Ob du eine Variante mit Helligkeitskurve oder Tint-Shift brauchst … dann erstelle ich dir eine optimierte Kelvin-→-RGB-Engine, exakt abgestimmt auf deine Hardware.function kelvinToRgb(tempK) { let T = tempK; // Step 1: CCT → xy let x, y; if (T < 4000) { x = -0.2661239e9 / (T*T*T) - 0.2343580e6 / (T*T) + 0.8776956e3 / T + 0.179910; } else { x = -3.0258469e9 / (T*T*T) + 2.1070379e6 / (T*T) + 0.2226347e3 / T + 0.240390; } y = -3.0 * x * x + 2.87 * x - 0.275; // Step 2: xy → XYZ let Y = 1.0; let X = (Y / y) * x; let Z = (Y / y) * (1 - x - y); // Step 3: XYZ → Linear RGB let r = 3.2406*X - 1.5372*Y - 0.4986*Z; let g = -0.9689*X + 1.8758*Y + 0.0415*Z; let b = 0.0557*X - 0.2040*Y + 1.0570*Z; // Clamp negative r = Math.max(0, r); g = Math.max(0, g); b = Math.max(0, b); // Step 4: Gamma correction function correct(c) { return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1/2.4) - 0.055; } // Step 5: Scale to 0–255 return { r: Math.round(correct(r) * 255), g: Math.round(correct(g) * 255), b: Math.round(correct(b) * 255) }; }Wahrscheinlich gibt es bei npm noch ganz tolle Bibliotheken, die das bis zum Exzess können
Super!
Danke! Das ist ein Anfang.@OliverIO sagte in RGBW Farbe berechnen:
Ob du RGBW, RGBWW, RGB+CCT, WS2812, PWM-LEDs, … verwendest
@OliverIO sagte in RGBW Farbe berechnen:
In welchem Farbraum oder Controller du das einsetzen willst (z. B. ioBroker, WLED, HomeKit, Zigbee)
äääh :thinking_face:
Das sollte unerheblich srin, wenn ich R, G, B, WW einzeln ansteuere.
Das fertige von Homematic ist ja das Problem@OliverIO sagte in RGBW Farbe berechnen:
Ob du eine Variante mit Helligkeitskurve
das kommt später on top 😉
@OliverIO sagte in RGBW Farbe berechnen:
Wahrscheinlich gibt es bei npm noch ganz tolle Bibliotheken, die das bis zum Exzess können.
Will ich aus verschiedenen Gründen gar nicht
...
und das JS muss ich erstmal in Blockly umdenken. -
Super!
Danke! Das ist ein Anfang.@OliverIO sagte in RGBW Farbe berechnen:
Ob du RGBW, RGBWW, RGB+CCT, WS2812, PWM-LEDs, … verwendest
@OliverIO sagte in RGBW Farbe berechnen:
In welchem Farbraum oder Controller du das einsetzen willst (z. B. ioBroker, WLED, HomeKit, Zigbee)
äääh :thinking_face:
Das sollte unerheblich srin, wenn ich R, G, B, WW einzeln ansteuere.
Das fertige von Homematic ist ja das Problem@OliverIO sagte in RGBW Farbe berechnen:
Ob du eine Variante mit Helligkeitskurve
das kommt später on top 😉
@OliverIO sagte in RGBW Farbe berechnen:
Wahrscheinlich gibt es bei npm noch ganz tolle Bibliotheken, die das bis zum Exzess können.
Will ich aus verschiedenen Gründen gar nicht
...
und das JS muss ich erstmal in Blockly umdenken. -
@Homoran sagte in RGBW Farbe berechnen:
und das JS muss ich erstmal in Blockly umdenken
ich würde das in einen funktionsblock packen
@OliverIO sagte in RGBW Farbe berechnen:
ich würde das in einen funktionsblock packen
auch ne Möglichkeit!
für mich aber nur die allerletzte.
Ich will es ja nachvollziehen können -
@OliverIO sagte in RGBW Farbe berechnen:
ich würde das in einen funktionsblock packen
auch ne Möglichkeit!
für mich aber nur die allerletzte.
Ich will es ja nachvollziehen können -
Super!
Danke! Das ist ein Anfang.@OliverIO sagte in RGBW Farbe berechnen:
Ob du RGBW, RGBWW, RGB+CCT, WS2812, PWM-LEDs, … verwendest
@OliverIO sagte in RGBW Farbe berechnen:
In welchem Farbraum oder Controller du das einsetzen willst (z. B. ioBroker, WLED, HomeKit, Zigbee)
äääh :thinking_face:
Das sollte unerheblich srin, wenn ich R, G, B, WW einzeln ansteuere.
Das fertige von Homematic ist ja das Problem@OliverIO sagte in RGBW Farbe berechnen:
Ob du eine Variante mit Helligkeitskurve
das kommt später on top 😉
@OliverIO sagte in RGBW Farbe berechnen:
Wahrscheinlich gibt es bei npm noch ganz tolle Bibliotheken, die das bis zum Exzess können.
Will ich aus verschiedenen Gründen gar nicht
...
und das JS muss ich erstmal in Blockly umdenken. -
@Homoran sagte: erstmal in Blockly umdenken.
Ich habe mal diese Funktion nach Blockly umgesetzt, vereinfacht für den Bereich von 1900 K bis 6600 K.

Gesteuert wird maximale Helligkeit.
@paul53 Super!
ich hätte es sogar noch mehr vereinfacht: mit einer linearen Formel. wäre dann aber wahrscheinlich schiefgegangen.
Dass es eine Formel direkt für Kelvin gibt "vereinfacht" die Sache natürlich.
Dann werd ich mal...
Danke!
-
@paul53 Super!
ich hätte es sogar noch mehr vereinfacht: mit einer linearen Formel. wäre dann aber wahrscheinlich schiefgegangen.
Dass es eine Formel direkt für Kelvin gibt "vereinfacht" die Sache natürlich.
Dann werd ich mal...
Danke!
-
Mann, Paul 😉
ich komme noch nicht mal dazu Version #1 einzutippen, da hast du schon die extended Version
DANKE
(Im Moment zu viel administratives im Forum los) -
@Homoran sagte: Dann werd ich mal...
Mit variabler Helligkeit:

Welche Farbtemperatur hat die weiße LED?
@paul53 sagte in RGBW Farbe berechnen:
Welche Farbtemperatur hat die weiße LED?
geschätzte 2700K
Doch bevor du v3 aus dem Hut zauberst..hab jetzt mal gebastelt:
ich nehme an, dass die 0...255 die üblichen RGB Steuerungen repräsentieren sollen.Leider arbeite der HmIP RGB mit stinknormalen Prozenten von 0-100

ich habe versucht das Skript darauf anzupassen

sollten die Faktoren auch betroffen sein, hab ich diese nicht geändert.Das Ergebnis des debug-Bausteins

und in der Realität

wobei der automatische Weissabgleich hier alles deutlich schlimmer darstelltSORRY für die bisher fehlenden Informationen und RiesenDank bis hierhin.
-
Um bei Weiß die gleiche Farbtemperatur zu haben, brauchst du einen LED-Streifen der sowohl Kaltweiße als auch Warmweiße LEDs hat. Über die Farbtemperatur mischt dann der Controller die beiden richtig zusammen. Es gibt auch nur wenige Controller (ich habe noch keine gefunden), die zusätzlich zur Farbtemperatur noch RGB mischen können. Ich steuere dafür meinen RGBWW-Steifen mit zwei Controllern an (Weiß und RGB getrennt). So kann man dann alles zusammen mischen wie man möchte. Um mit einem RGBW-Streifen die gleiche Farbtemperatur zu bekommen wie mit einem rein weißen Streifen muss man einiges probieren. Ob das nur mit rechnen geht, bezweifle ich.
-
@paul53 sagte in RGBW Farbe berechnen:
Welche Farbtemperatur hat die weiße LED?
geschätzte 2700K
Doch bevor du v3 aus dem Hut zauberst..hab jetzt mal gebastelt:
ich nehme an, dass die 0...255 die üblichen RGB Steuerungen repräsentieren sollen.Leider arbeite der HmIP RGB mit stinknormalen Prozenten von 0-100

ich habe versucht das Skript darauf anzupassen

sollten die Faktoren auch betroffen sein, hab ich diese nicht geändert.Das Ergebnis des debug-Bausteins

und in der Realität

wobei der automatische Weissabgleich hier alles deutlich schlimmer darstelltSORRY für die bisher fehlenden Informationen und RiesenDank bis hierhin.
@Homoran sagte: HmIP RGB mit stinknormalen Prozenten von 0-100
Die Formeln sind für den Wertebereich bis 255 ausgelegt. Um den HmIP-Bereich zu berücksichtigen, dividiere einfach den Wert des Level-DP (0...100) durch 255:

Beachte, dass bei "blue" der Logarithmus von temp - 10 gebildet wird!
-
Um bei Weiß die gleiche Farbtemperatur zu haben, brauchst du einen LED-Streifen der sowohl Kaltweiße als auch Warmweiße LEDs hat. Über die Farbtemperatur mischt dann der Controller die beiden richtig zusammen. Es gibt auch nur wenige Controller (ich habe noch keine gefunden), die zusätzlich zur Farbtemperatur noch RGB mischen können. Ich steuere dafür meinen RGBWW-Steifen mit zwei Controllern an (Weiß und RGB getrennt). So kann man dann alles zusammen mischen wie man möchte. Um mit einem RGBW-Streifen die gleiche Farbtemperatur zu bekommen wie mit einem rein weißen Streifen muss man einiges probieren. Ob das nur mit rechnen geht, bezweifle ich.
@Dr.-Bakterius sagte in RGBW Farbe berechnen:
brauchst du einen LED-Streifen der sowohl Kaltweiße als auch Warmweiße LEDs hat.
nicht ganz!
manuell bekomme ich es ja halbwegs hin, indem ich blau zumische.
Allerdings muss ich dann rot und grün etwas weniger zugeben wenn ich RGB und WW nitzen will um ausreichend Helligkeit beim "neutralweiss" zu bekommen.Das ist der Hintergrund dieser Diskussion
-
@Dr.-Bakterius sagte in RGBW Farbe berechnen:
brauchst du einen LED-Streifen der sowohl Kaltweiße als auch Warmweiße LEDs hat.
nicht ganz!
manuell bekomme ich es ja halbwegs hin, indem ich blau zumische.
Allerdings muss ich dann rot und grün etwas weniger zugeben wenn ich RGB und WW nitzen will um ausreichend Helligkeit beim "neutralweiss" zu bekommen.Das ist der Hintergrund dieser Diskussion
@Homoran sagte in RGBW Farbe berechnen:
nicht ganz!
manuell bekomme ich es ja halbwegs hin, indem ich blau zumische.Und das wird immer mehr schlecht als recht funktionieren.
-
@Homoran sagte: HmIP RGB mit stinknormalen Prozenten von 0-100
Die Formeln sind für den Wertebereich bis 255 ausgelegt. Um den HmIP-Bereich zu berücksichtigen, dividiere einfach den Wert des Level-DP (0...100) durch 255:

Beachte, dass bei "blue" der Logarithmus von temp - 10 gebildet wird!
@paul53 sagte in RGBW Farbe berechnen:
dividiere einfach den Wert des Level-DP (0...100) durch 255:
und in der steuereDP trotzdem bis 255 begrenzen?
@paul53 sagte in RGBW Farbe berechnen:
Beachte, dass bei "blue" der Logarithmus von temp - 10 gebildet wird!
Danke! my fault
-
@paul53 sagte in RGBW Farbe berechnen:
dividiere einfach den Wert des Level-DP (0...100) durch 255:
und in der steuereDP trotzdem bis 255 begrenzen?
@paul53 sagte in RGBW Farbe berechnen:
Beachte, dass bei "blue" der Logarithmus von temp - 10 gebildet wird!
Danke! my fault
-
@Homoran sagte: und in der steuereDP trotzdem bis 255 begrenzen?
Ja, das ist der gültige Wertebereich der Variablen.
@paul53 da klemmt's bei mir.
Level: 1...100; warum denn durch 255 teilen?
(klappt übrigens auch nicht, nur wenn ich den Level z.B. auf 240 stelle.@Dr.-Bakterius sagte in RGBW Farbe berechnen:
Und das wird immer mehr schlecht als recht funktionieren.
das ist mir leider bewusst.
-
@paul53 da klemmt's bei mir.
Level: 1...100; warum denn durch 255 teilen?
(klappt übrigens auch nicht, nur wenn ich den Level z.B. auf 240 stelle.@Dr.-Bakterius sagte in RGBW Farbe berechnen:
Und das wird immer mehr schlecht als recht funktionieren.
das ist mir leider bewusst.
-
@Homoran sagte: warum denn durch 255 teilen?
Weil anschließend mit 0...255 multipliziert wird.
@paul53 sagte in RGBW Farbe berechnen:
Weil anschließend mit 0...255 multipliziert wird.
aah!
da hab ich teilweise 100 drin!