Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Probleme beim Wandeln von RGB zu 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

    Probleme beim Wandeln von RGB zu HEX

    This topic has been deleted. Only users with topic management privileges can see it.
    • paul53
      paul53 last edited by

      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);
      
      
      1 Reply Last reply Reply Quote 0
      • R
        rom.wagner80 last edited by

        @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 Reply Quote 0
        • R
          rom.wagner80 last edited by

          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 Reply Quote 0
          • paul53
            paul53 last edited by

            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() !

            1 Reply Last reply Reply Quote 0
            • R
              rom.wagner80 last edited by

              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 Reply Quote 0
              • paul53
                paul53 last edited by

                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
                });
                
                1 Reply Last reply Reply Quote 0
                • R
                  rom.wagner80 last edited by

                  @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 Reply Quote 0
                  • R
                    rom.wagner80 last edited by

                    @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 Reply Quote 0
                    • R
                      rom.wagner80 last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • R
                          rom.wagner80 last edited by

                          @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 Reply Quote 0
                          • paul53
                            paul53 last edited by

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

                            1 Reply Last reply Reply Quote 0
                            • R
                              rom.wagner80 last edited by

                              @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 Reply Quote 0
                              • paul53
                                paul53 last edited by

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

                                1 Reply Last reply Reply Quote 0
                                • R
                                  rom.wagner80 last edited by

                                  @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 Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  824
                                  Online

                                  31.7k
                                  Users

                                  79.9k
                                  Topics

                                  1.3m
                                  Posts

                                  2
                                  18
                                  1933
                                  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