NEWS
[gelöst]Script funktioniert nicht mehr auf neuem System
-
Hallo, ich habe jetzt ioBroker komplett neu auf einem neuem System aufgesetzt.
Nachdem ich alle Adapter neu Installiert habe, bin ich nun dabei die Scripte zu kopieren.Altes System JS Script Engine: 4.0.12
Neues System JS Script Engine 3.6.5Hier das Script welches nicht funktioniert:
var idCal = "ical.0"; var idCalTrigger = idCal + ".data.trigger"; var idCalTable = idCal + ".data.table"; var idCalHTML = idCal + ".data.html"; var idCalHTMLtable = idCal + "_1.json"; createState('Schicht.Tanja', " "); createState('Schicht.Torsten', " "); //createState('Test.event1', " "); //createState('Test.event2', " "); //createState('Test.date1', " "); //createState('Test.date2', " "); //createState('Test.event', " "); //createState('Test.date', " "); createState('Test.zeit1', " "); createState('Test.zeit2', " "); function iCalToHTMLTable() { var TanjaArbeiten = ""; var TorstenArbeiten =""; var calTable = getState(idCalTable); var inst = getObject("system.adapter."+idCal); var instopt = inst.native; var calendar = {}; var event =""; var date = ""; for (var i = 0; i < 2; i++) { var entry = calTable.val[i]; if ( entry._calName != calendar.name ) { calendar = {}; for (var c = 0; c < instopt.calendars.length; c++ ) { if (entry._calName == instopt.calendars[c].name ) { calendar = instopt.calendars[c]; break; } } } event += entry.event + ","; date += entry.date + ","; } var event1 = event.split(",")[0]; var event2 = event.split(",")[1]; var date1 = date.split(",")[0]; var date2 = date.split(",")[1]; var date1a; var date2a; var date3; var date3a; var date3b; date1 = date1.split("-")[0]; date1 = date1.split(" ")[1]; date1a = date1.split(':'); date1a = parseInt(date1a[0]) + parseInt(date1a[1]) / 60; date2 = date2.split("-")[0]; date2 = date2.split(" ")[1]; date2a = date2.split(':'); date3a = parseInt(date2a[0]); date3b = parseInt(date2a[1]) / 60; date2a = parseInt(date2a[0]) + parseInt(date2a[1]) / 60; // console.log(event); // console.log(event1); // console.log(event2); // console.log(date); // console.log(date1); // console.log(date2); if (event1 == event2) { if (event1 == "Tanja Arbeiten") { TanjaArbeiten = date1a } else { TorstenArbeiten = date1a } } else if (event1 != event2 ) { if (event1 == "Tanja Arbeiten") { TanjaArbeiten = date1a; } if (event1 == "Frühschicht" || event1 == "Spätschicht" || event1 == "Nachtschicht") { TorstenArbeiten = date1a; } else { TorstenArbeiten = ""; } if (event2 == "Tanja Arbeiten") { TanjaArbeiten = date2a; } if (event2 == "Frühschicht" || event2 == "Spätschicht" || event2 == "Nachtschicht") { TorstenArbeiten = date2a; } else { TorstenArbeiten = ""; } } setState('Schicht.Tanja', TanjaArbeiten); setState('Schicht.Torsten', TorstenArbeiten); // setState('Test.event1', event1); // setState('Test.event2', event2); // setState('Test.date1', date1); // setState('Test.date2', date2); // setState('Test.event', event); // setState('Test.date', date); setState('Test.zeit1', date3a); setState('Test.zeit2', date3b); } on({id: idCalTable, change: "ne"}, function (obj) { iCalToHTMLTable(); }); schedule("5 0 * * *", function () { iCalToHTMLTable(); }); iCalToHTMLTable();
Hier die Meldungen:
18:16:48.946 [info] javascript.0 Stop script script.js.Schicht.Schichturzeit_start 18:16:49.041 [info] javascript.0 Start javascript script.js.Schicht.Schichturzeit_start 18:16:49.058 [error] javascript.0 script.js.Schicht.Schichturzeit_start: script.js.Schicht.Schichturzeit_start:30 18:16:49.058 [error] javascript.0 at iCalToHTMLTable (script.js.Schicht.Schichturzeit_start:30:20) 18:16:49.058 [error] javascript.0 at script.js.Schicht.Schichturzeit_start:117:1
Kann mir da jemand weiterhelfen?
Auf dem alten System läuft das Script und auf dem neuen kommen die Fehlermeldungen -
Eine klare Vorstellung hab ich noch nicht. Was mir auffällt ist das du entry nicht auf null abprüfst bevor du entry._calName abfragst.
A.
-
@Asgothian sagte in Script funktioniert nicht mehr auf neuem System:
.. Was mir auffällt ist das du entry nicht auf null abprüfst bevor du entry._calName abfragst.
Da ich in JS noch nicht so Fitt bin, weiss ich leider nicht wie ich das machen müßte
-
An Stelle von
for (var i = 0; i < 2; i++) { var entry = calTable.val[i];
dieses probieren
for (var i = 0; i < 2; i++) { var entry = calTable.val[i]; if (entry === null) { console.debug('no entry for index in table' + JSON.stringify(calTable)); continue; }
-
OK, der Fehler liegt woanders. Habe gerade festgestellt, dass meine Objekte von iCal leer sind. Nur weiss ich nicht warum?
Dann kann hier geschlossen werden und ich stelle mein Problem in einem anderen Teil.