NEWS
createState Problem - initial Value wird nicht eingepflegt
-
Hallo,
ich habe vor etwa 6 Monaten ein Skript erstellt, welches meinen iRobot überwacht. Nun war er aufgrund Umzug längere Zeit nicht online und ich wollte das Skript vor ein paar Tagen wieder aktivieren.Leider werden meine CreateState nicht mehr "so" abgearbeitet, wie früher/vorher.
Das Skript dient dazu, aufzuzeichnen, welche Räume er gerade anfährt - falls der Raum noch nicht als ID angelegt ist, soll die ID angelegt werden.
Dazu verwende ich eine Funktion wie folgt:
// Lege neuen Raum an function neuer_raum(geraet, pmap_id, region_id, region_type, user_pmapv_id) { // Bereiche createState(datenpunkt + geraet + ".Bereiche." + pmap_id, '', { name: 'ID der Karte', type: 'string', role: 'state' }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + ".pmap_id", pmap_id, { name: "ID der Karte", type: 'string', role: 'value' }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + ".user_pmapv_id", user_pmapv_id, { name: "Version der Karte", type: 'string', role: 'value' }); // Raum if (region_type == "rid") { createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Raeume.' + region_id, '', { name: 'ID des Raumes', type: 'string', role: 'state' }, function () { }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Raeume.' + region_id + '.region_id', region_id, { name: 'ID Des Raumes', type: 'string', role: 'value' }, function () { }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Raeume.' + region_id + '.name', '', { name: 'Eigener Name des Raumes', type: 'string', role: 'value' }, function () { }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Raeume.' + region_id + '.erstellt', hole_datum(), { name: 'Datum des Hinzufügens', type: 'string', role: 'value' }, function () { }); log("iRobot-Control: Neuer Raum für " + geraet + " gefunden und angelegt! ID: " + region_id); } // Schmutzzone if (region_type == "zid") { createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Zonen.' + region_id, '', { name: 'ID der Zone', type: 'string', role: 'state' }, function () { }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Zonen.' + region_id + '.region_id', region_id, { name: 'ID der Zone', type: 'string', role: 'value' }, function () { }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Zonen.' + region_id + '.name', '', { name: 'Eigener Name der Zone', type: 'string', role: 'value' }, function () { }); createState(datenpunkt + geraet + ".Bereiche." + pmap_id + '.Zonen.' + region_id + '.erstellt', hole_datum(), { name: 'Datum des Hinzufügens', type: 'string', role: 'value' }, function () { }); log("iRobot-Control: Neue Zone für " + geraet + " gefunden und angelegt! ID: " + region_id); } }
Das Log bläht sich dann ein wenig auf und meldet für jedes CreateState einen Fehler:
javascript.0 2022-03-28 15:18:40.888 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.887 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.886 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx.user_pmapv_id" not found javascript.0 2022-03-28 15:18:40.874 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.873 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.872 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx.pmap_id" not found javascript.0 2022-03-28 15:18:40.847 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.846 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.842 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx.Raeume.5.erstellt" not found javascript.0 2022-03-28 15:18:40.841 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.841 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.840 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx.Raeume.5.name" not found javascript.0 2022-03-28 15:18:40.839 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.839 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.837 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx.Raeume.5.region_id" not found javascript.0 2022-03-28 15:18:40.826 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.825 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.824 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx.Raeume.5" not found javascript.0 2022-03-28 15:18:40.823 warn at processImmediate (internal/timers.js:466:21) javascript.0 2022-03-28 15:18:40.823 warn at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33) javascript.0 2022-03-28 15:18:40.820 warn State "javascript.0.iRobot.Roomba.Bereiche.xxx" not found
Komischerweise sind die ID's nach einiger Zeit vorhanden - jedoch habe sie auch keine Initial-Value - die eigentlich hätte geschrieben werden müssen.
Davor hatte sonst immer alles funktioniert...
Vielen Dank!
-
Ich habe jetzt zum Testen nochmal ein Timer-Skript erstellt, welches per Zufallszahl Datenpunkte anlegt.
Auch hier kommt es vor, das die "initial_value" nicht geschrieben wird, das Log diese Meldungen ausgibt und nach kurzer Zeit der DP aber vorhanden ist.
Anbei das Skript:
var datenpunkt = "0_userdata.States."; function getRandomNumberBetween(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } log(getRandomNumberBetween(20, 400)); var timer = setInterval(function() { var random = getRandomNumberBetween(20, 400); //log(random); createState(datenpunkt + random + ".Bereiche.name", random.toFixed(2), { name: 'ID der Karte', type: 'string', role: 'state' }); createState(datenpunkt + random + ".Bereiche.pmap_id", random.toFixed(2), { name: "ID der Karte", type: 'string', role: 'value' }); createState(datenpunkt + random + ".Bereiche.user_pmapv_id", random.toFixed(2), { name: "Version der Karte", type: 'string', role: 'value' }); }, 10000);
Jemand eine Idee, wieso das so ist?