NEWS
Probleme beim Wandeln von RGB zu HEX
-
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() !
-
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 -
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 });
-
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
-
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
-
Hier jetzt mal der Log es sind sogar drei Ergebnisse aus der RGB zu Hex Funktion
2476_errorlog_5.jpeg -
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.
-
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 -
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. -
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
-
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.
-
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