NEWS
json(<key>) liefert "undefined" im Binding
-
Nutze in Vis-2 das Styled - States Control Widget, für einen detailierten Schalter einer Tasmota-Steckdose, die über mqtt (iobroker.mqtt) angebunden ist.
Das Tasmota Device schickt viele Detail-Attribute über einen JSON-String, der mittels der JSON() Funktion sehr leicht geparst werden kann:({mqtt.0.tele.tasmota_DBDAE0.SENSOR;json(ENERGY.Power) })
Der String der sich im SENSOR-Topic befindet sieht aus wie folgt:
mqtt.0.tele.tasmota_DBDAE0.SENSOR.val:{"Time":"2025-03-14T08:40:26","ENERGY":{"TotalStartTime":"2020-05-05T11:42:36","Total":116.087,"Yesterday":0.100,"Today":0.033,"Period": 0,"Power": 0,"ApparentPower": 0,"ReactivePower": 0,"Factor":0.00,"Voltage": 0,"Current":0.000}} [string]
Wie man sieht, gibt es einen Wert 0 zum Key "ENERGY.Power".
Dieser Wert ist im Text / Title des Widgets eingefügt, um den aktuellen Stromverbrauch im Widget zu sehen.Jetzt zum Problem:
Der Wert wird immer perfekt angezeigt, ausser, wenn der Wert 0 ist, dann gibt die json(ENERGY.Power)-Funktion den String "undefined" aus:
Habe per javascript versucht
let sensorObj = JSON.parse(obj.state.val); let powerVal = sensorObj.ENERGY.Power;
auf den Wert zu zugreifen. Hier funktioniert alles perfekt mit und ohne "0". Deshalb poste ich meine Frage mal hier im Bereich Visualisierung.
Hat jemand eine Idee?Gruß Rainer
-
@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
Hat jemand eine Idee?
nur ein Gedanke!
hast du zusätzlich mal nach Zahl gewandelt? -
@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
let powerVal = sensorObj.ENERGY.Power;
und wenn du dies ergänzt mit
.tofixedAlso wandeln in einen String.
-
@homoran said in json(<key>) liefert "undefined" im Binding:
nur ein Gedanke!
hast du zusätzlich mal nach Zahl gewandelt?Bin bei den Bindings nicht sehr tief drin. Da ist viel zu viel implizites Wissen notwendig, das ich nirgends nachlesen kann.
Es funktioniert NUR: {mqtt.0.tele.tasmota_DBDAE0.SENSOR;json(ENERGY.Power) }
aber eben nur wenn in ENERGY.Power ein Wert ungleich 0 steht.
Sobald ich versuche hier per Scripting was zu modifizieren, parsen, abschneiden, hinzufügen funktioniert alles nicht.
Das jedoch alles Zahlen ausser 0 funktionieren, muss das ein Bug sein. -
@bahnuhr said in json(<key>) liefert "undefined" im Binding:
und wenn du dies ergänzt mit
.tofixedhabe ich probiert, bringt keine Änderung
-
@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
@bahnuhr said in json(<key>) liefert "undefined" im Binding:
und wenn du dies ergänzt mit
.tofixedhabe ich probiert, bringt keine Änderung
glaub ich nicht.
Bitte json als Text oder in code-tags hier einstellen.
und auch dein binding. -
@bahnuhr said in json(<key>) liefert "undefined" im Binding:
Bitte json als Text oder in code-tags hier einstellen.
und auch dein binding.JSON:
{"Time":"2025-03-14T18:40:26","ENERGY":{"TotalStartTime":"2020-05-05T11:42:36","Total":116.135,"Yesterday":0.100,"Today":0.081,"Period": 1,"Power":10,"ApparentPower":19,"ReactivePower":16,"Factor":0.53,"Voltage":230,"Current":0.081}}
Binding 1:
Licht {mqtt.0.tele.tasmota_DBDAE0.SENSOR; json(ENERGY.Power) }
Ergebnis:
Licht 10
(wenn das Wert im JSON-String = 0 ist ist das Ergebins "Licht undefined"
Binding 2.Versuch:
Licht {mqtt.0.tele.tasmota_DBDAE0.SENSOR; json(ENERGY.Power).toFixed(2) }
Ergebnis:
Licht undefined
-
@pulsar07
Dann probier es doch einmal mit einem Script.
Und das Ergebnis dann in einen DP schreiben.Klappt dies auch nicht ?
-
@bahnuhr said in json(<key>) liefert "undefined" im Binding:
Dann probier es doch einmal mit einem Script.
Und das Ergebnis dann in einen DP schreiben.
Klappt dies auch nicht ?Doch das klappt, ist aber keine Spaß, wenn man viele solcher Steckdosen hat. Ist eben ein echter Workaround.
Deshalb gibt es ja die json()-Funktion. Die Nutzung der json(<key>) Funktion im Binding ist eigentlich perfekt, nur der Bug bei Wert == 0 ist eben ein Fehler.Bin noch nicht lange mit IOBroker unterwegs. Wo kann man solche Fehler einstellen / melden?
Was mich auch irritiert, ist dass man eigentlich im Binding (vis-2) eigentlich auch "rechnen" kann ({h:javascript.0.myCustom.height;w:javascript.0.myCustom.width;h*w}, das funktioniert aber mit dem json-Value überhaupt nicht. Habe versucht den rohen JSON-String in ne Variable zu schreiben und danach mittels String Operationen zu zu schneiden. Kann aber weder den rohen JSON-String bearbeiten noch den Value aus der JSON Funktion in der Art
{mqtt.0.tele.tasmota_DBDAE0.SENSOR;jval:json(ENERGY.Power):jval ? jval : "0" }
Was gibt es denn da für Einschränkungen bzw. wo kann man nachlesen, was hier möglich ist?
Gruß Rainer -
@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
Doch das klappt, ist aber keine Spaß
mir macht JS schon Spaß.
und wenn es mit binding nicht klappt ?!@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
o kann man solche Fehler einstellen / melden?
auf github bei dem entsprechenden Adapter.
@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
vis-2
Nehm ich nicht. Sind mir noch zu viele Fehler drin (meine Meinung).
@pulsar07 sagte in json(<key>) liefert "undefined" im Binding:
Was gibt es denn da für Einschränkungen bzw. wo kann man nachlesen, was hier möglich ist?
keine Ahnung
-
Damit könntest du dir dein eigenes Widget bauen
https://forum.iobroker.net/topic/31521/test-widget-json-template?_=1742925069957