NEWS
RGBW LED über ColorPicker in JARVIS 3
-
Hallo,
ich habe einige RGBW-LED-Leisten verbaut und würde die Farben (und weiß) gerne über meine jarvis Installation steuern. Die Versuche über den state-key rgb führen zu keinem Erfolg. Ich sehe bei den KNX Telegrammen, dass immer nur "$11D" oder ähnliche Werte generiert werden, anstatt ein DataPointType 251.600. Es braucht für die RGBW Leisten ja auch nicht nur den Hex mit 3x255 Werten, sondern der sieht anders aus. Z.B. bei 0% rot, 100% grün, 0% blau und 10% weiß: FF 33 00 00 00 0F.
Wie kann ich jarvis dazu bekommen, dass zu senden?
Ganz lieben Dank für jeden Tipp!
VG
Alexander -
@alexander-paul
Zeig bitte den DP mit dem die Farbe gesteuert wird.
Inhalt und Objekteinstellungen -
@mcu
Bin nicht ganz sicher, was Du genau mit "DP" meinst. Das hier?
-
Was ist beim LightColorBody in den Optionen eingestellt?
-
@mcu
Vielleicht liegt da mein Fehler:
ich versuche ja nicht in einen eigenerstellten DP zu schreiben, sondern das Objekt direkt zu ändern. Da kann ich keine Objekteigenschaften bearbeiten:
-
@alexander-paul Ich wollte eigentlich den Original-DP sehen.
Hier ist es ein String den du mit der Anzeigevariante beeinflussen kannst.
https://mcuiobroker.gitbook.io/jarvis-infos/jarvis-v3/besonderheiten-v3/geraet/anzeigevarianteLightColorBody unterstützt dieses Format nicht.
Normal ist ein RGBW-Format RRGGBBWW
z.B. FF00FF0FAlso der $11D ist anscheinend ein 12-Bit (RGB444) Wert.
knx2hex und hex2knx
Den "hex"-Wert kann man in einen DP packen und dann mit LightColorBOdy ändern.function knx2Hex(knx) { const red = parseInt(knx[0], 16) * 17; const green = parseInt(knx[1], 16) * 17; const blue = parseInt(knx[2], 16) * 17; return `#${red.toString(16).padStart(2, '0')}${green.toString(16).padStart(2, '0')}${blue.toString(16).padStart(2, '0')}`.toUpperCase(); } function hex2Knx(hex) { const red = Math.round(parseInt(hex.slice(1, 3), 16) / 17).toString(16).toUpperCase(); const green = Math.round(parseInt(hex.slice(3, 5), 16) / 17).toString(16).toUpperCase(); const blue = Math.round(parseInt(hex.slice(5, 7), 16) / 17).toString(16).toUpperCase(); return '$'+ `${red}${green}${blue}`; }