Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deconz XY CIE Farbwahl #399

Open
ma-gu-16 opened this issue Dec 1, 2020 · 19 comments
Open

Deconz XY CIE Farbwahl #399

ma-gu-16 opened this issue Dec 1, 2020 · 19 comments
Assignees
Labels
feature 🌟 Feature request or enhancement

Comments

@ma-gu-16
Copy link

ma-gu-16 commented Dec 1, 2020

Hallo ist es möglich die folgende Farbwahl via Hueslider in Jarvis zu verwirklichen ?

image

bisher hab ich nichts dazu gefunden.

Danke.

@Zefau
Copy link
Owner

Zefau commented Dec 1, 2020

Nicht mittels xy, aber mittels hue, rgb oder hex.

@Zefau Zefau added the good first issue ℹ️ Good for newcomers label Dec 1, 2020
@ma-gu-16
Copy link
Author

ma-gu-16 commented Dec 1, 2020

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.

@Zefau
Copy link
Owner

Zefau commented Dec 2, 2020

Bitte stell mal deine Geräte- und Widget-Konfiguration bereit.

@ma-gu-16
Copy link
Author

ma-gu-16 commented Dec 2, 2020

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
                  },

@ma-gu-16
Copy link
Author

ma-gu-16 commented Dec 2, 2020

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.

@ma-gu-16 ma-gu-16 closed this as completed Dec 2, 2020
@Zefau
Copy link
Owner

Zefau commented Dec 2, 2020

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?

@ma-gu-16
Copy link
Author

ma-gu-16 commented Dec 2, 2020

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

@florian84z
Copy link

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?!

@Zefau Zefau added the foreign issue Issue of a foreign repository label Dec 7, 2020
@Zefau
Copy link
Owner

Zefau commented Dec 7, 2020

Dann scheint es am deconz Adapter zu liegen.

@ma-gu-16
Copy link
Author

Kann gut sein das der Deconz da etwas "nicht" kann. wie gesagt habe das via JS gelöst im iobroker.

@nukleuz80
Copy link

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.

@Zefau
Copy link
Owner

Zefau commented May 20, 2021

Ja, über hue-extended via .hue sollte gehen. Was funktioniert denn nicht? Hast du #431 (https://zefau.gitbook.io/jarvis-de/sonstiges/faq#farben-mit-lighthuebody-bzw-lightcolorbody-beim-hue-extended-sind-falsch) gesehen?

@nukleuz80
Copy link

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.

@nukleuz80
Copy link

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 🤷‍♂️

@nukleuz80
Copy link

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...

@uwe72
Copy link

uwe72 commented Feb 18, 2022

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

@ma-gu-16
Copy link
Author

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

@ma-gu-16
Copy link
Author

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.

@ma-gu-16 ma-gu-16 reopened this Nov 15, 2023
@ma-gu-16
Copy link
Author

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

@Zefau Zefau closed this as not planned Won't fix, can't repro, duplicate, stale Dec 30, 2023
@Zefau Zefau added feature 🌟 Feature request or enhancement and removed good first issue ℹ️ Good for newcomers foreign issue Issue of a foreign repository labels Feb 11, 2024
@Zefau Zefau reopened this Feb 11, 2024
@Zefau Zefau self-assigned this Feb 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 🌟 Feature request or enhancement
Projects
None yet
Development

No branches or pull requests

5 participants