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: stringObwohl, 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});
 
		
	 
		
	 
			
		 
			
			 
			
			