So,
nun habe ich mich heute mal hingesetzt und eine Neue virtuelle Maschine angelegt und meine ganze Iobroker Installation neu gemacht, jedes Script einzeln importiert sowie jeden Adapter neu installiert. Und siehe da, die Ursache für meine Probleme mit dem Update ist gefunden!
Ursache war nicht IoBroker!
Viel mehr verursacht mein Weckerscript den Fehler, sobald dieses aus ist habe ich keine Fehlereinträge mehr im Log.
Ich habe in IoBroker unter Aufzählungen manuell einen enum.functions Datenpunkt angelegt (id:weckerdatenpunkte/name:Weckerdatenpunkte) diesen "beobachte" ich jedoch anscheinend falsch, bei der Verwendung vom Javascript Adapter 3.4.0 funktioniert mein Script bzw. bringt zumindest keinen Fehler, nach dem Update crashed es das ganze System.
Hier mal mein Script:
! ````
// *****************************************************************************
//
// Wecker
//
//
// Funktionen: 1. Dimmt das jeweilige Zimmerlicht langsam auf 100% bei Weckzeit
//
//
// v1.0 - 14.12.2017
// v1.0.1 - 14.12.2017 Datenpunkt zum abbrechen des Dimmvorgangs eingefügt
// Datenpunkt für das Max-Dimm-Level eingefügt
//
// *****************************************************************************
! // -----------------------------------------------------------------------------
// allgemeine Variablen
// -----------------------------------------------------------------------------
var logging = false; // Logging on/off
var instanz = 'javascript.0.'; // Javascript Instanz
var pfad0 = 'Wecker.'; // Pfad innerhalb der Instanz - Status allgemien
! var laufzeit = 600;//380 // Max Laufzeit in Sekunden (ca. Angabe da die Erhöhungsschritte gerundet werden.) Nicht höher als 600 Sekunden
var intervall = 20; // Durchlaufintervall - Nicht kleiner als 20 Sekunden
! var GeraeteListe = []; // Array der Geräte für die ein Wecker angelegt wird
GeraeteListe[0] = ['Kinderzimmer_xxx','xxxx.1.LEVEL']; // Gerät 1 -> 1.Raum, 2.Datenpunkt
GeraeteListe[1] = ['Kinderzimmer_xxx',"xxx.1.LEVEL"]; // Gerät 2 -> 1.Raum, 2.Datenpunkt
! var Wochentage = ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']; // Wochentage für die Weckeistellungen angelegt werden (Mit Sonntag beginnen wegen Schedule)
var WKZeit_Schedule = [];
! var timer =[];
// -----------------------------------------------------------------------------
// Objekte
// -----------------------------------------------------------------------------
! createState(instanz + pfad0 +'Weckereinstellungen_sichtbar', {def: 'false',type: 'boolean',name: 'Wecker Einstellungen '}); //Datenpunkt für Vis - Einstellungen sichtbar Ja/Nein
createState(instanz + pfad0 +'Wecker_gestellt', {def: 'false',type: 'boolean',name: 'Wecker gestellt'}); //Datenpunkt für Vis - Wecker gestellt Ja/Nein
createState(instanz + pfad0 +'Wecker_laeuft', {def: 'false',type: 'boolean',name: 'Automatische Licht Erhöhung'}); //Datenpunkt für Vis - Dimmvorgang läuft? Ja/Nein
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
! // #############################################################################
// # #
// # Funktion zum anlegen eines Weckers / einer Weckzeit #
// # #
// #############################################################################
! function WeckerStellen() {
setState(instanz + pfad0 +'Wecker_gestellt', false);
GeraeteListe.forEach(function(Geraet) {
Wochentage.forEach(function(Wochentag){
// -----------------------------------------------------------------------------
// Objekte in Abhänigkeit der GeraeteListe
// -----------------------------------------------------------------------------
// Objekte für Wecker Ein/Aus
createState(instanz + pfad0 + Geraet[0] +'.WeckerAktiv_'+Wochentag, {def: 'false',type: 'boolean',name: 'Wecker Aktiv '+Wochentag});
// Objekte für WeckZeiten
createState(instanz + pfad0 + Geraet[0] +'.WeckZeit_'+Wochentag, {def: '07:00',type: 'string',name: 'Weckzeit am '+Wochentag});
// Objekte für WeckZeiten
createState(instanz + pfad0 + Geraet[0] +'.Dimmer_Max_Level', {def: '30',type: 'number',name: 'Maximales Raumlicht Level'});
if(getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val){
var WKZeit = getState(instanz + pfad0 + Geraet[0] + '.WeckZeit_'+Wochentag).val.split(':');
//log(WKZeit[1] + ' ' + WKZeit[0] + ' * * 1');
if(logging) log(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val);
if(getState(instanz + pfad0 + Geraet[0]+ '.WeckerAktiv_'+Wochentag).val === true){
setState(instanz + pfad0 +'Wecker_gestellt', true);
clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
WKZeit_Schedule[Geraet[0]+'.'+Wochentag] = schedule(WKZeit[1] + ' ' + WKZeit[0] + ' * * '+ Wochentage.indexOf(Wochentag), function (){WeckerEin(Geraet);});
if(logging) log('Wecker für '+Geraet[0]+' am '+Wochentag+' wurde auf '+WKZeit[0]+': '+WKZeit[1]+' Uhr gestellt');
}
else{
clearSchedule(WKZeit_Schedule[Geraet[0]+'.'+Wochentag]);
if(logging) log('Wecker für '+Geraet[0]+' am '+Wochentag+' wurde gelöscht');
}
}
});
});
}//Wecker stellen Ende
! //WeckerStellen();
! // #############################################################################
// # #
// # Funktion zum langsamen erhöhen des Raumlichtes #
// # #
// #############################################################################
! function level_erhoehen(GeraeteID){
if(getState(GeraeteID[1]).val >= getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val){
clearTimeout(timer[GeraeteID[0]]);
if(logging)log('Level Dimmer'+GeraeteID[0]+' auf '+getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val+' automatische Erhöhung Ende');
}
else{
timer[GeraeteID[0]] = setTimeout(function() {
if(logging) log('Level:'+GeraeteID[0]+' wird um '+Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))+' erhöht auf '+(getState(GeraeteID[1]).val+Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))));
setState(GeraeteID[1], (getState(GeraeteID[1]).val + Math.round(getState(instanz + pfad0 + GeraeteID[0] +'.Dimmer_Max_Level').val / (laufzeit / intervall))));
level_erhoehen(GeraeteID);
}, intervall * 1000);
}
}
! // #############################################################################
// # #
// # Funktion zum starten verschiedener Aktionen beim erreichen der Weckzeit #
// # #
// #############################################################################
! function WeckerEin(GeraeteID) {
// Prüfen ob Raumlicht aus
if(getState(GeraeteID[1]).val <= 10){
setState(instanz + pfad0 + 'Wecker_laeuft', true);
level_erhoehen(GeraeteID);
}
// Weitere mögliche Aktionen
// hier
}
! // #############################################################################
// # #
// # Beobachten aller Weckerdatenpunkte #
// # #
// #############################################################################
! on({enumName:'weckerdatenpunkte', change: "ne"}, function (obj) {
WeckerStellen();
! });
! // #############################################################################
// # #
// # Beobachten des Datenpunktes zum Abbrechen des Dimmvorgangs #
// # #
// #############################################################################
! on({id: instanz + pfad0 + 'Wecker_laeuft', change: "ne"}, function (dp) {
if(dp.state.val === false){
GeraeteListe.forEach(function(GeraeteID) {
clearTimeout(timer[GeraeteID[0]]);
if(logging)log('Automatisches hochfahren Raumlicht für '+GeraeteID[0]+' manuel gestoppt');
});
}
});
//WeckerEin(GeraeteListe[0]);
//WeckerEin(GeraeteListe[1]);
Und das verursacht die Probleme bzw. den Totalausfall:
on({enumName:'weckerdatenpunkte', change: "ne"}, function (obj) {
WeckerStellen();
});
Ich kann nichtmal sagen warum ich das so gemacht habe, glaube das aber irgendwo mal so gelesen zu haben. Fakt ist, dass es offensichtlich falsch ist. Toll wäre wenn mir jemand sagen kann wie es richtig wäre.