NEWS
JSON zu Objekte
-
@paul53
Fast verstanden, wofür könnte das gut sein (Speicherplatz sparen?) -
@ente34 sagte: wofür könnte das gut sein (Speicherplatz sparen?)
Ja.
Bisher ist mir hier im Forum noch kein Script aufgefallen, das die asynchrone Version von getstate(id, callback) verwendet. -
@kellerassel75
In Zeile 19 hast Du das obj in der Hand:setState(Nummer,el.caller) .... setState(Name,el.name)
kannst Du Dir einen Anruf ausfiltern
-
@ente34
Also Haken ist raus! Fehler ist behoben!
Hardware ist Raspi4. Versin ioBroker.admin 4.1.11!
Falko16:06:40.026 info javascript.0 (12175) Start javascript script.js.test 16:06:40.064 info javascript.0 (12175) script.js.test: registered 1 subscription and 1 schedule
Unter Objekt ist dann nur "[]"!
-
@kellerassel75
Na ja, hast Du verpasste Anrufe heute?
Sonst Zeile 18:if (1 || el_date === date)
-
16:17:09.144 error javascript.0 (12519) script.js.test compile failed: at script.js.test:45
Sorry mein Fehler { vergessen!
Nun schreibt er mir die ganze Tabelle nach javascript.0.telefon.missed_today.json!
Im Log steht:
javascript.0 2021-01-31 16:17:09.150 error (12519) at processTicksAndRejections (internal/process/task_queues.js:97:5) javascript.0 2021-01-31 16:17:09.150 error (12519) at runMicrotasks (<anonymous>) javascript.0 2021-01-31 16:17:09.150 error (12519) at /opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49 javascript.0 2021-01-31 16:17:09.149 error (12519) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23) javascript.0 2021-01-31 16:17:09.149 error (12519) at /opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17 javascript.0 2021-01-31 16:17:09.149 error (12519) at /opt/iobroker/node_modules/iobroker.javascript/main.js:1140:17 javascript.0 2021-01-31 16:17:09.149 error (12519) at /opt/iobroker/node_modules/iobroker.javascript/main.js:1559:17 javascript.0 2021-01-31 16:17:09.146 error (12519) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1503:37) javascript.0 2021-01-31 16:17:09.146 error (12519) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1280:28) javascript.0 2021-01-31 16:17:09.146 error (12519) at Object.createScript (vm.js:261:10) javascript.0 2021-01-31 16:17:09.146 error (12519) at new Script (vm.js:88:7) javascript.0 2021-01-31 16:17:09.145 error (12519) SyntaxError: Missing catch or finally after try javascript.0 2021-01-31 16:17:09.145 error (12519) ^ javascript.0 2021-01-31 16:17:09.145 error (12519) } javascript.0 2021-01-31 16:17:09.144 error at script.js.test:45 javascript.0 2021-01-31 16:17:09.144 error (12519) script.js.test compile failed:
-
@kellerassel75
Schon klar, mein Script filtert ja die verpassten Anrufe heute aus. Mit der "1||" bekommst Du wieder alle, um zu kontrollieren, ob alles soweit funktioniert.
Alternativ kannst Du Dich auch selbst anrufen (nicht abheben!). -
@ente34
Gut! Er schreibt nun die Anrufe von heute! Das funktioniert!Aber ich wollte richtige Datenpunte - Zahlen nicht JSON!
Also:
Datenpunt letzter - caller
Datenpunt letzter - date
Datenpunt letzter - nameDatenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameFalko
-
@kellerassel75
wie bereits oben gesagt, in Zeile 19 hast Du das obj in der Hand ... -
@kellerassel75 sagte: richtige Datenpunte - Zahlen nicht JSON!
Du meinst Zeichenketten?
@kellerassel75 sagte in JSON zu Objekte:
Datenpunt vorletzter- caller
Datenpunt vorletzter- date
Datenpunt vorletzter- nameWieweit sollen sie zurück reichen?
-
@paul53
Ich denke 4 Anrufe sollte reichen! -
@kellerassel75 sagte: Solange nur ein Anruf ist:
Ist es wirklich so, dass es dann nur ein Objekt ohne Array-Klammern ist ?
-
@paul53
Nein das habe ich so geändert! -
Kannst Du es dann selber erweitern?
//Script zur Zerlegung der JSON Daten in einzelne Datenpunkte //Idee: Chaot // Umsetzung: paul53 var json = "tr-064.0.calllists.missed.json"; var Nummer = "javascript.0.Nummer"; var Datum = "javascript.0.Datum"; var Name = "javascript.0.Name"; const MaxAnrufe = 4; on(json, function(dp) { var obj = JSON.parse(dp.state.val); const i_end = obj.length < MaxAnrufe ? obj.length : MaxAnrufe; for (let i=0; i<i_end; i++) { const o = obj[i]; console.warn(o); const dp_nummer = Nummer+"_"+i; console.warn(dp_nummer); setState(dp_nummer,o.caller); } // setState(Nummer, parseFloat(obj.caller)); // setState(Datum, parseFloat(obj.date)); // setState(Name, parseFloat(obj.name)); }); for (let i=0; i<MaxAnrufe; i++) { const dp_nummer = Nummer+"_"+i; createState(dp_nummer); }
-
@ente34
Danke! Ich werde es Versuchen! -
@kellerassel75 sagte: 4 Anrufe sollte reichen!
Vorschlag (nicht getestet):
const idJson = "tr-064.0.calllists.missed.json"; const path = "0_userdata.0.Telefon.verpasst-"; if(!existsState(path + '0.Nummer')) { for(let i = 0; i < 4; i++) { createState(path + i + '.Nummer', '', {type: 'string', name: 'Nummer', role: 'info'}); createState(path + i + '.Datum', '', {type: 'string', name: 'Datum, Uhrzeit', role: 'info'}); createState(path + i + '.Name', '', {type: 'string', name: 'Name', role: 'info'}); } } on(idJson, function(dp) { let arr = JSON.parse(dp.state.val); let anzahl = arr.length; if(anzahl > 4) anzahl = 4; for(let i = 0; i < anzahl; i++) { setState(path + i + '.Nummer', arr[i].caller, true); setState(path + i + '.Datum', arr[i].date, true); setState(path + i + '.Name', arr[i].name, true); } });
-
@paul53
Mir gefällt es ... -
@paul53
Danke passt!Echt Super! Ich bin begeistert! Danke an alle!
Ich hätte nicht gedacht das ich so schnell Hilfe bekomme!
Ihr seid Super! Macht weiter so!Ich werde hier noch viel lernen hoffe ich!
Falko