NEWS
setState String vs. Number
-
Ich habe ein script dass mit setState einem DP ein Wert gibt:
var delayDP = "0_userdata.0.piHole.timer"; var deactDP = "pi-hole.0.deactPiHoleTime"; var delay = getState(delayDP).val; setState(deactDP, delay);
Die Definition vom delayDP sieht so aus:
{ "_id": "0_userdata.0.piHole.timer", "type": "state", "common": { "name": "piHole.timer", "role": "", "type": "number", "desc": "Manually created", "min": 0, "def": 0, "read": true, "write": true }
Meine Frage ist wieso ich diese Meldung im Log bekomme:
javascript.0 2021-05-24 21:19:46.114 warn You are assigning a string to the state "pi-hole.0.deactPiHoleTime" which expects a number. Please fix your code to use a number or change the state type to string. This warning might become an error in future versions.
Danke für eure Tipps!
-
@mrfenyx sagte in setState String vs. Number:
var delay = getState(delayDP).val;
was passiert denn wenn du den Wert von der getstate Anweisung nochmal nach Typ "number" konvertierst?
var delay = number(getState(delayDP).val);
-
@amg_666 ja, das geht, muss man aber Number() benutzen
genau so auch mit parseInt(). Die Frage wäre nun, konvertiert getState() eine "number" zu "string" oder wieso kommt der Fehler ohne es "manuell" zu konvertieren?
-
@mrfenyx Wenn du in der Adminoberfl#che auf Objekte gehst und da dann auf den Datenpunkt, was sagt er dir denn da was das f+r ein Typ ist?
-
@amg_666 steht im ersten Post:
"type": "number"
-
@mrfenyx Dann bin ich mit meinem Latein am Ende. Ich habe ein Skript in dem ich diverse Stromverbräuche addiere. Die "Summe" habe ich angelegt mit
var idStromverbraucher_Summe = 'StromverbraucherSumme'; var Summe; createState(idStromverbraucher_Summe, Summe, {type: 'number', name: 'Stromverbrauch', unit: 'W', role: 'value'});
das funktioniert tadellos und ohne Fehlermeldungen, wenn ich da andere Werte vom Typ Number draufaddiere bzw zuweise. Vielleicht mal den Datenpunkt löschen und neu anlegen? Wäre aber eher die Kategorie "letzte verzweifelte Versuche"
-
@mrfenyx sagte: konvertiert getState() eine "number" zu "string"
Nein. Der Wert wird als "string" in den Datenpunkt geschrieben (durch ein Script?).
-
@paul53 hmm, der Wert wird in Vis durch ein "jqui-input" Widget eingegeben. In den Settings vom Widget ist "as string" nicht ausgewählt:
-
@mrfenyx sagte: der Wert wird in Vis durch ein "jqui-input" Widget eingegeben. In den Settings vom Widget ist "as string" nicht ausgewählt
Gerade getestet: Es wird bei der Eingabe trotzdem ein String geschrieben, auch wenn vorher eine Zahl enthalten war.
-
@paul53 yeah, I thought so. Created a new issue for vis: https://github.com/ioBroker/ioBroker.vis/issues/372