NEWS
vis binding durch Vergleich Farbe ändern
-
Hallo,
ich hänge aktuell an dem Thema "binding" und sehe trotz großer Sucheaktion den Fehler nicht:Ich habe von einem WLAN Thermometer die Werte "min" und "temp" (alle beiden sind als Typ number hinterlegt). Min ist ein fester Wert bzw. Alarmschwelle, der Wert temp ist die aktuelle Temperatur.
Jetzt will ich bei meinen basic Number Widgets die Schrift entsprechend einfärben. Als einfache wenn-dann binding habe ich schon alles möglich für diese Abfrage versucht:
{wert_min:Sensors.Sensor_1.min;wert_temp:Sensors.Sensor_1.temp;wert_min>wert_temp?"#ff0000"::"#000000"}
Das binding habe ich im Number Widget für den Bereich fontcolor eingegeben. Jetzt wirds für mich gruselig:
Damit es funktioniert müssen beide Zahlen entweder im zweistelligen Bereich sein oder aber beide haben drei Stellen. Ist der Wert min unter 100 und die Temperatur angeommen auf 130 ist die Schriftfarbe schwarz. Ist aber der Wert min auf 101 und die Temperatur weiterhin auf 130 wird die Farbe schon rot obwohl der Wert ja weiterhin kleiner ist. Egal was ich mache, ich bekomme dieses Verhalten nicht weg.
Hat hier jemand eine Idee wo meine Stolperfalle ist?
Danke und Gruß -
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
und sehe trotz großer Sucheaktion den Fehler nicht:
zu sehen habe ich auch nichts
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
alle beiden sind als Typ number hinterlegt
Soll heißen? Die Datenpunkte sind vom Typ Number?
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
Hat hier jemand eine Idee wo meine Stolperfalle ist?
Liefert der Sensor auch Numbers? oder Strings?
-
Mea culpa, ich habe zur Veranschaulichung jetzt ein Bild angehängt.
Ja, die Datenpunkte sind laut RAW Ansicht "Number":
"type": "state", "common": { "name": "temp", "type": "number", "role": "value.min", "unit": "°C",
Ich verstehe nur nicht warum das Binding funktioniert wenn beide Zahlen die gleiche Anzahl von Stellen haben
Edit: ich hab den View Export mal angehängt.
-
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
Ich verstehe nur nicht warum das Binding funktioniert wenn beide Zahlen die gleiche Anzahl von Stellen haben
das könnte ein Hinweis auf einen Stringvergleich sein.
Deswegen die Frage als was der Sensor die Daten liefert -
@Homoran
wie kann ich das herausfinden? Dachte wenn der DP als "Number" definiert ist, ist auch der Wert entsprechend gespeichert. -
@micklafisch sagte:
Dachte wenn der DP als "Number" definiert ist, ist auch der Wert entsprechend gespeichert.
Das ist leider nicht immer so.
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
wie kann ich das herausfinden?
Kurzes Test-Script:
log(typeof getstate('Hier die ID eingeben').val);
-
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
@Homoran
wie kann ich das herausfinden? Dachte wenn der DP als "Number" definiert ist, ist auch der Wert entsprechend gespeichert.@paul53 hat mir da mal geholfen:
https://forum.iobroker.net/topic/28101/wrong-type-of/8 -
@micklafisch sagte in vis binding durch Vergleich Farbe ändern:
{wert_min:Sensors.Sensor_1.min;wert_temp:Sensors.Sensor_1.temp;wert_min>wert_temp?"#ff0000"::"#000000"}
2 Doppelpunkte sind falsch, es düprfen nur einmal doppelpunkt sein
{wert_min:Sensors.Sensor_1.min;wert_temp:Sensors.Sensor_1.temp;wert_min>wert_temp?"#ff0000":"#000000"}
syntax ist hier identisch zu
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/Conditional_Operator -
@paul53 @Homoran
habe beide Punkte abgefragt, das Skriptlog sagt es sind "number":21:20:00.993 info javascript.0 (10626) Start javascript script.js.common.zzz_Datenpunkttyp 21:20:01.001 info javascript.0 (10626) script.js.common.zzz_Datenpunkttyp: number 21:20:01.002 info javascript.0 (10626) script.js.common.zzz_Datenpunkttyp: number
@OliverIO
den Doppel-Doppelpunkt hatte ich schon beim endlosen experimentieren mal testweise entfernt, auch da funktioniert es nicht.Ich bin aktuell ratlos.
-
{wert_min:Sensors.Sensor_1.min; wert_temp:Sensors.Sensor_1.temp; parseInt(wert_min) > parseInt(wert_temp) ? "#ff0000" : "#000000"}
Die Leerzeichen sind nur wegen der besseren Lesbarkeit
-
@SBorg
Hi, es funktioniert endlich. Vielen Dank für die Infos und Hilfestellungen.
Warum ein Number nochmal konvertiert werden will/muss erklärt sich mir zwar nicht, aber jetzt klappts.Nochmals vielen Dank an alle!
-
@micklafisch Tücke des Objekts. Zumindest bis jetzt (ev. ändert es sich ja auch noch mal) wird der Datenpunkt beim Einlesen per Binding, unabhängig davon was es im Datenpunkt ist (Number, String, ...), als "String" eingelesen.