Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Probleme beim Wandeln von RGB zu HEX

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Probleme beim Wandeln von RGB zu HEX

Scheduled Pinned Locked Moved Skripten / Logik
18 Posts 2 Posters 2.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    rom.wagner80
    wrote on last edited by
    #1

    Hallo zusammen,

    ich habe ein kleines Problem bei der Umwandlung von separaten R, G und B werten in eine zusammenhängende Hexadezimale Zahl mit dem Format #FFFFFF. Mein Script sieht folgendermaßen aus :

    var R = getState('javascript.0.Geraete.YAHKA.r1').val;
    var G = getState('javascript.0.Geraete.YAHKA.g1').val;
    var B = getState('javascript.0.Geraete.YAHKA.b1').val;
    
    function toHex(number) {
        if (number < 0) number = 0xFFFFFFFF + number + 1;
        var n = number.toString(16).toUpperCase();
        if (n.length == 1) {
            n = '0' + n;
        }
        return n;
    }
    
    function calculateColor() {
    
        log('#' + toHex(R) + toHex(G) + toHex(B));
        setState('yeelight.0.stripe_0x0000000004cdb76b.rgb', '#' + toHex(R) + toHex(G) + toHex(B));
    }
    
    calculateColor(); // Skriptstart
    
    on('javascript.0.Geraete.YAHKA.r1', function(dp) {
       R = dp.state.val;
       calculateColor();
    });
    on('javascript.0.Geraete.YAHKA.g1', function(dp) {
       G = dp.state.val;
       calculateColor();
    });
    on('javascript.0.Geraete.YAHKA.b1', function(dp) {
       B = dp.state.val;
       calculateColor();
    });
    
    

    Die Logs sind im Screenshot zu sehen.

    Obwohl die Werte für R, G und B fix sind, ändert sich noch der Hexadezimale Wert… Hat jemand eine Idee woran das liegt und was ich dagegen tun kann?

    Ich vermute mal, dass aus diesem Grund auch die SyntaxError im yeelight Adapter kommen.

    für eure Hilfe wär ich echt dankbar 🙂

    schönen Gruß
    2476_errorlog.jpeg

    1 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      Die RGB-Werte bleiben konstant ? Erweitere mal das Log

          log('R: ' + R + ' G: '+ G + ' B: ' + B + ' #' + toHex(R) + toHex(G) + toHex(B));
      
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • R Offline
        R Offline
        rom.wagner80
        wrote on last edited by
        #3

        Ui… die Werte R, G und B scheinen sich doch zu ändern (s. Screenshot) Die Quelle für diese Werte ist der YAHKA-Adapter

        Der Quellcode sieht folgendermaßen aus:

        var h = getState("javascript.0.Geraete.YAHKA.hue").val / 360; 
        var s = getState("javascript.0.Geraete.YAHKA.saturation").val / 100;
        var v = getState("javascript.0.Geraete.YAHKA.dimmer").val / 100;
        
        function HSVtoRGB() {
            var r, g, b, i, f, p, q, t;
            i = Math.floor(h * 6);
            f = h * 6 - i;
            p = v * (1 - s);
            q = v * (1 - f * s);
            t = v * (1 - (1 - f) * s);
            switch (i % 6) {
                case 0: r = v, g = t, b = p; break;
                case 1: r = q, g = v, b = p; break;
                case 2: r = p, g = v, b = t; break;
                case 3: r = p, g = q, b = v; break;
                case 4: r = t, g = p, b = v; break;
                case 5: r = v, g = p, b = q; break;
            }
        
        setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
        setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
        setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));     
        
        } // Ende der Funktion
        
        HSVtoRGB();  // Aufruf bei Skriptstart 
        
        on("javascript.0.Geraete.YAHKA.hue", function(dp) {
           h = dp.state.val / 360;
           HSVtoRGB();  // Aufruf bei Änderung von hue
        });
        on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
           s = dp.state.val / 100;
           HSVtoRGB();  // Aufruf bei Änderung von saturation
        });
        on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
           v = dp.state.val / 100;
           HSVtoRGB();  // Aufruf bei Änderung von dimmer
        });
        

        Die Objekte, die durch setState erzeugt werden (und die in der Wandlung von RGB zu HEX ja auch genutzt werden) zeigen allerdings (optisch) keine Änderung
        2476_errorlog_1.jpeg

        1 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          Das Skript RGB zu Hex funktioniert wie es soll. Logge mal im Quellskript in der Funktion HSVtoRGB() die Werte h, s und v.

          function HSVtoRGB() {
              log('h: ' + h + ' s: ' + s + ' v: ' + v);
          
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Reply Last reply
          0
          • R Offline
            R Offline
            rom.wagner80
            wrote on last edited by
            #5

            @paul53:

            Das Skript RGB zu Hex funktioniert wie es soll. Logge mal im Quellskript in der Funktion HSVtoRGB() die Werte h, s und v.

            function HSVtoRGB() {
                log('h: ' + h + ' s: ' + s + ' v: ' + v);
            
            ```` `  
            

            Die gefühlten zehn Stellen hinterm Komma machen mir ein wenig sorgen. Ansonsten ist das eine Fließende Funktion, da ich ja mit dem Finger über den Bildschirm streiche (s. Bild). Allerdings sollte der Letzte ausgegebene Wert ja auch die zuletzt Angefahrene Farbe sein, oder ?

            Log im Screenshot, Quellcode dazu hier :

            var h = getState("javascript.0.Geraete.YAHKA.hue").val / 360; 
            var s = getState("javascript.0.Geraete.YAHKA.saturation").val / 100;
            var v = getState("javascript.0.Geraete.YAHKA.dimmer").val / 100;
            
            function HSVtoRGB() {
                 log('h: ' + h + ' s: ' + s + ' v: ' + v);
                var r, g, b, i, f, p, q, t;
                i = Math.floor(h * 6);
                f = h * 6 - i;
                p = v * (1 - s);
                q = v * (1 - f * s);
                t = v * (1 - (1 - f) * s);
                switch (i % 6) {
                    case 0: r = v, g = t, b = p; break;
                    case 1: r = q, g = v, b = p; break;
                    case 2: r = p, g = v, b = t; break;
                    case 3: r = p, g = q, b = v; break;
                    case 4: r = t, g = p, b = v; break;
                    case 5: r = v, g = p, b = q; break;
                }
            
            setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
            setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
            setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));     
            
            } // Ende der Funktion
            
            HSVtoRGB();  // Aufruf bei Skriptstart 
            
            on("javascript.0.Geraete.YAHKA.hue", function(dp) {
               h = dp.state.val / 360;
               HSVtoRGB();  // Aufruf bei Änderung von hue
            });
            on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
               s = dp.state.val / 100;
               HSVtoRGB();  // Aufruf bei Änderung von saturation
            });
            on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
               v = dp.state.val / 100;
               HSVtoRGB();  // Aufruf bei Änderung von dimmer
            });
            

            2476_errorlog_2.jpeg
            2476_img_bc9853b9a5f5-1.jpeg

            1 Reply Last reply
            0
            • R Offline
              R Offline
              rom.wagner80
              wrote on last edited by
              #6

              Hab noch was versucht :

              Es gibt im HomeKit die Möglichkeit, Farben direkt anzufahren. da sollte also eigentlich nur ein Wert raus kommen.

              Dem ist aber nicht so wie man im Log sieht…
              2476_img_e2e2b677e6cf-1.jpeg
              2476_errorlog_3.jpeg

              1 Reply Last reply
              0
              • paul53P Offline
                paul53P Offline
                paul53
                wrote on last edited by
                #7

                Stabilisieren sich die Werte nach einer bestimmten Zeit ? Dann kann man mit Verzögerung arbeiten.

                var timer = null;
                
                function HSVtoRGB() {
                   if(timer) clearTimeout(timer);
                   timer = setTimeout(HSV2RGB, 1000); // seit 1 s keine Änderung mehr
                }
                
                HSVtoRGB();  // Aufruf bei Skriptstart
                
                

                Die ursprüngliche Funktion HSVtoRGB() umbenennen in HSV2RGB() !

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Reply Last reply
                0
                • R Offline
                  R Offline
                  rom.wagner80
                  wrote on last edited by
                  #8

                  Meinst du so ?

                  var h = getState("javascript.0.Geraete.YAHKA.hue").val / 360; 
                  var s = getState("javascript.0.Geraete.YAHKA.saturation").val / 100;
                  var v = getState("javascript.0.Geraete.YAHKA.dimmer").val / 100;
                  
                  function HSV2RGB() {
                       log('h: ' + h + ' s: ' + s + ' v: ' + v);
                      var r, g, b, i, f, p, q, t;
                      i = Math.floor(h * 6);
                      f = h * 6 - i;
                      p = v * (1 - s);
                      q = v * (1 - f * s);
                      t = v * (1 - (1 - f) * s);
                      switch (i % 6) {
                          case 0: r = v, g = t, b = p; break;
                          case 1: r = q, g = v, b = p; break;
                          case 2: r = p, g = v, b = t; break;
                          case 3: r = p, g = q, b = v; break;
                          case 4: r = t, g = p, b = v; break;
                          case 5: r = v, g = p, b = q; break;
                      }
                  
                  setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
                  setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
                  setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));     
                  
                  } // Ende der Funktion
                  var timer = null;
                  
                  function HSVtoRGB() {
                     if(timer) clearTimeout(timer);
                     timer = setTimeout(HSV2RGB, 1000); // seit 1 s keine Änderung mehr
                  }
                  
                  HSV2RGB();  // Aufruf bei Skriptstart 
                  
                  on("javascript.0.Geraete.YAHKA.hue", function(dp) {
                     h = dp.state.val / 360;
                     HSV2RGB();  // Aufruf bei Änderung von hue
                  });
                  on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
                     s = dp.state.val / 100;
                     HSV2RGB();  // Aufruf bei Änderung von saturation
                  });
                  on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
                     v = dp.state.val / 100;
                     HSV2RGB();  // Aufruf bei Änderung von dimmer
                  });
                  

                  Das scheint nicht zu wirken (s. Log)
                  2476_errorlog_4.jpeg

                  1 Reply Last reply
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    wrote on last edited by
                    #9

                    Du solltest nur den Namen der Funktion selbst, nicht deren Aufruf ändern (wollte Dir unnötigen Aufwand ersparen). Richtig:

                    HSVtoRGB();  // Aufruf bei Skriptstart 
                    
                    on("javascript.0.Geraete.YAHKA.hue", function(dp) {
                       h = dp.state.val / 360;
                       HSVtoRGB();  // Aufruf bei Änderung von hue
                    });
                    on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
                       s = dp.state.val / 100;
                       HSVtoRGB();  // Aufruf bei Änderung von saturation
                    });
                    on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
                       v = dp.state.val / 100;
                       HSVtoRGB();  // Aufruf bei Änderung von dimmer
                    });
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Reply Last reply
                    0
                    • R Offline
                      R Offline
                      rom.wagner80
                      wrote on last edited by
                      #10

                      @paul53:

                      Du solltest nur den Namen der Funktion selbst, nicht deren Aufruf ändern (wollte Dir unnötigen Aufwand ersparen). Richtig:

                      HSVtoRGB();  // Aufruf bei Skriptstart 
                      
                      on("javascript.0.Geraete.YAHKA.hue", function(dp) {
                         h = dp.state.val / 360;
                         HSVtoRGB();  // Aufruf bei Änderung von hue
                      });
                      on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
                         s = dp.state.val / 100;
                         HSVtoRGB();  // Aufruf bei Änderung von saturation
                      });
                      on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
                         v = dp.state.val / 100;
                         HSVtoRGB();  // Aufruf bei Änderung von dimmer
                      });
                      ```` `  
                      

                      Okay. Das wird morgen getestet.

                      Vielen Dank erstmal und gute Nacht [emoji42]

                      Gesendet von iPhone mit Tapatalk

                      1 Reply Last reply
                      0
                      • R Offline
                        R Offline
                        rom.wagner80
                        wrote on last edited by
                        #11

                        @paul53:

                        Du solltest nur den Namen der Funktion selbst, nicht deren Aufruf ändern (wollte Dir unnötigen Aufwand ersparen). Richtig:

                        HSVtoRGB();  // Aufruf bei Skriptstart 
                        
                        on("javascript.0.Geraete.YAHKA.hue", function(dp) {
                           h = dp.state.val / 360;
                           HSVtoRGB();  // Aufruf bei Änderung von hue
                        });
                        on("javascript.0.Geraete.YAHKA.saturation", function(dp) {
                           s = dp.state.val / 100;
                           HSVtoRGB();  // Aufruf bei Änderung von saturation
                        });
                        on("javascript.0.Geraete.YAHKA.dimmer", function(dp) {
                           v = dp.state.val / 100;
                           HSVtoRGB();  // Aufruf bei Änderung von dimmer
                        });
                        ```` `  
                        

                        Nach erfolgter Änderung bekomme ich nur noch ein Ergebnis aus der Funktion HSVtoRGB. Allerdings immer noch zwei Ergebnisse bei der Funktion RGB zu Hex…Logs werde ich nachher noch nachreichen, wenn ich zuhause bin.

                        Gesendet von iPhone mit Tapatalk

                        1 Reply Last reply
                        0
                        • R Offline
                          R Offline
                          rom.wagner80
                          wrote on last edited by
                          #12

                          Hier jetzt mal der Log es sind sogar drei Ergebnisse aus der RGB zu Hex Funktion
                          2476_errorlog_5.jpeg

                          1 Reply Last reply
                          0
                          • paul53P Offline
                            paul53P Offline
                            paul53
                            wrote on last edited by
                            #13

                            @rom.wagner80:

                            Hier jetzt mal der Log es sind sogar drei Ergebnisse aus der RGB zu Hex Funktion `
                            Es sind 3 setState() die <u>nacheinander</u> ausgeführt werden. Erst der letzte setState() sorgt für das endgültige Ergebnis (255, 21, 0).

                            EDIT: Wenn beide Wandlungen in <u>einem</u> Skript erfolgen würden, könnte man das Verhalten vermeiden.

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            1 Reply Last reply
                            0
                            • R Offline
                              R Offline
                              rom.wagner80
                              wrote on last edited by
                              #14

                              @paul53:

                              @rom.wagner80:

                              Hier jetzt mal der Log es sind sogar drei Ergebnisse aus der RGB zu Hex Funktion `
                              Es sind 3 setState() die <u>nacheinander</u> ausgeführt werden. Erst der letzte setState() sorgt für das endgültige Ergebnis (255, 21, 0).

                              EDIT: Wenn beide Wandlungen in <u>einem</u> Skript erfolgen würden, könnte man das Verhalten vermeiden. `

                              Das Mag sein und wird über kurz oder lang auch die Endlösung sein. Warum wird für den Wert der Farbe nicht der letzte Wert angenommen sondern der mittlere ? (s.Bilder) würde er tatsächlich den letzten nehmen, passt alles.
                              2476_errorlog_6.jpeg
                              2476_objekte.jpeg

                              1 Reply Last reply
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by
                                #15

                                @rom.wagner80:

                                würde er tatsächlich den letzten nehmen, passt alles. `
                                Der Empfänger der Hex-Werte ist wahrscheinlich mit der zu schnellen Übermittlung von 3 Werten überfordert.

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Reply Last reply
                                0
                                • R Offline
                                  R Offline
                                  rom.wagner80
                                  wrote on last edited by
                                  #16

                                  @paul53:

                                  @rom.wagner80:

                                  würde er tatsächlich den letzten nehmen, passt alles. Der Empfänger der Hex-Werte ist wahrscheinlich mit der zu schnellen Übermittlung von 3 Werten überfordert.

                                  Das klingt plausibel. Aber wodurch werden denn die drei Hexadezimalen werte erzeugt? Ich übergebe doch nur einmal die Werte aus der HSV Funktion …

                                  Gesendet von iPhone mit Tapatalk

                                  1 Reply Last reply
                                  0
                                  • paul53P Offline
                                    paul53P Offline
                                    paul53
                                    wrote on last edited by
                                    #17

                                    @rom.wagner80:

                                    wodurch werden denn die drei Hexadezimalen werte erzeugt? `

                                    setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
                                    setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
                                    setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));     
                                    
                                    

                                    siehe erster Beitrag. Auf jeden Wert wird im 2. Skript getriggert.

                                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                    1 Reply Last reply
                                    0
                                    • R Offline
                                      R Offline
                                      rom.wagner80
                                      wrote on last edited by
                                      #18

                                      @paul53:

                                      @rom.wagner80:

                                      wodurch werden denn die drei Hexadezimalen werte erzeugt? `

                                      setState ("javascript.0.Geraete.YAHKA.r1"/*r1*/, Math.round(255 * r));
                                      setState ("javascript.0.Geraete.YAHKA.g1"/*g1*/, Math.round(255 * g));
                                      setState ("javascript.0.Geraete.YAHKA.b1"/*b1*/, Math.round(255 * b));     
                                      
                                      

                                      siehe erster Beitrag. `

                                      Okay. Dann werde ich mal schauen, wie ich das Problem elegant gelöst bekomme. Werde mich dann hier wieder melden, wenn das Problem behoben ist oder ich neue Probleme habe [emoji6] Dank dir erstmal für deine Hilfe - wieder mal [emoji51]

                                      Gesendet von iPhone mit Tapatalk

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      760

                                      Online

                                      32.4k

                                      Users

                                      81.4k

                                      Topics

                                      1.3m

                                      Posts
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      ioBroker Community 2014-2025
                                      logo
                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Recent
                                      • Tags
                                      • Unread 0
                                      • Categories
                                      • Unreplied
                                      • Popular
                                      • GitHub
                                      • Docu
                                      • Hilfe