NEWS
Temperatur Widget blinkt (ungewollt) nach Binding
-
Hallo Ihr,
nachdem ich mich Weihnachten mit einem Raspberry beschenkt habe und nun die ersten Schritte in IOBroker unternehme, komme ich jetzt doch gerade nicht weiter.
Ich versuche, die Farbe des Textes eines Temperatur - Widgets nach dem Status der Heizung{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus;numberToColor(i)}
mit folgender Funktion
function numberToColor(i)
{
if ( i < 1 )
rgb = [0,255,0]; // Grün
else
rgb = [255,0,0]; // Rotreturn 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';}
zu ändern. Soweit so gut.
Was jetzt passiert ist, dass das Widget permanent anfängt zu blinken / einen Refresh zu machen. Nehme ich die Farbänderung raus ist alles perfekt.Die völlig identische Funktion und deren Aufruf funktionieren in einem "normalen" HTML Widget ohne jegliches Blinken.
Was mache ich falsch?Beste Grüße, Steffen

-
Hallo Ihr,
nachdem ich mich Weihnachten mit einem Raspberry beschenkt habe und nun die ersten Schritte in IOBroker unternehme, komme ich jetzt doch gerade nicht weiter.
Ich versuche, die Farbe des Textes eines Temperatur - Widgets nach dem Status der Heizung{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus;numberToColor(i)}
mit folgender Funktion
function numberToColor(i)
{
if ( i < 1 )
rgb = [0,255,0]; // Grün
else
rgb = [255,0,0]; // Rotreturn 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';}
zu ändern. Soweit so gut.
Was jetzt passiert ist, dass das Widget permanent anfängt zu blinken / einen Refresh zu machen. Nehme ich die Farbänderung raus ist alles perfekt.Die völlig identische Funktion und deren Aufruf funktionieren in einem "normalen" HTML Widget ohne jegliches Blinken.
Was mache ich falsch?Beste Grüße, Steffen

@freddy-0 Hi, da wird im Widget das Binding vor deinem JS geladen, dann kann das Binding/Widget später nichts mit dem Funktionsaufruf anfangen.
Wenn du hier nur die Farbe ändern möchtest, würde ich das Binding direkt ausführen:
{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "green" : "red" } oder per Farbcode {i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "#00ff00" : "#ff0000" }"parseInt" um sicher zu gehen, dass es wirklich als "number" gelesen wird. Der "kleiner als"-Vergleich würde natürlich ebenfalls funktionieren ;)
-
@freddy-0 Hi, da wird im Widget das Binding vor deinem JS geladen, dann kann das Binding/Widget später nichts mit dem Funktionsaufruf anfangen.
Wenn du hier nur die Farbe ändern möchtest, würde ich das Binding direkt ausführen:
{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "green" : "red" } oder per Farbcode {i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "#00ff00" : "#ff0000" }"parseInt" um sicher zu gehen, dass es wirklich als "number" gelesen wird. Der "kleiner als"-Vergleich würde natürlich ebenfalls funktionieren ;)
@sborg Merci, aber leider ...
Das hatte ich auch schon gemacht und es ändert nichts. Das Problem ist ja auch nicht, dass es mit JS nicht ging.
Es hat ja alles funktioniert, egal of JS oder mit{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "green" : "red"}nur leider "blinkt" das Widget dann laufend.
Hab mal ne kurzes Video gemacht ...Genau dasselbe funktioniert bei nem anderen Widget ohne Probleme.
Gefühlt löst es irgendwie einen permanenten Reload bei diesem einen Widget aus.Beste Grüße, Steffen
-
@sborg Merci, aber leider ...
Das hatte ich auch schon gemacht und es ändert nichts. Das Problem ist ja auch nicht, dass es mit JS nicht ging.
Es hat ja alles funktioniert, egal of JS oder mit{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "green" : "red"}nur leider "blinkt" das Widget dann laufend.
Hab mal ne kurzes Video gemacht ...Genau dasselbe funktioniert bei nem anderen Widget ohne Probleme.
Gefühlt löst es irgendwie einen permanenten Reload bei diesem einen Widget aus.Beste Grüße, Steffen
hier sieht man es ggf besser.
vis - Microsoft Edge 2021-02-02 16-15-40.mp4Der einzige Unterschied zwischen den beiden Obersten ist die Zeile
{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "green" : "red"}
-
hier sieht man es ggf besser.
vis - Microsoft Edge 2021-02-02 16-15-40.mp4Der einzige Unterschied zwischen den beiden Obersten ist die Zeile
{i:homepilot20.0.Actuator.1010041-32501812.relaisstatus; parseInt(i)==0 ? "green" : "red"}
@freddy-0 Ich habe es eben mal nach gebaut, funktioniert mittels Binding wie es soll und blinkt (unter FireFox) nicht.
Durch das Binding an sich sollte es auch bei einer Wertänderung nicht blinken, aber lege mal unter "0_userdata" einen einfachen Datenpunkt als "number" an und setzte den Wert auf 0 oder 1. Dann versuche mal das Binding auf den DP ob es dann auch noch blinkt (als Ausschluss auf den "homepilot"; dürfte aber damit nichts zu tun haben).
Weitere Möglichkeit wäre ggf. noch mal einen anderen Browser testen. VIS, JS etc. alles aktuell? -
@freddy-0 Ich habe es eben mal nach gebaut, funktioniert mittels Binding wie es soll und blinkt (unter FireFox) nicht.
Durch das Binding an sich sollte es auch bei einer Wertänderung nicht blinken, aber lege mal unter "0_userdata" einen einfachen Datenpunkt als "number" an und setzte den Wert auf 0 oder 1. Dann versuche mal das Binding auf den DP ob es dann auch noch blinkt (als Ausschluss auf den "homepilot"; dürfte aber damit nichts zu tun haben).
Weitere Möglichkeit wäre ggf. noch mal einen anderen Browser testen. VIS, JS etc. alles aktuell?@sborg .. und nochmal Danke ...
Also, ich habe folgendes probiert:
- verschiedene Browser (Edge, Chrome, (beide auf iOS und w10), FF, Safari --> keine Änderung
- ich habe einen neuen View erstellt, alle Bezüge zum Homepilot entfernt und Änderungen nur über eine Variable in "0_userdata" gesteuert --> keine Änderung
- ein anderes Widget eingebunden und identisch gesteuert --> das Neue arbeitet perfekt, das Alte blinkt weiterhin fröhlich vor sich hin (siehe --> vis - Microsoft Edge 2021-02-03 14-31-16.mp4)
Alles ist auf dem aktuellen Patchlevel.
Kurz zur Vollständigkeit:
- das JS script zur Farbänderung
function numberToColor(i) { switch (i) { case "0": rgb = [255,0,0]; break; case "1": rgb = [0,0,0]; break; case "2": rgb = [255,255,0]; break; case "3": rgb = [0,255,255]; break; case "4": rgb = [255,0,255]; // Grün break; case "5": rgb = [0,255,0]; // Grün break; default: rgb = [0,0,255]; // Grün break; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; }-
das Blockly

-
und die Variablen

-
@sborg .. und nochmal Danke ...
Also, ich habe folgendes probiert:
- verschiedene Browser (Edge, Chrome, (beide auf iOS und w10), FF, Safari --> keine Änderung
- ich habe einen neuen View erstellt, alle Bezüge zum Homepilot entfernt und Änderungen nur über eine Variable in "0_userdata" gesteuert --> keine Änderung
- ein anderes Widget eingebunden und identisch gesteuert --> das Neue arbeitet perfekt, das Alte blinkt weiterhin fröhlich vor sich hin (siehe --> vis - Microsoft Edge 2021-02-03 14-31-16.mp4)
Alles ist auf dem aktuellen Patchlevel.
Kurz zur Vollständigkeit:
- das JS script zur Farbänderung
function numberToColor(i) { switch (i) { case "0": rgb = [255,0,0]; break; case "1": rgb = [0,0,0]; break; case "2": rgb = [255,255,0]; break; case "3": rgb = [0,255,255]; break; case "4": rgb = [255,0,255]; // Grün break; case "5": rgb = [0,255,0]; // Grün break; default: rgb = [0,0,255]; // Grün break; } return 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')'; }-
das Blockly

-
und die Variablen

@freddy-0 Sry, war paar Tage weg... ;)
Also, nach etlichen Test muss ich es leider auf das Widget schieben. Die Farbänderung per Binding funktioniert zwar so, wenn sich aber der Wert in meinem Datenpunkt ändert/aktualisiert blinkt es auch bei mir einmalig kurz (meine Testtemperatur wird im 60 Sekundenraster geschrieben, deswegen ist dies bei mir eher als moderat zu bezeichnen). -
@sborg vielen vielen Dank für die Arbeit, die Du Dir gemacht hast. Irgendwie war ich ja schon am Verzweifeln, was ich falsch gemacht habe.
Macht es Sinn, dafür eine Issue aufzumachen?
@freddy-0 IMO schon. So bekomme ich ev. Fehler mit und kann sie fixen (bei meinen Projekten). Es könnte natürlich auch sein, dass es technisch nicht anders möglich ist.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden