NEWS
[gelöst] Farbe aus R/G/B rechnet falsch
-
Hallo!
Ich habe mir eine Aquariumbeleuchtung mit RGBCCT-LED-Streifen gebaut. Zu unterschiedlichen Tageszeiten sollen bestimmte RGB Farben und Warm- bzw. Kaltweiß dargestellt werden.
Dazu habe ich mir mit Zigbee2MQTT die Farben und Helligkeiten so eingestellt wie ich sie haben möchte und die Werte in mein Skript übernommen.
So kann man praktisch die Farbmischung in RGB einstellen. Um die Farbe an dem Controller zu ändern, benötige ich aber den Hex-Wert. Dafür gibt es doch in Blockly den Baustein 'Farbe aus...". Man übergibt die RGB-Werte in Dezimal und erhält als Ergebnis den Hex-Wert.
Sollte man denken! Die Farben die mein Skript produzierte unterschieden sich teil enorm von der manuell eingestellten Farbe. Also habe ich mir mal die Ergebnisse angesehen und mit den errechneten Hex-Werten verglichen und habe festgestellt, dass der Block falsch umrechnet.
Ich habe mir also selbst eine kleine Javascript-Funktion geschrieben und die Ausgabe verglichen:
function prependZeroIfSingleChar(text) { return text.length === 1 ? "0" + text : text; } RED = prependZeroIfSingleChar(R.toString(16)); GREEN = prependZeroIfSingleChar(G.toString(16)); BLUE = prependZeroIfSingleChar(B.toString(16)); return "#"+RED+GREEN+BLUE;return 0;
Das Ergebnis sieht dann so aus:

Hat das schon jemand beobachtet oder kann es nachvollziehen? Was läuft da falsch?
-
So richtig werde ich aus dem was du gepostet hast nicht schlau
Poste doch mal bitte folgendes:
- Debug Output vom Ergebnis von deiner Funktion RGB2HEX mit festen R/G/B Werten (nicht variablen, einfach direkt eingeklickt)
- Debug Output vom Baustein 'Farbe aus rgb' mit den gleichen festen R/G/B Werten (wieder nicht aus variablen, sondern direkt mit Zahlen)
Ansonsten würde ich deine Funktion noch etwa anpassen:
function prependZeroIfSingleChar(text) { return text.length === 1 ? "0" + text : text; } const RED = prependZeroIfSingleChar(R.toString(16)); const GREEN = prependZeroIfSingleChar(G.toString(16)); const BLUE = prependZeroIfSingleChar(B.toString(16)); return "#"+RED+GREEN+BLUE;return 0;A.
Nachtrag: Schau Dir den Baustein
Farbe aus rgbbitte auch mal genau an. ggf. erwartet dieser die farbwerte in %, nicht 0-255A.
-
So richtig werde ich aus dem was du gepostet hast nicht schlau
Poste doch mal bitte folgendes:
- Debug Output vom Ergebnis von deiner Funktion RGB2HEX mit festen R/G/B Werten (nicht variablen, einfach direkt eingeklickt)
- Debug Output vom Baustein 'Farbe aus rgb' mit den gleichen festen R/G/B Werten (wieder nicht aus variablen, sondern direkt mit Zahlen)
Ansonsten würde ich deine Funktion noch etwa anpassen:
function prependZeroIfSingleChar(text) { return text.length === 1 ? "0" + text : text; } const RED = prependZeroIfSingleChar(R.toString(16)); const GREEN = prependZeroIfSingleChar(G.toString(16)); const BLUE = prependZeroIfSingleChar(B.toString(16)); return "#"+RED+GREEN+BLUE;return 0;A.
Nachtrag: Schau Dir den Baustein
Farbe aus rgbbitte auch mal genau an. ggf. erwartet dieser die farbwerte in %, nicht 0-255A.
@Asgothian sagte in Farbe aus R/G/B rechnet falsch:
ggf. erwartet dieser die farbwerte in %, nicht 0-255
Danke, das war's.