NEWS
wrong type of...
-
Jetzt hat es mich auch erwischt.
ich habe
javascript.0 2019-12-26 13:42:02.610 warn (1053) at processImmediate (timers.js:658:5) javascript.0 2019-12-26 13:42:02.610 warn (1053) at tryOnImmediate (timers.js:676:5) javascript.0 2019-12-26 13:42:02.610 warn (1053) at runCallback (timers.js:705:18) javascript.0 2019-12-26 13:42:02.610 warn (1053) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:226:41) javascript.0 2019-12-26 13:42:02.610 warn (1053) at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4745:37) javascript.0 2019-12-26 13:42:02.609 warn (1053) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:364:25) javascript.0 2019-12-26 13:42:02.609 warn (1053) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:963:38) javascript.0 2019-12-26 13:42:02.609 warn (1053) at Object.<anonymous> (script.js.Luftdaten_kumulieren:7:3) javascript.0 2019-12-26 13:42:02.608 warn (1053) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1258:20) javascript.0 2019-12-26 13:42:02.607 warn (1053) Wrong type of 0_userdata.0.Umwelt.PM2_5_Summe: "string". Please fix, while deprecated and will not work in next versions.
Aber ich habe alles kontrolliert und alles ist "number":
{ "_id": "0_userdata.0.Umwelt.PM2_5_Summe", "type": "state", "common": { "name": "PM2_5_Summe", "role": "value", "type": "number", "desc": "Manuell erzeugt", "read": true, "write": true, "def": false }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1577356159237, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 } }
und im Script steht:
on({id: 'luftdaten.0.34499.SDS_P1', change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; setState("0_userdata.0.Umwelt.PM10_Anzahl"/*PM10_Anzahl*/, (getState("0_userdata.0.Umwelt.PM10_Anzahl").val + 1), true); setState("0_userdata.0.Umwelt.PM10_Summe"/*PM10_Summe*/, (getState("0_userdata.0.Umwelt.PM10_Summe").val + getState("luftdaten.0.34499.SDS_P1").val), true); setState("0_userdata.0.Umwelt.PM2_5_Anzahl"/*PM2_5_Anzahl*/, (getState("0_userdata.0.Umwelt.PM2_5_Anzahl").val + 1), true); setState("0_userdata.0.Umwelt.PM2_5_Summe"/*PM2_5_Summe*/, (getState("luftdaten.0.34499.SDS_P2").val + 1), true); }); schedule("59 23 * * *", function () { setState("0_userdata.0.Umwelt.PM10_Tagesmittel"/*PM10_Tagesmittel*/, (getState("0_userdata.0.Umwelt.PM10_Summe").val / getState("0_userdata.0.Umwelt.PM10_Anzahl").val), true); setState("0_userdata.0.Umwelt.PM2_5_Tagesmittel"/*PM2_5_Tagesmittel*/, (getState("0_userdata.0.Umwelt.PM2_5_Summe").val / getState("0_userdata.0.Umwelt.PM2_5_Anzahl").val), true); });
Alle diese States sind vom typ number.
{ "type": "state", "common": { "name": "PM2.5", "type": "number", "role": "value.ppm", "unit": "µg/m³", "read": true, "write": false, "custom": { "history.0": { "enabled": true, "changesOnly": true, "debounce": "1000", "maxLength": "20", "retention": 0, "changesRelogInterval": "1800", "changesMinDelta": 0, "aliasId": "" } } }, "native": {}, "from": "system.adapter.luftdaten.0", "user": "system.user.admin", "ts": 1577284209810, "_id": "luftdaten.0.34499.SDS_P2", "acl": { "object": 1638, "state": 1638 } }
muss ich trotzdem eine Konvertierung zu Zahl durchführen?
-
@Homoran ja du musst Konvertieren. Es gibt fälle da behandelt js zahlen wie einen String.
-
-
Wahrscheinlich 12,5, nicht 12.5 ...
-
@paul53 sagte in wrong type of...:
@Homoran sagte:
"luftdaten.0.34499.SDS_P2"
enthält offenbar einen String.
wie bekomme ich das raus?
Der Datenpunkt ist vom Typ NumberIch denke ich werde sicherheitshalber einen konvert Block dazunehmen
-
@Homoran sagte:
wie bekomme ich das raus?
log(typeof getState("luftdaten.0.34499.SDS_P2").val);
@Homoran sagte in wrong type of...:
Der Datenpunkt ist vom Typ Number
Das sagt nichts darüber aus, welcher Typ tatsächlich in val enthalten ist.
-
@paul53 sagte in wrong type of...:
log(typeof getState("luftdaten.0.34499.SDS_P2").val);
Danke!
14:32:00.412 info javascript.0 (1053) Start javascript script.js.typtest 14:32:00.416 info javascript.0 (1053) script.js.typtest: string
Obwohl, die Config auf number steht
-
-
@paul53
Done! -
Danke an alle!
Habe jetzt erst einmal alle States mit "nach Zahl" konvertiert. Läuftjetzt ohne Fehlermeldung.
Issue beim Luftdaten-Adapter ist erstellt.
@SBorg sagte in wrong type of...:
Wahrscheinlich 12,5, nicht 12.5 ...
Zumindest nicht sichtbar
-
@Homoran sagte:
alle States mit "nach Zahl" konvertiert.
Du meinst alle Werte aus "luftdaten.0" ? Das wäre ausreichend.
-
@paul53 sagte in wrong type of...:
Das wäre ausreichend.
Danke!
Da war ich mir eben nicht sicher, ob die States, in denen er das Ergebnis aus einer "Text-Addition" eingetragen hatte nicht auch den falschen Typ haben.
Mit diesen Werten rechnet er ja nachher weiter. -
@Homoran sagte:
States, in denen er das Ergebnis aus einer "Text-Addition" eingetragen hatte nicht auch den falschen Typ haben.
Ja, das muss einmalig korrigiert werden.
-
@paul53
Dann setze ich alles auf 0 und beginne von vorn.
Da stimmt sowie so etwas nicht
Die potentiellen Tagesmittelwerte sind unplausibel. -
@Homoran sagte:
Die potentiellen Tagesmittelwerte sind unplausibel.
Wenn bisher eine String-Verkettung anstelle einer Addition erfolgte, können die Werte nicht stimmen.
-
@paul53
Das habe ich mir auch gedacht -
@paul53 sagte in wrong type of...:
@Homoran sagte:
Die potentiellen Tagesmittelwerte sind unplausibel.
Wenn bisher eine String-Verkettung anstelle einer Addition erfolgte, können die Werte nicht stimmen.
Das war wohl schon immer String:
self.setState(path + 'SDS_' + obj.value_type, {val: obj.value, ack: true});
Ich finde aber nix was obj.value prüft oder als Zahl konvertiert. Mein JS ist "so naja", aber was ich dabei nicht verstehe, die Funktion ist für 2.5 + 10, warum meckert er nur die 2.5 an (10 ist, wie es die Funktion ja auch vorgibt, ebenfalls String)?
-
@SBorg
er hatte beides angemeckert.
Ich hatte nur das eine als Beispiel genommen -
@Homoran Ok, danke, dann raff ich das auch ^^
Muss Matthias fixen... -
@SBorg sagte:
Das war wohl schon immer String:
Ist der Code aus dem Adapter ?
Wenn es eine Zahl sein soll, wie es common.type = 'number' vorgibt, muss gewandelt werden.self.setState(path + 'SDS_' + obj.value_type, {val: parseFloat(obj.value), ack: true});