NEWS
Fehler in einem Script welchen den Ladezustand von Batterien ausliest.
-
Hallo zusammen,
ich habe drei Fragen. Leider bin ich nur mit Blocky unterwegs und kenne mich mit Java so gar nicht aus.
1: Ich nutze dieses Script um den Ladezustand meiner Aquara Sensoren auszulesen. In diesem Script wird dann ein Objekt angelegt und ich verarbeite das in VIS, so das ich ein Batteriesymbol angezeigt bekomme, welches immer leerer wird Leider bekomme ich einen Fehler angezeigt und kann ihn nicht beheben.
Script:
// Batterieanzeige31 "*/60 * * * *" const idBatt31 = 'mihome.0.devices.magnet_158d0002e25252.percent'; // Batterielevel in % const idVis31 = 'Batterieanzeige_Tuere_WC_OG'; // Für Vis createState(idVis31, 0, { type: 'number', min: 0, max: 6, role: 'level', states: { 0: '0 %', 1: '10 %', 2: '20 %', 3: '40 %', 4: '60 %', 5: '80 %', 6: '100 %', } }); var level31 = getState(idBatt31).val; function batt31() { var state31 = 6; // full if(level31 <= 100) state31 = 6; // 100% if(level31 <= 80) state31 = 5; // 80 % if(level31 <= 60) state31 = 4; // 60 % if(level31 <= 40) state31 = 3; // 40 % if(level31 <= 20) state31 = 2; // 20 % if(level31 <= 10) state31 = 1; // 10 % if(level31 <= 5) state31 = 0; // empty setState(idVis31, state31, true); } batt31(); // Skriptstart on(idBatt31, function(dp) { level31 = dp.state31.val; batt31(); });
Fehler:
javascript.0 2019-01-21 20:54:58.753 error at Manager.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20) javascript.0 2019-01-21 20:54:58.752 error at Manager. <anonymous>(/opt/iobroker/node_modules/component-bind/index.js:21:15) javascript.0 2019-01-21 20:54:58.752 error at Socket.onpacket (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:236:12) javascript.0 2019-01-21 20:54:58.752 error at Socket.onevent (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/lib/socket.js:278:10) javascript.0 2019-01-21 20:54:58.752 error at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/component-emitter/index.js:133:20) javascript.0 2019-01-21 20:54:58.752 error at Socket. <anonymous>(/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:52:30) javascript.0 2019-01-21 20:54:58.752 error at Object.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3425:37) javascript.0 2019-01-21 20:54:58.752 error at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:358:25) javascript.0 2019-01-21 20:54:58.752 error at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:755:38) javascript.0 2019-01-21 20:54:58.751 error at Object. <anonymous>(script.js.Batterien.31_Batterie_Status_Tuere_WC_OG:39:22) javascript.0 2019-01-21 20:54:58.750 error Error in callback: TypeError: Cannot read property 'val' of undefined</anonymous></anonymous></anonymous>
2: Wie ihr seht, versucht das Script bei jedem Durchlauf das Objekt neu anzulegen. Wie müsste man das umschreiben um das zu vermeiden. So, dass er also beim ersten Start das Objekt anlegt und dann nicht mehr?
3: Ich habe nun das gleiche Script 31 Mal am laufen. Soweit funktioniert das auch super aber es muss doch möglich sein, daraus ein Script zu machen, welche das gleiche Ergebnis hat. Mit Schleifen oder so?
In VIS schaut das dann so aus. Es geht auch, will es nur optimieren…
Vielen lieben Dank und Gruß
-
level31 = dp.state31.val;
dp.state31.val gibt es nicht. Das ist der Grund warum er meckert..
Es muss
dp.state.val ````sein. Gruß
-
Danke dir, dann ist dieser Fehler damit behoben.
-
Hallo,
irgendwie steh ich auf dem Schlauch:
Wie sieht denn dann das Widget aus im VIS?
Das mit dem Script verstehe ich halb, die Funktionen sind klar, aber wo ist der Link zu der Bilddatei?
Und wie machst du dann die Sichtbarkeit abhängig von dem %-Status?