NEWS
Fehler in Scripte die schon funktionierten!!!
-
Hallo liebe Gemeinde,
habe in den letzten Tagen einen Umstieg gewagt von Raspi 2B auf Cubox-i4x4.
Die Installation lief nach einigen Probieren einwandfrei durch sodass ich alle Adapter und Scripte und Vis Darstellungen soweit hatte wie beim Raspi.
Es sind alle Adapter auf dem neusten Stand , Node 4.4.5 , Nodejs 4.4.5 , NPM 2.15.5.
Nun zum Problem:
Heute habe ich die Scripte am Raspi gestoppt und auf dem Cubox gestartet und nun kommen einige Fehler die sonst nie kamen
TypeError: 2016-06-22 14:29:43.249 error at Object.utils.adapter.stateChange (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:215:17) TypeError: 2016-06-22 14:29:43.249 error at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:537:17) TypeError: 2016-06-22 14:29:43.249 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2644:28) TypeError: 2016-06-22 14:29:43.249 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2644:28) TypeError: 2016-06-22 14:29:43.249 error at getObjectEnums (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:2650:45) TypeError: 2016-06-22 14:29:43.249 error at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:541:48 TypeError: 2016-06-22 14:29:43.249 error at Object.subs.callback (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1207:48) TypeError: 2016-06-22 14:29:43.249 error at Object. (script.js.Keller.Absenktemperatur:254:5) TypeError: 2016-06-22 14:29:43.249 error at Modus_Hand_10 (script.js.Keller.Absenktemperatur:259:5) TypeError: 2016-06-22 14:29:43.249 error at toLog (script.js.Keller.Absenktemperatur:145:18) TypeError: 2016-06-22 14:29:43.249 error Cannot read property 'push' of undefined message 2016-06-22 14:29:43.243 error hm-rpc.0.LEQ1174762.1.STATE [object Object] Cannot read property 'push' of undefined
oder
javascript.0 2016-06-22 14:37:45.344 error TypeError: Cannot read property 'split' of undefined at toLog (script.js.Badezimmer.Jalousie_Sonnenschutz:143:18) at Sonnenschutz_ausfuehren (script.js.Badezimmer.Jalousie_Sonnenschutz:244:21) javascript.0 2016-06-22 14:37:45.343 error message javascript.0.Sonnenstand.Elevation [object Object] Cannot read property 'split' of undefined
Somit werden dann die Scripte auch nicht aufgeführt.
Bei Javascript habe ich noch suncalc , dewpoint , pi-controller installiert.
Danke im voraus für eure Unterstützung
Sebastian
-
Da muss man Skript ansehen. Anscheinend machst du irgendwas mit Werten von Variablen und es kann gut sein, dass bei bestimmten Werten Skript nicht mehr geht.
-
Bei Javascript habe ich noch suncalc , dewpoint , pi-controller installiert. `
suncalc ist bereits mit dem Javascript-Adapter installiert und braucht (sollte) nicht nochmal installiert werden. -
Hier mal die Scripte:
Sonnenstandsberechnung
/* System Sonnenstand Sonne Azimut und Elevation in Variablen schreiben erstellt: 06.07.2015 nach ioBroker Forum http://forum.iobroker.net/viewtopic.php?f=21&t=975&sid=6f0ba055de5f82eed6809424f49ca93b#p7635 */ var suncalc = require('suncalc'), result = getObject("system.adapter.javascript.0"), lat = result.native.latitude, long = result.native.longitude; createState('Sonnenstand.Elevation', 0, {unit: '°'}); createState('Sonnenstand.Azimut', 0, {unit: '°'}); function Sonnenstand_berechnen () { var now = new Date(); var sunpos = suncalc.getPosition(now, lat, long); var h = sunpos.altitude * 180 / Math.PI, a = sunpos.azimuth * 180 / Math.PI + 180; setState("javascript.0.Sonnenstand.Elevation",h.toFixed(1)); setState("javascript.0.Sonnenstand.Azimut",a.toFixed()); } schedule("*/3 * * * *", Sonnenstand_berechnen); Sonnenstand_berechnen(); // bei Scriptstart
Sonnenschutz Badezimmer:
on({ id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/, change: "ne", logic: "and" }, function (obj) { Sonnenschutz_ausfuehren(); }); function Sonnenschutz_ausfuehren() { if (getState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/).val <= 90) { return; } if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 145 && getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val <= 289) { if (getState("javascript.0.Beschattung.Jalousien.Sonnenschutz"/*javascript.0.Beschattung.Jalousien.Sonnenschutz*/).val === true) { toLog("Sonnenschutzposition Jalousie Badezimmer angefahren",true); setStateDelayed("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/,40,15000); } } } on({ id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/, change: "ne", logic: "and" }, function (obj) { Sonnenschutz_aufheben(); }); function Sonnenschutz_aufheben() { if (getState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/).val <= 10 || getState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/).val >= 90) { return; } if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 290) { toLog("Sonnenschutzposition Jalousie Badezimmer verlassen",true); setState("hm-rpc.0.LEQ1028794.1.LEVEL"/*Bad Jalousie Fenster:1.LEVEL*/,100); } }
Sonnenschutz rpüfen:
//--------------------Sonnenschutz prüfen--------------------------------------- on({ id: "javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/, change: "ne", logic: "and" }, function (obj) { Sonnenschutz_pruefen(); }); createState("javascript.0.Beschattung.Jalousien.Sonnenschutz", false); createState("javascript.0.Beschattung.Jalousien.Aktiv", false); function Sonnenschutz_pruefen() { var SunProtect = false; if (getState("javascript.0.Sonnenstand.Elevation"/*Sonnenstand.Elevation*/).val >= 5) { if (getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val >= 100 && getState("javascript.0.Sonnenstand.Azimut"/*Sonnenstand.Azimut*/).val <= 300) { if (getState("javascript.0.Aussentemperatur.Anpassung"/*Aussentemperatur.Anpassung*/).val >= 19 && getState("javascript.0.Aussentemperatur.Anpassung"/*Aussentemperatur.Anpassung*/).val <= 30) { if (getState("javascript.0.Beschattung.Sonnensensor.Sonne"/*javascript.0.Beschattung.Sonnensensor.Sonne*/).val === true && getState("hm-rpc.0.MEQ0203583.3.TEMPERATURE"/*Sonnensensor:3.TEMPERATURE*/).val >= 1.0) { if (getState("javascript.0.Beschattung.Jalousien.Aktiv").val === true){ SunProtect = true; } } } } } if (getState("javascript.0.Beschattung.Jalousien.Sonnenschutz").val != SunProtect) { // Nur bei Änderung setzen //setState("hm-rega.0.8091"/*Jalousie Sonnenschutz*/, SunProtect); setState("javascript.0.Beschattung.Jalousien.Sonnenschutz", SunProtect); //log("Prüfe Sonnenschutz: " + SunProtect); } } // Sonnenschutz wurde aktiviert on({ id: "javascript.0.Beschattung.Jalousien.Sonnenschutz", change: "ne", val: true, logic: "and" }, function (obj) { Sonnenschutz_ein(); }); function Sonnenschutz_ein() { toLog("Der Sonnenschutz global wurde aktiviert",true); } // Sonnenschutz wurde deaktiviert on({ id: "javascript.0.Beschattung.Jalousien.Sonnenschutz", change: "ne", val: false, logic: "and" }, function (obj) { Sonnenschutz_aus(); }); on({ id: "javascript.0.Beschattung.Jalousien.Aktiv", change: "ne", val: false, logic: "and" }, function (obj) { Sonnenschutz_aus(); }); on({ id: "javascript.0.Beschattung.Jalousien.Hitzeschutz", change: "ne", val: true, logic: "and" }, function (obj) { Sonnenschutz_aus(); }); function Sonnenschutz_aus() { toLog("Der Sonnenschutz global wurde deaktiviert",true); }
Das sind z.B. drei Scripte die zusammen arbeiten.
Durch Sonne Elevation wird getriggert , Sonnenschutz nach Kriterien prüfen , Sonnenschutz im Badezimmer ausführen.
Hoffe es ist verständlich.
Gruß Sebastian
-
createState('Sonnenstand.Elevation', 0, {unit: '°'});
hat den Datenpunkt in der Instanz "javascript.0" angelegt ?
error hm-rpc.0.LEQ1174762.1.STATE [object Object] Cannot read property 'push' of undefined
Der Datenpunkt "hm-rpc.0.LEQ1174762.1.STATE" taucht in den Skripten nicht auf. Woher kommt eine property 'push' ?
Schau Dir im Reiter "Objekte" die Eigenschaften des betreffenden Datenpunktes an.
Ersetze bitte
setState("javascript.0.Sonnenstand.Elevation",h.toFixed(1)); setState("javascript.0.Sonnenstand.Azimut",a.toFixed());
durch
setState("javascript.0.Sonnenstand.Elevation", Math.round(10 * h) / 10); setState("javascript.0.Sonnenstand.Azimut", Math.round(a));
-
Hallo paul53,
der Datenpunkt wurde angelegt.
Habe deinen Vorschlag im Script geändert.
Der Datenpunkt "hm-rpc.0.LEQ1174762.1.STATE" ist vorhanden…hat sich gerade dazwichen gedrängelt...kommt in einem anderen Script vor.
Der Fehler ist wieder aufgetreten.
Die Sonnenstandsberechnung funktioniert ja...aber als Trigger in anderen Scripten kommt es dann zum Fehler
javascript.0 2016-06-22 17:39:00.643 error TypeError: Cannot read property 'split' of undefined at toLog (script.js.Veranda.Jalousie_G_Sonnenschutz:143:18) at Sonnenschutz_ausfuehren (script.js.Veranda.Jalousie_G_Sonnenschutz:244:21) javascript.0 2016-06-22 17:39:00.643 error message javascript.0.Sonnenstand.Elevation [object Object] Cannot read property 'split' of undefined
Z.B im Logdatenscript kommt das Wort 'split' ja vor.
createState('Logdatenerstellung.Log', ''); function getTimeAsString(d) { var date = d || new Date(); return date.getFullYear() + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + ('0' + date.getDate()).slice(-2) + ' --- '+ ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2); } function toLog(text, addTimestamp) { console.log(text); var lines = getState('Logdatenerstellung.Log').val; lines = lines.split(' '); if (addTimestamp) { lines.push(getTimeAsString() + ' --- ' + text); } else { lines.push(text); } if (lines.length > 33) lines.splice(0,1); setState('Logdatenerstellung.Log', lines.join(' '), true); }
Kann da der Fehler sein?
Sebastian
-
Kann da der Fehler sein? `
Ja. MitsetState('Logdatenerstellung.Log', lines.join(' '), true);
soll ein Array in einen Datenpunkt geschrieben werden, was nicht funktioniert. Das Array müsste erst in einen String gewandelt werden.
var lines = getState('Logdatenerstellung.Log').val; lines = lines.split(' ');
erwartet einen String im Datenpunkt und macht daraus ein Array. Da aber kein String geschrieben wurde, kann split nicht funktionieren.
-
Muss mich korrigieren:
lines.join(' ')
macht aus dem Array einen String mit Zeilentrenner.
Vielleicht muss man den Datenpunkt 'Logdatenerstellung.Log' erst einmal mit einem einfachen String initialisieren ?
Wie sieht der Datenpunkt (Wert) jetzt aus ?
-
Also ganz kann ich dir leider nicht mehr folgen in Punkto String und Array…bin gerade dabei mich zu belesen.
Unter Zustande steht kein Wert geschrieben.
-
Unter Zustande steht kein Wert geschrieben. `
Dann gib mal einen kurzen Text ein, z.B. startlog. -
Habe das Script für Logdatenerfassung erstmal gestoppt und in alle anderen Scripten das "toLog" auskommentiert.
Jetzt funktioniert z.B meine Beschattung wieder.
Wo soll ich startlog eingeben?
-
Wo soll ich startlog eingeben? `
Im Reiter Zustände auf den Datenpunkt 'Logdatenerstellung.Log' doppelklicken und im Feld Wert den Text eingeben. -
Schlechte Nachricht…
Jetzt ist mein System komplett abgeschmiert....werde erstmal wieder zurück auf Raspi umstellen und mein Backup auf den Cubox einspielen.
Probiere dann dein Eintrag unter Zustände.
Wird ein weilchen dauern , würde mich morgen mit meinen Ergebnissen melden.
Danke erstmal paul53 für deine Hilfe.
Schönen Abend
Sebastian