Open ma-gu-16 opened 3 years ago
Nicht mittels xy
, aber mittels hue
, rgb
oder hex
.
Hi Zefau, danke für die Rückmeldung.
Scheint nicht zu funktionieren, HEX und RGB gibt es nicht lediglich HUE, aber selbst wenn ich im iobroker diesen Wert ändere passiert nix.
Es klappt nur via diesem XY Wert. in der VIS habe ich den Colorpicker HUE.
Es handelt sich um eine IKEA RGB Bulb.
Danke dir.
Bitte stell mal deine Geräte- und Widget-Konfiguration bereit.
Gerät
"affe_f43bd": {
"id": "affe_f43bd",
"name": "Affe",
"function": "light",
"states": {
"power": {
"state": {
"node": "deconz.0.lights.000d6ffffe1caf1a.on"
},
"action": "deconz.0.lights.000d6ffffe1caf1a.on",
"label": "an / aus",
"bodyElement": null
},
"level": {
"state": {
"node": "deconz.0.lights.000d6ffffe1caf1a.level"
},
"action": "deconz.0.lights.000d6ffffe1caf1a.level",
"label": "Dimmer",
"icon": {}
},
"hue": {
"state": {
"node": "deconz.0.lights.000d6ffffe1caf1a.hue"
},
"action": "deconz.0.lights.000d6ffffe1caf1a.hue",
"label": "Farbe",
"actionElement": null
}
},
"options": {},
"attributes": {
"imported": true,
"manufacturer": {
"name": "Deconz",
"namespace": "deconz"
},
"_created": 1606824431693,
"_updated": 1606864161626
}
},
Layout
{
"moduleConfig": {},
"devices": [
{
"type": "device",
"deviceId": "affe_f43bd",
"bodyStateKey": null,
"actionType": "action",
"actionElement": "SwitchAction",
"primaryStateKey": "power"
}
],
"module": "StateList",
"title": "Ambiente",
"icon": "floor-lamp-variant",
"id": "ca9f85ed-5e78-4026-aa41-42f217d558ad",
"index": 0
},
Von meiner Seite erledigt.
Ich habe alternativ diverse Javascripte zur Umrechnung HSL zu RGB, HSL zu HEX, HUE zu RGB und RGB zu HSV (Homematic Farbbereich bis 0-199)
Ich benutze nun überall den schicken HUE Slider im Jarvis und schreibe es in eine Variable im iobroker und onchange rechne ich die Farbe um und setzte sie beim entsprechenden Aktor.
Also für deconz sollte es auch im default funktionieren. Welchen Wert liefert denn deconz.0.lights.000d6ffffe1caf1a.hue
?
Wenn du das Widget mit dem Datenpunkt im BodyState + HueBody nimmst, sollte es gehen?
Deconz klappt nicht, evtl liegt es auch am Adapter , aber bisher konnte ich mit keiner Version den HUE wert via iobroker setzten. Die Farben haben sich nur geändert via XY Wert.
Kann dir nicht sagen wieso. Habe auch den Deconz auf die aktuellste Repo Version aktualisiert. Kein Erfolg.
Nunja mit meiner JS Übersetzung klappt es ganz gut und im Grunde flüssig.
Danke dir dennoch. Grüsse
Deconz klappt nicht, evtl liegt es auch am Adapter , aber bisher konnte ich mit keiner Version den HUE wert via iobroker setzten. Die Farben haben sich nur geändert via XY Wert.
Kann dir nicht sagen wieso. Habe auch den Deconz auf die aktuellste Repo Version aktualisiert. Kein Erfolg.
Nunja mit meiner JS Übersetzung klappt es ganz gut und im Grunde flüssig.
Danke dir dennoch. Grüsse
Ich habe das gleiche Problem, allerdings mit den aktuellen Zigbee Lampen vom Lidl. Dank des HUE-Extended Adapters kann ich die Lampen nun auch farblich steuern.
Der Adapter ist ebenfalls von @Zefau !
Vielleicht klappt es bei dir ja auch?!
Dann scheint es am deconz Adapter zu liegen.
Kann gut sein das der Deconz da etwas "nicht" kann. wie gesagt habe das via JS gelöst im iobroker.
Habe eine Frage dazu: Funktioniert das Steuern über den HUE-Extended Adapter des Datenpunkts HUE?
Bei mir geht das über DeConz auch nur über xy...
Danke für Info.
Ja, über hue-extended via .hue
sollte gehen. Was funktioniert denn nicht? Hast du https://github.com/Zefau/ioBroker.jarvis/issues/431 (https://zefau.gitbook.io/jarvis-de/sonstiges/faq#farben-mit-lighthuebody-bzw-lightcolorbody-beim-hue-extended-sind-falsch) gesehen?
Ok, das werde ich gleich mal testen. Habe eine Ikea Tradfri RGB Lampe über DeConz eingebunden. Die Farben lassen sich aber lediglich über xy steuern und nicht über HUE. Also die Datenpunkte...
So bin ich auf diesen Eintrag gestoßen beim googeln :)
Ich nutze Jarvis und Lovelace und schaffe es nicht die Farben über die ‚Colorpicker‘ zu ändern.
Also, ich habe nun den Extended-Hue Adapter installiert - mit DeConz/Phoscon erfolgreich verbunden und erhalte alle Lichter.
In Jarvis habe ich nun entsprechend power, Level und Hue mit den DP gefüllt. Power und Level funktionieren nur leider immer noch nicht Hue - also die Farbwahl...
Soll ich hier weiter schreiben oder ein neues Issue erstellen?
Nun kommt auch noch ein unknown error 🤷♂️
Ok, sorry - hatte die Einstellung verwenden von xy anstelle von hue nicht gesehen. Nach Aktivierung klappt das nun auch.
Vielen Dank für die tollen Adapter! 👍 Weiter so...
Kann gut sein das der Deconz da etwas "nicht" kann. wie gesagt habe das via JS gelöst im iobroker.
Hallo, kannst Du mir das Script geben? Ich suche ein Script welches mit XY nach Hue/Sat und umgekehrt umwandelt
Kann gut sein das der Deconz da etwas "nicht" kann. wie gesagt habe das via JS gelöst im iobroker.
Hallo, kannst Du mir das Script geben? Ich suche ein Script welches mit XY nach Hue/Sat und umgekehrt umwandelt
Findest du zu genüge im Web. Ich verwende folgendes:
function hexToRgb(hex) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}
function hslToRgb (h, s, l) {
// Achromatic
if (s === 0) return [l, l, l]
h /= 360
var q = l < 0.5 ? l * (1 + s) : l + s - l * s
var p = 2 * l - q
return [
Math.round(hueToRgb(p, q, h + 1/3) * 255),
Math.round(hueToRgb(p, q, h) * 255),
Math.round(hueToRgb(p, q, h - 1/3) * 255)
]
}
/**
* Helpers
*/
function hueToRgb (p, q, t) {
if (t < 0) t += 1
if (t > 1) t -= 1
if (t < 1/6) return p + (q - p) * 6 * t
if (t < 1/2) return q
if (t < 2/3) return p + (q - p) * (2/3 - t) * 6
return p
}
function hslToHex(h, s, l) {
l /= 100;
const a = s * Math.min(l, 1 - l) / 100;
const f = n => {
const k = (n + h / 30) % 12;
const color = l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
return Math.round(255 * color).toString(16).padStart(2, '0'); // convert to Hex and prefix "0" if needed
};
return `#${f(0)}${f(8)}${f(4)}`;
}
/**
* Umwandeln der RGB-Werte in ein Farbwert des HSV-Farbraum
* RGB Werte: 0-255, 0-255, 0-255
* H Wert: 0-360°
* Homematic H Wert: 0-199
*/
function RGBtoHSV($R, $G, $B)
{
let R = ($R / 255);
let G = ($G / 255);
let B = ($B / 255);
let maxRGB = Math.max(R, G, B);
let minRGB = Math.min(R, G, B);
let chroma = maxRGB - minRGB;
let h = 0;
if (chroma == 0)
return 0;
if (R == minRGB){
h = 3 - ((G - B) / chroma);
}
else if (B == minRGB){
h = 1 - ((R - G) / chroma);
}
else{
h = 5 - ((B - R) / chroma);
}
let Hue = (60 * h);
let HomematicHue = (Hue/1.8);
if (HomematicHue == 200){
HomematicHue = 199;
}
return HomematicHue;
}
/**
* Converts CIE color space to RGB color space
* @param {Number} x
* @param {Number} y
* @param {Number} brightness - Ranges from 1 to 254
* @return {Array} Array that contains the color values for red, green and blue
*/
function cie_to_rgb(x, y, brightness)
{
//Set to maximum brightness if no custom value was given (Not the slick ECMAScript 6 way for compatibility reasons)
if (brightness === undefined) {
brightness = 254;
}
var z = 1.0 - x - y;
var Y = (brightness / 254).toFixed(2);
var X = (Y / y) * x;
var Z = (Y / y) * z;
//Convert to RGB using Wide RGB D65 conversion
var red = X * 1.656492 - Y * 0.354851 - Z * 0.255038;
var green = -X * 0.707196 + Y * 1.655397 + Z * 0.036152;
var blue = X * 0.051713 - Y * 0.121364 + Z * 1.011530;
//If red, green or blue is larger than 1.0 set it back to the maximum of 1.0
if (red > blue && red > green && red > 1.0) {
green = green / red;
blue = blue / red;
red = 1.0;
}
else if (green > blue && green > red && green > 1.0) {
red = red / green;
blue = blue / green;
green = 1.0;
}
else if (blue > red && blue > green && blue > 1.0) {
red = red / blue;
green = green / blue;
blue = 1.0;
}
//Reverse gamma correction
red = red <= 0.0031308 ? 12.92 * red : (1.0 + 0.055) * Math.pow(red, (1.0 / 2.4)) - 0.055;
green = green <= 0.0031308 ? 12.92 * green : (1.0 + 0.055) * Math.pow(green, (1.0 / 2.4)) - 0.055;
blue = blue <= 0.0031308 ? 12.92 * blue : (1.0 + 0.055) * Math.pow(blue, (1.0 / 2.4)) - 0.055;
//Convert normalized decimal to decimal
red = Math.round(red * 255);
green = Math.round(green * 255);
blue = Math.round(blue * 255);
if (isNaN(red))
red = 0;
if (isNaN(green))
green = 0;
if (isNaN(blue))
blue = 0;
return [red, green, blue];
}
/**
* Converts RGB color space to CIE color space
* @param {Number} red
* @param {Number} green
* @param {Number} blue
* @return {Array} Array that contains the CIE color values for x and y
*/
function rgb_to_cie(red, green, blue)
{
//Apply a gamma correction to the RGB values, which makes the color more vivid and more the like the color displayed on the screen of your device
var red = (red > 0.04045) ? Math.pow((red + 0.055) / (1.0 + 0.055), 2.4) : (red / 12.92);
var green = (green > 0.04045) ? Math.pow((green + 0.055) / (1.0 + 0.055), 2.4) : (green / 12.92);
var blue = (blue > 0.04045) ? Math.pow((blue + 0.055) / (1.0 + 0.055), 2.4) : (blue / 12.92);
//RGB values to XYZ using the Wide RGB D65 conversion formula
var X = red * 0.664511 + green * 0.154324 + blue * 0.162028;
var Y = red * 0.283881 + green * 0.668433 + blue * 0.047685;
var Z = red * 0.000088 + green * 0.072310 + blue * 0.986039;
//Calculate the xy values from the XYZ values
var x = (X / (X + Y + Z)).toFixed(4);
var y = (Y / (X + Y + Z)).toFixed(4);
if (isNaN(x))
x = 0;
if (isNaN(y))
y = 0;
return [x, y];
}
Gruss
bisher wurde das noch nicht implementiert. ich hab heute ein neuen zigbee rgbw controller angelernt via deconz. nach wie vor kann man nur die xy werte setzten. über die umwegen mit DP und SCript geht das, aber ich denke das sollte in jarvis mit richtigen color picker möglich sein.
vielleicht das Ticket als Feature markieren ? Deconz/Zigbee scheint ja doch viele zu nutzen, ich weiss nicht wie die das machen ;) Vielleicht mag einer seine Scripts zur Verfügung stellen. Gruss
Hallo ist es möglich die folgende Farbwahl via Hueslider in Jarvis zu verwirklichen ?
bisher hab ich nichts dazu gefunden.
Danke.