NEWS
script-Fehler tritt nur manchmal auf
-
Habe hier ein Script zum Aufzeichen der Tages-Minimum-Temperatur, welches seit Monaten funktioniert hat.
Das selbe Script habe ich für die Max-Temperatur, das funktioniert immer noch!Wenn ich jetzt eine Temperatur von 50 in meinen Minimum-DP eintrage läuft es eine Weile, die neuen Temp-Werte werden auch eingtragen. Urplötzlich fängt javascript mit folgenen Daten an zu meckern:
2020-05-28 15:19:05.598 - warn: javascript.0 (635) You are assigning a object to the state "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp" which expects a number. Please fix your code to use a number or change the state type to object. This warning might become an error in future versions. 2020-05-28 15:19:05.620 - warn: javascript.0 (635) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1355:20) 2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object. (script.js.common.Wetteraufzeichnung.Min-Temperatur:6:5) 2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1052:38) 2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:451:25) 2020-05-28 15:19:05.622 - warn: javascript.0 (635) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37) 2020-05-28 15:19:05.622 - warn: javascript.0 (635) at processImmediate (internal/timers.js:456:21) 2020-05-28 15:19:05.622 - warn: javascript.0 (635) at process.topLevelDomainCallback (domain.js:137:15)folgendes Script liegt zu Grunde:
// Min-Temp aufzeichen on({id: "wiffi-wz.0.root.192_168_1_142.w_temperatur"/*1*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("wiffi-wz.0.root.192_168_1_142.w_temperatur").val < getState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp").val) { setState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp"/*Min-Temp*/, getState("wiffi-wz.0.root.192_168_1_142.w_temperatur").val, true); } });Der Datenpunkt hat folgende Einstellung:
{ "_id": "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp", "type": "state", "common": { "name": "Min-Temp", "role": "", "type": "number", "unit": "°C", "read": true, "write": true }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1568652989732, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } }Wo muss ich suchen, oder liegt es evtl. am Adapter?
Versionen:
js-controller: 3.1.4
node.js: 12.17.0 (mit der 12.16.x ging es auch schon nicht)
NPM: 6.14.4
script Engine: 4.6.17@guergen sagte in script-Fehler tritt nur manchmal auf:
2020-05-28 15:19:05.598 - warn: javascript.0 (635) You are assigning a object to the state "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp" which expects a number.
Please fix your code to use a number or change the state type to object. This warning might become an error in future versions.
Deinen selbst erstellter Datenpunkt , auf Number ändern ...
-
Habe hier ein Script zum Aufzeichen der Tages-Minimum-Temperatur, welches seit Monaten funktioniert hat.
Das selbe Script habe ich für die Max-Temperatur, das funktioniert immer noch!Wenn ich jetzt eine Temperatur von 50 in meinen Minimum-DP eintrage läuft es eine Weile, die neuen Temp-Werte werden auch eingtragen. Urplötzlich fängt javascript mit folgenen Daten an zu meckern:
2020-05-28 15:19:05.598 - warn: javascript.0 (635) You are assigning a object to the state "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp" which expects a number. Please fix your code to use a number or change the state type to object. This warning might become an error in future versions. 2020-05-28 15:19:05.620 - warn: javascript.0 (635) at setState (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1355:20) 2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object. (script.js.common.Wetteraufzeichnung.Min-Temperatur:6:5) 2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1052:38) 2020-05-28 15:19:05.621 - warn: javascript.0 (635) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:451:25) 2020-05-28 15:19:05.622 - warn: javascript.0 (635) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37) 2020-05-28 15:19:05.622 - warn: javascript.0 (635) at processImmediate (internal/timers.js:456:21) 2020-05-28 15:19:05.622 - warn: javascript.0 (635) at process.topLevelDomainCallback (domain.js:137:15)folgendes Script liegt zu Grunde:
// Min-Temp aufzeichen on({id: "wiffi-wz.0.root.192_168_1_142.w_temperatur"/*1*/, change: "any"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("wiffi-wz.0.root.192_168_1_142.w_temperatur").val < getState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp").val) { setState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp"/*Min-Temp*/, getState("wiffi-wz.0.root.192_168_1_142.w_temperatur").val, true); } });Der Datenpunkt hat folgende Einstellung:
{ "_id": "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp", "type": "state", "common": { "name": "Min-Temp", "role": "", "type": "number", "unit": "°C", "read": true, "write": true }, "native": {}, "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1568652989732, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } }Wo muss ich suchen, oder liegt es evtl. am Adapter?
Versionen:
js-controller: 3.1.4
node.js: 12.17.0 (mit der 12.16.x ging es auch schon nicht)
NPM: 6.14.4
script Engine: 4.6.17 -
@guergen sagte in script-Fehler tritt nur manchmal auf:
2020-05-28 15:19:05.598 - warn: javascript.0 (635) You are assigning a object to the state "0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp" which expects a number.
Please fix your code to use a number or change the state type to object. This warning might become an error in future versions.
Deinen selbst erstellter Datenpunkt , auf Number ändern ...
@Glasfaser Der steht doch auf Number!
-
@guergen es scheint, als würdest du einen String setzen, obwohl eine Zahl erwartet wird.
Entweder änderst du den DP oder du wandelst den String in eine Zahl um.
-
@J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String

@guergen dann schau mal, was da tatsächlich in deinem State drin steht:
// Min-Temp aufzeichen on({id: 'wiffi-wz.0.root.192_168_1_142.w_temperatur', change: 'any'}, function (obj) { const value = obj.state.val; const oldValue = obj.oldState.val; const temp = getState('wiffi-wz.0.root.192_168_1_142.w_temperatur').val; console.log(typeof temp); // Hier sollte dann im Log der Type ausgegeben werden, entweder 'number' oder 'string' if (temp < getState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp').val) { setState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp', temp, true); } });Sollte im Log 'string' stehen, dann versuch mal folgendes:
setState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp', parseInt(temp), true); -
@guergen dann schau mal, was da tatsächlich in deinem State drin steht:
// Min-Temp aufzeichen on({id: 'wiffi-wz.0.root.192_168_1_142.w_temperatur', change: 'any'}, function (obj) { const value = obj.state.val; const oldValue = obj.oldState.val; const temp = getState('wiffi-wz.0.root.192_168_1_142.w_temperatur').val; console.log(typeof temp); // Hier sollte dann im Log der Type ausgegeben werden, entweder 'number' oder 'string' if (temp < getState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp').val) { setState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp', temp, true); } });Sollte im Log 'string' stehen, dann versuch mal folgendes:
setState('0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp', parseInt(temp), true); -
@guergen lass dir am besten auch direkt den Wert mit ausgeben, vielleicht ist auch mal ein null-Wert oder ähnliches dabei.
@J-A-R-V-I-S Ich schreibe seit mehreren Monaten die Temperaturwerte dieses Gerätes mit, wenn da mal ein null-Wert dabei wäre, wäre es mir schon aufgefallen...
Das Max-Temp-Script bekommt ja die selben Werte, da läuft es durch (nur dass das Script "grösser als" benutzt -
@guergen lass dir am besten auch direkt den Wert mit ausgeben, vielleicht ist auch mal ein null-Wert oder ähnliches dabei.
-
@J-A-R-V-I-S sagte:
vielleicht ist auch mal ein null-Wert oder ähnliches dabei.
Das ist bei Typ "object" sogar wahrscheinlich.
You are assigning a object to the state
-
@J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String

@guergen said in script-Fehler tritt nur manchmal auf:
@J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String

Javascript konvertiert immer automatisch, wenn es die Möglichkeit gibt. Von daher läuft dein Script, solange im State wiffi-wz.0.root.192_168_1_142.w_temperatur was drinsteht, das in eine Zahl konvertiert werden kann (z.B. "25"). Steht etwas drin, das nicht automatisch konvertiert werden kann, dann kommt es zum Fehler.
"Beliebt" ist in so einem Fall, dass der String für Kommazahlen den falschen Dezimaltrenner hat. "25" klappt, "25,1" nicht, da "25.1" richtig wäre.
Ich würde mal wie von J.A.R.V.I.S vorgeschlagen den Typ loggen, sondern den Wert an sich. -
@guergen said in script-Fehler tritt nur manchmal auf:
@J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String

Javascript konvertiert immer automatisch, wenn es die Möglichkeit gibt. Von daher läuft dein Script, solange im State wiffi-wz.0.root.192_168_1_142.w_temperatur was drinsteht, das in eine Zahl konvertiert werden kann (z.B. "25"). Steht etwas drin, das nicht automatisch konvertiert werden kann, dann kommt es zum Fehler.
"Beliebt" ist in so einem Fall, dass der String für Kommazahlen den falschen Dezimaltrenner hat. "25" klappt, "25,1" nicht, da "25.1" richtig wäre.
Ich würde mal wie von J.A.R.V.I.S vorgeschlagen den Typ loggen, sondern den Wert an sich. -
@guergen said in script-Fehler tritt nur manchmal auf:
@J-A-R-V-I-S Jetzt grade werden die Daten ja als Nummer gesendet, sonst würde es ja sofort zum Fehler kommen. Die werden ja nicht plötzlich zum String

Javascript konvertiert immer automatisch, wenn es die Möglichkeit gibt. Von daher läuft dein Script, solange im State wiffi-wz.0.root.192_168_1_142.w_temperatur was drinsteht, das in eine Zahl konvertiert werden kann (z.B. "25"). Steht etwas drin, das nicht automatisch konvertiert werden kann, dann kommt es zum Fehler.
"Beliebt" ist in so einem Fall, dass der String für Kommazahlen den falschen Dezimaltrenner hat. "25" klappt, "25,1" nicht, da "25.1" richtig wäre.
Ich würde mal wie von J.A.R.V.I.S vorgeschlagen den Typ loggen, sondern den Wert an sich.@Alexi das tut der Javascript Adapter eben nicht. Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.
Du kannst da auch Strings und Booleans reinschreiben, die nicht umgewandelt werden.
-
@Alexi das tut der Javascript Adapter eben nicht. Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.
Du kannst da auch Strings und Booleans reinschreiben, die nicht umgewandelt werden.
-
@Alexi das tut der Javascript Adapter eben nicht. Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.
Du kannst da auch Strings und Booleans reinschreiben, die nicht umgewandelt werden.
@J-A-R-V-I-S said in script-Fehler tritt nur manchmal auf:
Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.
Äh sorry. Den Satz verstehe ich nicht. Hast du ein Beispiel?
Edit: Ach jetzt. OK. Ja, war auf dem falschen Dampfer. Ist ja keine Zuweisung an eine Variable sonder ein setState...
-
@guergen sagte:
es steht dann immer null drin nach dem Fehler
Passiert das auch, wenn Du das Script mal so änderst ?
// Min-Temp aufzeichen on("wiffi-wz.0.root.192_168_1_142.w_temperatur"/*1*/, function (obj) { var value = obj.state.val; if (value < getState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp").val) { setState("0_userdata.0.Wetteraufzeichnung.Temperaturen.Min.Min-Temp"/*Min-Temp*/, value, true); } }); -
@J-A-R-V-I-S said in script-Fehler tritt nur manchmal auf:
Er schreibt zwar den Wert, gibt aber auch die Warnmeldung aus.
Äh sorry. Den Satz verstehe ich nicht. Hast du ein Beispiel?
Edit: Ach jetzt. OK. Ja, war auf dem falschen Dampfer. Ist ja keine Zuweisung an eine Variable sonder ein setState...
@Alexi du kannst als Value einfach mal alles eintragen ("20", "10,1", true, "Test") und schauen was dann passiert.
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

