NEWS
Script läuft auf einer iobroker Installation, auf der anderen NICHT???
-
Wie schon im Titel formuliert: ich bin gerade dabei, von einer iobroker Installation auf eine neuere umzuziehen. Alle meine Scripte laufen auf beiden brav, bis auf eines. Und ich habe keine Idee, warum. Ich erhalte auf der neueren Installation folgende Fehlermeldung:
` > 2018-11-22 18:05:46.924 error at ContextifyScript.Script.runInContext (vm.js:59:29)
2018-11-22 18:05:46.924 error at script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test:129:16
2018-11-22 18:05:46.924 error TypeError: Cannot read property 'length' of null
2018-11-22 18:05:46.924 error ^
2018-11-22 18:05:46.924 error if (muell2.length > 2) { // wenn der Inhalt des Objektes "idMuell" weniger als 2 Zeichen lang ist (also praktisch leer), dann …
2018-11-22 18:05:46.923 error script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test: script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test:129
2018-11-22 18:05:46.922 warn at script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test:128:17
2018-11-22 18:05:46.917 warn getState "javascript.0.Muellereignisse.heute" not found (3)
2018-11-22 18:05:46.917 info script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test: Wetter: Teils Wolkig
2018-11-22 18:05:46.916 info script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test: Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.
2018-11-22 18:05:46.916 info script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test: Temp 4
2018-11-22 18:05:46.916 info script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test: Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt.
2018-11-22 18:05:46.915 info script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test: Temp 4
2018-11-22 18:05:46.911 info Start javascript script.js.common.Skripte_aktiviert.mit_Muell__Buero_Test `
auf der alten Installation läuft noch die Java Script engine 1.2.0, auf der neuen 3.6.4.
Die neue Engine findet offenbar "getState "javascript.0.Muellereignisse.heute" not found " nicht und produziert dann die Folgefehler. Aber wartum??
Danke für HIlfe!
-
Gibt es das object den ?
Hast du es auf der neuen Installation erstellt den dies ist ein Manuel erstelltes object
Sent from my iPhone using Tapatalk
-
Dutchman,
gute Frage! aber da ich nur Script Laie bin, kann ich sie nicht gut beantworten. Ich poste hier mal das Script. Vielleicht schaust Du mal drauf? Danke!
`// ################################################################## // Buero Geburstage u. Muell // ################################################################## // ################################################################## // Definitionen // ################################################################## // Definition Sayit für "2" = Buero; var idSayIt = "sayit.2.tts.text"; var lautstaerke = 40; // Quellen var idWetter = "hm-rega.0.29954"; var idTemperatursensor = "hm-rpc.0.LEQ0177463.1.TEMPERATURE"; /*Temperatursensor:1.TEMPERATURE*/ var idGeburtstage = "javascript.0.Kalenderereignisse.heute"; var idMuell = "javascript.0.Muellereignisse.heute"; function ermitteleAnsagedatum () { //Wochentag ermitteln var d = new Date (); var w = new Array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"); var wochentag = w[d.getDay()]; //Tagesdatum ermitteln var tag = d.getDate(); //Monat ermitteln var month = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"); var monat = month[d.getMonth()]; //Jahr ermitteln var jahr = d.getFullYear(); //Stunde ermitteln var stunde = d.getHours(); //Minute ermitteln var minute = d.getMinutes(); return { // zurückgeben 'Jahr' : jahr, 'Monat' : monat, 'Tag' : tag, 'Wochentag' : wochentag, 'Stunde' : stunde, 'Minute' : minute }; } function ermitteleWetter () { // Wetterbedingungen var wetterdaten = getState(idWetter).val; log('Wetter: ' + wetterdaten); return(wetterdaten); } function ermitteleAnsageTemperatur () { // Die Außentemperatur ist xx. Das Wetter heute ist xx // Einfache Temperaturansage mit SayIt. // Variante 1 mittels splitten der Temperatur, damit die Ansage nicht // "Es sind 18 Punkt 2 Grad " sagt. var temperatursensor = getState(idTemperatursensor).val; var temp_string = temperatursensor.toString(); log('Temp ' + temp_string); var temp_array = []; temp_array = temp_string.split("."); // Fange leere Nachkommastellen ab. Das passiert, wenn die Temperatur z. B. 18.0 ist. // Es wird dann nur "18" gelesen. if (!temp_array[1]) { temp_array[1] = "0"; log("Die Nach-Kommastelle in temp_array[1] war nicht vorhanden und wird nun fest auf 0 gesetzt."); } return{ 'Ganzzahl' : temp_array[0], 'Nachkommazahl' : temp_array[1] }; } function ermitteleGeburtstage () { var geburtstage = getState(idGeburtstage).val; log(geburtstage); return (geburtstage); } function ermitteleMuell () { var muell = getState(idMuell).val; log(muell); return (muell); } // ################################################################## // // Ansagetext zusammenstellen // // ################################################################## var ansagetext = "Guten Morgen, heute ist " + ermitteleAnsagedatum().Wochentag + " der " + ermitteleAnsagedatum().Tag + "te " + ermitteleAnsagedatum().Monat + ' ' + ermitteleAnsagedatum().Jahr + ". Es ist" + ermitteleAnsagedatum().Stunde + " Uhr und " + ermitteleAnsagedatum().Minute + " Minuten." + " Die Aussentemperatur beträgt " + ermitteleAnsageTemperatur().Ganzzahl + "," + ermitteleAnsageTemperatur().Nachkommazahl + " Grad." + " Wetter Bedingungen," + ermitteleWetter() +" ."; // #################################################### // Wenn Geburtstag dann mit ansagen // #################################################### var geburtstage2 = getState(idGeburtstage).val; if (geburtstage2.length > 2) { // wenn der Inhalt des Objektes "idGeburtstage" weniger als 2 Zeichen lang ist (also praktisch leer), dann ... ansagetext = ansagetext + "Heute haben Geburtstag, " + ermitteleGeburtstage() +" ."; } // #################################################### // Wenn Müll dann mit ansagen // #################################################### var muell2 = getState(idMuell).val; if (muell2.length > 2) { // wenn der Inhalt des Objektes "idMuell" weniger als 2 Zeichen lang ist (also praktisch leer), dann ... ansagetext = ansagetext + " Achtung, heute ist Abholung " + ermitteleMuell() +" ."; } // #################################################### // ANSAGE // #################################################### setState(idSayIt, lautstaerke + ";" + ansagetext); // hier also ("40;Guten Morgen ...") /* ####################################################### Kalenderevent auswerten ----> nur Geburtstage sucht im iCal Adapter nach events (heute) auf Anfrage von Skorpil im Forum erstellt. http://forum.iobroker.de/viewtopic.php?f=21&t=2347&p=20627&sid=524f9dda2f313d3cbb183941df61fc38#p20627 27.02.2016 erstellt von Pix 02.03.2016 Anpassung und Aufbereitung für Sprachausgabe 21.07.2016 Umbau auf Müll Kalender ######################################################*/ //Datum als String ermitteln; function ermitteleDatum() { var d= new Date(); //Tagesdatum ermitteln var day = new Array("00","01","02","03","04","05","06","07","06","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"); var t = day[d.getDate().toString()]; //Monat ermitteln var month = new Array("01","02","03","04","05","06","07","08","09","10","11","12"); var m = month[d.getMonth().toString()]; //Jahr ermitteln var j = d.getFullYear().toString(); var datum= t+"."+m+"."+j+" "; //log("datum: " + datum); return (datum); } createState('Kalenderereignisse.heute', '', { name: 'Events von heute', type: 'string' }); var idListe = 'Kalenderereignisse.heute'; function pruefeKalender() { var inhalt = getState('ical.0.data.table').val; var heute = ermitteleDatum(); try{ var ereignisse = JSON.stringify(inhalt, null, 2); // Ausgabe als String log(ereignisse); var ereignisheute = '', // Liste (kommasepariert) ereignisheute_zeilen = ''; // Liste (mit Zeilenumbruch, zB für Anzeige in VIS) for(var i = 0; i <inhalt.length; i++)/{/alle/events/durchgehen/if/(/(inhalt[i].date.indexof(heute)/!="-1)" ||/(inhalt[i].date.indexof('heute')/)/strings/datum/oder/relatives/(nicht/nicht)/gefunden/var/ereignis="inhalt[i].event;" komma/im/namen/ersetzen="">0) ? ', ' : ''; ereignisheute = ereignisheute + komma + ereignis; ereignisheute = ereignisheute.replace('Geburtstag von ', ''); // "Geburtstag von " löschen } } // Aufbereitung für die Ansage (falls vorhanden, wird letztes Komma durch und ersetzt) var lastkomma = ereignisheute.lastIndexOf(','); // letztes Komma in der Reihe if (lastkomma != -1) { var vorn = ereignisheute.slice(0,lastkomma-1); var hinten = ereignisheute.slice(lastkomma+1, ereignisheute.length); ereignisheute = vorn + ' und' + hinten; } // Ende Aufbereitung für die Ansage setState(idListe, ereignisheute); log('Geburtstage: ' + ereignisheute); } catch (fehler_try) { log('Fehler beim Kalenderevent einlesen ' + fehler_try); } } // ################################################################# // neuer Teil für Müllkalender // ################################################################# createState('Muellereignisse.heute', '', { name: 'Müll-Events von heute', type: 'string' }); var idListe2 = "Muellereignisse.heute"; function pruefeKalender2() { var inhalt2 = getState('ical.1.data.table').val; var heute2 = ermitteleDatum(); try{ var ereignisse2 = JSON.stringify(inhalt2, null, 2); // Ausgabe als String log(ereignisse2); var ereignisheute2 = '', // Liste (kommasepariert) ereignisheute2_zeilen = ''; // Liste (mit Zeilenumbruch, zB für Anzeige in VIS) for(var i = 0; i <inhalt2.length; i++)/{/alle/events/durchgehen/if/(/(inhalt2[i].date.indexof(heute2)/!="-1)" ||/(inhalt2[i].date.indexof('heute')/)/strings/datum/oder/relatives/(nicht/nicht)/gefunden/var/ereignis2="inhalt2[i].event;" komma/im/namen/ersetzen="">0) ? ', ' : ''; ereignisheute2 = ereignisheute2 + komma + ereignis2; } } // Aufbereitung für die Ansage (falls vorhanden, wird letztes Komma durch und ersetzt) var lastkomma = ereignisheute2.lastIndexOf(','); // letztes Komma in der Reihe if (lastkomma != -1) { var vorn = ereignisheute2.slice(0,lastkomma-1); var hinten = ereignisheute2.slice(lastkomma+1, ereignisheute2.length); ereignisheute2 = vorn + ' und' + hinten; } // Ende Aufbereitung für die Ansage setState(idListe2, ereignisheute2); log('Müll: ' + ereignisheute2); } catch (fehler_try) { log('Fehler beim Müll-Kalenderevent einlesen ' + fehler_try); } } // bei Aktualisierung des Kalenders on ({id:'ical.0.events.Geburtstag', change: 'any'}, function(data) { pruefeKalender(); }); on ({id:/\ical.1.events.$/, change: 'any'}, function(data) { // jedes Objekt im ical.1 pruefeKalender2(); }); //bei Skriptstart pruefeKalender(); pruefeKalender2();</inhalt2.length;></inhalt.length;>`[/i][/i][/i][/i][/i][/i]
-
Hmm das script erstellt dieses Objekt eigentlich ist es denn nicht im Baum vorhanden ?
Dieser Teil hier führt das aus:
createState('Muellereignisse.heute', '', { name: 'Müll-Events von heute', type: 'string' });
System Mal neu gestartet?
Sent from my iPhone using Tapatalk
-
Vielen Dank. Nein, noch nicht neu gestartet. Versuche ich gleich noch mal. Merkwürdig ist, dass alle anderen Scripte laufen…
Ob denn in den Versionen irgendein Befehl geändert wurde, der jetzt nicht mehr funktioniert?
-
Ob denn in den Versionen irgendein Befehl geändert wurde, der jetzt nicht mehr funktioniert? `
Ehm nö, getState und setState waren und sind eigentlich schon immer so.
Wie gesagt das Script sollte diesen Datenpunkt erstellen und danach ist der Fehler auch Weck
Sent from my iPhone using Tapatalk
-
Kommt der Fehler bei Neustart des Skriptes wieder ?
-
Paul53, ja, er kommt immer wieder
Dutchman, er ist aber nicht weg[emoji23]
-
Der Datenpunkt "javascript.0.Muellereignisse.heute" ist vorhanden (Reiter "Objekte") und hat einen Wert ?
-
paul53,
ich bin ja leider ein Script Laie. Dutchman hat die Frage ja auch gestellt. Siehe oben. Und meinte, das Script hatte den Punkt erstellt.
-
So, Neustart durchgeführt, gleiches Verhalten! Der Datenplunkt „javascript.0.Muellereignisse.heute“ findet sich NICHT bei den Objekten…
-
Der Datenplunkt „javascript.0.Muellereignisse.heute“ findet sich NICHT bei den Objekten… `
Du verwendest nur die eine Javascript-Instanz 0 und das Skript läuft unter dieser Instanz ? -
Ja!