Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. tint remote (Müller Licht) - xy in RGB oder HEX

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    tint remote (Müller Licht) - xy in RGB oder HEX

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      LE-R.Kelly last edited by

      Hallo,
      ich habe eine Tint dim remote control in mein System eingebunden und verzweifle gerade an der Farbausgabe. Die Fernbedienung gibt die Farbe als "colorx" und "colory" ausgegeben. Die beiden Werte bewegen sich jeweils im 10.000er Bereich.
      Ich versuche das nun irgendwie in HEX umzurechnen, komme da aber nicht weiter. Ich habe unter [[https://stackoverflow.com/questions/22894498/philips-hue-convert-xy-from-api-to-hex-or-rgb](Link Adresse)](Link Adresse) folgenden Code gefunden und als "JS-Funktion mit Ergebnis" versucht einzubinden:

      function xyBriToRgb(x, y, bri)
      {
          z = 1.0 - x - y;
      
          Y = bri / 255.0; // Brightness of lamp
          X = (Y / y) * x;
          Z = (Y / y) * z;
          r = X * 1.612 - Y * 0.203 - Z * 0.302;
          g = -X * 0.509 + Y * 1.412 + Z * 0.066;
          b = X * 0.026 - Y * 0.072 + Z * 0.962;
          r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055;
          g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055;
          b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055;
          maxValue = Math.max(r,g,b);
          r /= maxValue;
          g /= maxValue;
          b /= maxValue;
          r = r * 255;   if (r < 0) { r = 255 };
          g = g * 255;   if (g < 0) { g = 255 };
          b = b * 255;   if (b < 0) { b = 255 };
      
          r = Math.round(r).toString(16);
          g = Math.round(g).toString(16);
          b = Math.round(b).toString(16);
      
          if (r.length < 2)
              r="0"+r;        
          if (g.length < 2)
              g="0"+g;        
          if (b.length < 2)
              b="0"+r;        
          rgb = "#"+r+g+b;
      
          return rgb;             
      }
      

      bc6c6fcf-7485-4296-8d5d-70907592f4a5-image.png

      Im Blockly rechne ich den colorx und colory Wert noch durch 100.000, da das Script für HUE ist und von dort Werte mit 0,.. kommen.

      f3e29fa0-f0c8-43a1-b0d0-9d913908faaa-image.png

      Ich erhalte aber nur ein undefined, komme aber auch ehrlich gesagt mit der Debug-Funktion nicht klar.

      Daher die Frage, ob mich jemand auf die richtigen Weg bzgl. des geschilderten Fehlers briungen kann oder eine andere Idee hat, wie ich XY in HEX konvertieren kann.

      Danke

      Viele Grüße
      Ronny

      L 1 Reply Last reply Reply Quote 0
      • L
        LE-R.Kelly @LE-R.Kelly last edited by LE-R.Kelly

        @le-r-kelly

        Hab es selbst hingekriegt. Ich hatte mich nie mit den Funktionen beschäftigt. Jetzt weiß ich, dass die Syntax falsch war. Falls es jemand benötigt, anbei das funktionierende Skript:

        let z = 1.0 - x - y;
        let Y = bri / 255.0; // Brightness of lamp
        let X = (Y / y) * x;
        let Z = (Y / y) * z;
        let r = X * 1.612 - Y * 0.203 - Z * 0.302;
        let g = -X * 0.509 + Y * 1.412 + Z * 0.066;
        let b = X * 0.026 - Y * 0.072 + Z * 0.962;
            r = r <= 0.0031308 ? 12.92 * r : (1.0 + 0.055) * Math.pow(r, (1.0 / 2.4)) - 0.055;
            g = g <= 0.0031308 ? 12.92 * g : (1.0 + 0.055) * Math.pow(g, (1.0 / 2.4)) - 0.055;
            b = b <= 0.0031308 ? 12.92 * b : (1.0 + 0.055) * Math.pow(b, (1.0 / 2.4)) - 0.055;
            maxValue = Math.max(r,g,b);
            r /= maxValue;
            g /= maxValue;
            b /= maxValue;
            r = r * 255;   if (r < 0) { r = 255 };
            g = g * 255;   if (g < 0) { g = 255 };
            b = b * 255;   if (b < 0) { b = 255 };
            r = Math.round(r).toString(16);
            g = Math.round(g).toString(16);
            b = Math.round(b).toString(16);
            if (r.length < 2)
                r="0"+r;        
            if (g.length < 2)
                g="0"+g;        
            if (b.length < 2)
                b="0"+r;        
            rgb = "#"+r+g+b;
        return rgb       
        

        24788b99-5c14-421c-8cdf-690b0c0c553f-image.png

        Grüße
        Ronny

        1 Reply Last reply Reply Quote 1
        • First post
          Last post

        Support us

        ioBroker
        Community Adapters
        Donate

        893
        Online

        31.8k
        Users

        79.9k
        Topics

        1.3m
        Posts

        blockly javascript
        1
        2
        99
        Loading More Posts
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes
        Reply
        • Reply as topic
        Log in to reply
        Community
        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
        The ioBroker Community 2014-2023
        logo