NEWS

Heizungs-Skript spinnt relativ oft.


  • Ich habe ein JavaScript für meine Heizung, mit einem Automatik-Modus, bei dem es möglich ist 10 Zyklen zu definieren (für Ein- und Ausschaltzeitpunkt).
    Jetzt ist es so, dass ich dieses Script aber alle Zeiten mal restarten muß, da die Heizung nicht mehr geregelt wird dadurch.
    Jemand eine Idee, was da schief laufen könnte?
    Ich hab auch schon logs eingebaut gehabt, komm aber nicht drauf. Es sieht so aus als würden die Schedules nicht mehr greifen.

    var logging = true;
    
    var TimerOnAus1 = null;
    var TimerOnEin1 = null;
    var TimerOnAus2 = null;
    var TimerOnEin2 = null;
    var TimerOnAus3 = null;
    var TimerOnEin3 = null;
    var TimerOnAus4 = null;
    var TimerOnEin4 = null;
    var TimerOnAus5 = null;
    var TimerOnEin5 = null;
    var TimerOnAus6 = null;
    var TimerOnEin6 = null;
    var TimerOnAus7 = null;
    var TimerOnEin7 = null;
    var TimerOnAus8 = null;
    var TimerOnEin8 = null;
    var TimerOnAus9 = null;
    var TimerOnEin9 = null;
    var TimerOnAus10 = null;
    var TimerOnEin10 = null;
    
    //Konstanten ids 
    const id0 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.Zyklen";
    const id1 = "AllOwnCreated.0.Heizung.automatikHeizung";
    const id2 = "AllOwnCreated.0.Heizung.UrlaubsAbsenkung";
    const id3 = "AllOwnCreated.0.Heizung.stateHeizung";
    const id4 = "AllOwnCreated.0.Heizung.UrlaubsAbsenkungTemp";
    
    //Konstanten Zeiteingabe 1. Zyklus
    const id15 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_1_Stunde";
    const id16 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_1_Minute";
    const id17 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_1_Stunde";
    const id18 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_1_Minute";
    
    //Konstanten Zeiteingabe 2. Zyklus
    const id25 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_2_Stunde";
    const id26 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_2_Minute";
    const id27 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_2_Stunde";
    const id28 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_2_Minute";
    
    //Konstanten Zeiteingabe 3. Zyklus
    const id35 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_3_Stunde";
    const id36 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_3_Minute";
    const id37 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_3_Stunde";
    const id38 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_3_Minute";
    
    //Konstanten Zeiteingabe 4. Zyklus
    const id45 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_4_Stunde";
    const id46 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_4_Minute";
    const id47 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_4_Stunde";
    const id48 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_4_Minute";
    
    //Konstanten Zeiteingabe 5. Zyklus
    const id55 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_5_Stunde";
    const id56 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_5_Minute";
    const id57 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_5_Stunde";
    const id58 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_5_Minute";
    
    //Konstanten Zeiteingabe 6. Zyklus
    const id65 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_6_Stunde";
    const id66 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_6_Minute";
    const id67 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_6_Stunde";
    const id68 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_6_Minute";
    
    //Konstanten Zeiteingabe 7. Zyklus
    const id75 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_7_Stunde";
    const id76 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_7_Minute";
    const id77 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_7_Stunde";
    const id78 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_7_Minute";
    
    //Konstanten Zeiteingabe 8. Zyklus
    const id85 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_8_Stunde";
    const id86 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_8_Minute";
    const id87 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_8_Stunde";
    const id88 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_8_Minute";
    
    //Konstanten Zeiteingabe 9. Zyklus
    const id95 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_9_Stunde";
    const id96 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_9_Minute";
    const id97 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_9_Stunde";
    const id98 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_9_Minute";
    
    //Konstanten Zeiteingabe 10. Zyklus
    const id105 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_10_Stunde";
    const id106 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.EinschaltZeit_10_Minute";
    const id107 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_10_Stunde";
    const id108 = "AllOwnCreated.0.Heizung.Zeitplan.Automatik.AusschaltZeit_10_Minute";
    
    
    function HeizungEin() {
        var heizungsValue = getState(id1).val;
            
        if (heizungsValue === true) {
            var tempFussboden = getState('AllOwnCreated.0.Heizung.tempFussboden').val;
            var tempHeizkoerper = getState('AllOwnCreated.0.Heizung.tempHeizkörper').val;
            var tempSchlafzimmer = getState('AllOwnCreated.0.Heizung.tempSchlafzimmer').val;
            var tempBadezimmer = getState('AllOwnCreated.0.Heizung.tempBadezimmer').val;
            var tempKeller = getState('AllOwnCreated.0.Heizung.tempKeller').val;
    
            var wohnzimmerTemp = getState('homepilot.0.devices.SchaltaktorDuoFernRaumthermostat.1010008.current_temperature').val;
            var klZimmerTemp = getState('homepilot.0.devices.SchaltaktorDuoFernRaumthermostat.1010010.current_temperature').val;
            var grZimmerTemp = getState('homepilot.0.devices.SchaltaktorDuoFernRaumthermostat.1010026.current_temperature').val;
            var vorZimmerTemp = getState('homepilot.0.devices.SchaltaktorDuoFernRaumthermostat.1010024.current_temperature').val;
            var wcneuTemp = getState('homepilot.0.devices.SchaltaktorDuoFernRaumthermostat.1010016.current_temperature').val;
            var wcAltTemp = getState('mihome.0.devices.weather_v1_158d00022c7628.temperature').val;    
            
            if (getState(id2).val !== true) {
                var middletemp = (tempFussboden + tempHeizkoerper)/2;
                var count = 0;
    
                if (wohnzimmerTemp < middletemp) {
                    count++;
                }
    
                if (klZimmerTemp < middletemp) {
                    count++;
                }
    
                if (grZimmerTemp < middletemp) {
                    count++;
                }
    
                if (vorZimmerTemp < middletemp) {
                    count++;
                }
    
                if (wcneuTemp < middletemp) {
                    count++;
                }
    
                if (wcAltTemp < middletemp) {
                    count++;
                }
    
                if (count > 3) {
                    var output = "Die Heizung wurde automatisch eingeschaltet.";
            
                    _HeizungOn(output, tempFussboden * 10, tempHeizkoerper * 10, tempSchlafzimmer * 10, tempBadezimmer * 10, tempKeller * 10);
                
                    setState("AllOwnCreated.0.Heizung.stateHeizung", true);
    
                    setTimeout(function () {
                        _HeizungOn("", tempFussboden * 10, tempHeizkoerper * 10, tempSchlafzimmer * 10, tempBadezimmer * 10, tempKeller * 10);
                    }, 60000);
                }
            }    
        }
    }
    
    function HeizungAus() {
        if (getState(id3).val === true) {
            if (getState(id1).val === true) {
                if (getState(id2).val !== true) {
                    _HeizungOff("Die Heizung wurde automatisch ausgeschaltet.");
                    
                    setState("AllOwnCreated.0.Heizung.stateHeizung", false);
    
                    setTimeout(function () {
                        _HeizungOff("");
                    }, 60000);
                }   
            }
        }
    }
    
    function Automatik(TimerEin, stundeId, minuteId, count, isHeizungOn) {
        if (logging) log("Timer" + (isHeizungOn ? "Ein" : "Aus") + count +" wird aufgesetzt");
    	if (TimerEin !== null) {
    		clearSchedule(TimerEin);
            if (logging) log("Timer wurde gelöscht");
    	}
    
        var zyklen = getState(id0).val;
    
        if (zyklen < count) {
            if (logging) log("Timer wird null retourniert");
            return null;
        }
    	
    	var	stundeEin = getState(stundeId).val;
    	var minuteEin = getState(minuteId).val;
    	var zeitEin = minuteEin + ' ' + stundeEin + ' * * *';
        if (logging) log("Timer: " + zeitEin);
    
    	TimerEin = schedule(zeitEin, function() {
            if (logging) log("Timer ist aufgesetzt");
    		if (zyklen >= count) {
                if (logging) log("Timer für " + count + " ist aufgesetzt");
    			if (isHeizungOn === true) {
                    if (logging) log("Heizung sollte eingeschalten werden");
    				HeizungEin();
    			} else {
                    if (logging) log("Heizung sollte ausgeschalten werden");
    				HeizungAus();
    			}
    		}
    	});
    
        return TimerEin;
    }
    
    setTimeout(function () {
        if (logging) log("Initialisierung der Heizung");
    
        //script start Timer bei Scriptstart setzen
        TimerOnEin1 = Automatik(TimerOnEin1, id15, id16, 1, true);
        TimerOnAus1 = Automatik(TimerOnAus1, id17, id18, 1, false);
        TimerOnEin2 = Automatik(TimerOnEin2, id25, id26, 2, true);
        TimerOnAus2 = Automatik(TimerOnAus2, id27, id28, 2, false);
        TimerOnEin3 = Automatik(TimerOnEin3, id35, id36, 3, true);
        TimerOnAus3 = Automatik(TimerOnAus3, id37, id38, 3, false);
        TimerOnEin4 = Automatik(TimerOnEin4, id45, id46, 4, true);
        TimerOnAus4 = Automatik(TimerOnAus4, id47, id48, 4, false);
        TimerOnEin5 = Automatik(TimerOnEin5, id55, id56, 5, true);
        TimerOnAus5 = Automatik(TimerOnAus5, id57, id58, 5, false);
        TimerOnEin6 = Automatik(TimerOnEin6, id65, id66, 6, true);
        TimerOnAus6 = Automatik(TimerOnAus6, id67, id68, 6, false);
        TimerOnEin7 = Automatik(TimerOnEin7, id75, id76, 7, true);
        TimerOnAus7 = Automatik(TimerOnAus7, id77, id78, 7, false);
        TimerOnEin8 = Automatik(TimerOnEin8, id85, id86, 8, true);
        TimerOnAus8 = Automatik(TimerOnAus8, id87, id88, 8, false);
        TimerOnEin9 = Automatik(TimerOnEin9, id95, id96, 9, true);
        TimerOnAus9 = Automatik(TimerOnAus9, id97, id98, 9, false);
        TimerOnEin10 = Automatik(TimerOnEin10, id105, id106, 10, true);
        TimerOnAus10 = Automatik(TimerOnAus10, id107, id108, 10, false);
       
        //Trigger Anzahl der möglichen Schaltzyklen  
        on(new RegExp(id0 + "|" + id1), function(dp) { 
            if(logging) log("Trigger Vorwahl der möglichen Heizungs-Schaltzyklen geändert");
            
            var zyklen=getState(id0).val;
    		
            switch(zyklen) {
            	case 0:
                    if(logging) log("Zyklen 0 Initialisierung");
    			
    			case 1:
                    if(logging) log("Zyklen 1 Initialisierung");
    				TimerOnEin1 = Automatik(TimerOnEin1, id15, id16, 1, true);
    				TimerOnAus1 = Automatik(TimerOnAus1, id17, id18, 1, false);
    			
    			case 2:
                    if(logging) log("Zyklen 2 Initialisierung");
    				TimerOnEin2 = Automatik(TimerOnEin2, id25, id26, 2, true);
    				TimerOnAus2 = Automatik(TimerOnAus2, id27, id28, 2, false);
    				
    			case 3:
                    if(logging) log("Zyklen 3 Initialisierung");
    				TimerOnEin3 = Automatik(TimerOnEin3, id35, id36, 3, true);
    				TimerOnAus3 = Automatik(TimerOnAus3, id37, id38, 3, false);
    				
    			case 4:
                    if(logging) log("Zyklen 4 Initialisierung");
    				TimerOnEin4 = Automatik(TimerOnEin4, id45, id46, 4, true);
    				TimerOnAus4 = Automatik(TimerOnAus4, id47, id48, 4, false);
    				
    			case 5:
                    if(logging) log("Zyklen 5 Initialisierung");
    				TimerOnEin5 = Automatik(TimerOnEin5, id55, id56, 5, true);
    				TimerOnAus5 = Automatik(TimerOnAus5, id57, id58, 5, false);
    				
    			case 6:
                    if(logging) log("Zyklen 6 Initialisierung");
    				TimerOnEin6 = Automatik(TimerOnEin6, id65, id66, 6, true);
    				TimerOnAus6 = Automatik(TimerOnAus6, id67, id68, 6, false);
    				
    			case 7:
                    if(logging) log("Zyklen 7 Initialisierung");
    				TimerOnEin7 = Automatik(TimerOnEin7, id75, id76, 7, true);
    				TimerOnAus7 = Automatik(TimerOnAus7, id77, id78, 7, false);
    				
    			case 8:
                    if(logging) log("Zyklen 8 Initialisierung");
    				TimerOnEin8 = Automatik(TimerOnEin8, id85, id86, 8, true);
    				TimerOnAus8 = Automatik(TimerOnAus8, id87, id88, 8, false);
    				
    			case 9:
                    if(logging) log("Zyklen 9 Initialisierung");
    				TimerOnEin9 = Automatik(TimerOnEin9, id95, id96, 9, true);
    				TimerOnAus9 = Automatik(TimerOnAus9, id97, id98, 9, false);
    				
    			case 10:
                    if(logging) log("Zyklen 10 Initialisierung");
                    TimerOnEin10 = Automatik(TimerOnEin10, id105, id106, 10, true);
    				TimerOnAus10 = Automatik(TimerOnAus10, id107, id108, 10, false);
    				break
    		}
        });
    
        //###################################################################
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 1
        on(new RegExp(id15 + "|" + id16), function(dp) {
            TimerOnEin1 = Automatik(TimerOnEin1, id15, id16, 1, true);
            if(logging)log("Trigger Minute/Stunde 1 ein Änderung");
        });
     
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 1
        on(new RegExp(id17 + "|" + id18), function(dp) {
            TimerOnAus1 = Automatik(TimerOnAus1, id17, id18, 1, false);
            if(logging)log("Trigger Minute/Stunde 1 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 2
        on(new RegExp(id25 + "|" + id26), function(dp) {
            TimerOnEin2 = Automatik(TimerOnEin2, id25, id26, 2, true);
            if(logging)log("Trigger Minute/Stunde 2 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 2
        on(new RegExp(id27 + "|" + id28), function(dp) {
            TimerOnAus2 = Automatik(TimerOnAus2, id27, id28, 2, false);
            if(logging)log("Trigger Minute/Stunde 2 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 3
        on(new RegExp(id35 + "|" + id36), function(dp) {
            TimerOnEin3 = Automatik(TimerOnEin3, id35, id36, 3, true);
            if(logging)log("Trigger Minute/Stunde 3 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 3
        on(new RegExp(id37 + "|" + id38), function(dp) {
            TimerOnAus3 = Automatik(TimerOnAus3, id37, id38, 3, false);
            if(logging)log("Trigger Minute/Stunde 3 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 4
        on(new RegExp(id45 + "|" + id46), function(dp) {
            TimerOnEin4 = Automatik(TimerOnEin4, id45, id46, 4, true);
            if(logging)log("Trigger Minute/Stunde 4 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 4
        on(new RegExp(id47 + "|" + id48), function(dp) {
            TimerOnAus4 = Automatik(TimerOnAus4, id47, id48, 4, false);
            if(logging)log("Trigger Minute/Stunde 4 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 5
        on(new RegExp(id55 + "|" + id56), function(dp) {
            TimerOnEin5 = Automatik(TimerOnEin5, id55, id56, 5, true);
            if(logging)log("Trigger Minute/Stunde 5 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 5
        on(new RegExp(id57 + "|" + id58), function(dp) {
            TimerOnAus5 = Automatik(TimerOnAus5, id57, id58, 5, false);
            if(logging)log("Trigger Minute/Stunde 5 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 6
        on(new RegExp(id65 + "|" + id66), function(dp) {
            TimerOnEin6 = Automatik(TimerOnEin6, id65, id66, 6, true);
            if(logging)log("Trigger Minute/Stunde 6 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 6
        on(new RegExp(id67 + "|" + id68), function(dp) {
            TimerOnAus6 = Automatik(TimerOnAus6, id67, id68, 6, false);
            if(logging)log("Trigger Minute/Stunde 6 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 7
        on(new RegExp(id75 + "|" + id76), function(dp) {
            TimerOnEin7 = Automatik(TimerOnEin7, id75, id76, 7, true);
            if(logging)log("Trigger Minute/Stunde 7 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 7
        on(new RegExp(id77 + "|" + id78), function(dp) {
            TimerOnAus7 = Automatik(TimerOnAus7, id77, id78, 7, false);
            if(logging)log("Trigger Minute/Stunde 7 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 8
        on(new RegExp(id85 + "|" + id86), function(dp) {
            TimerOnEin8 = Automatik(TimerOnEin8, id85, id86, 8, true);
            if(logging)log("Trigger Minute/Stunde 8 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 8
        on(new RegExp(id87 + "|" + id88), function(dp) {
            TimerOnAus8 = Automatik(TimerOnAus8, id87, id88, 8, false);
            if(logging)log("Trigger Minute/Stunde 8 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 9
        on(new RegExp(id95 + "|" + id96), function(dp) {
            TimerOnEin9 = Automatik(TimerOnEin9, id95, id96, 9, true);
            if(logging)log("Trigger Minute/Stunde 9 ein Änderung");
        });
     
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 9
        on(new RegExp(id97 + "|" + id98), function(dp) {
            TimerOnAus9 = Automatik(TimerOnAus9, id97, id98, 9, false);
            if(logging)log("Trigger Minute/Stunde 9 aus Änderung");
        });
    
        //Trigger Zeitverstellung Einschaltzeit für Zyklus 10
        on(new RegExp(id105 + "|" + id106), function(dp) {
            TimerOnEin10 = Automatik(TimerOnEin10, id105, id106, 10, true);
            if(logging)log("Trigger Minute/Stunde 10 ein Änderung");
        });
    
        //Trigger Zeitverstellung Ausschaltzeit für Zyklus 10
        on(new RegExp(id107 + "|" + id108), function(dp) {
            TimerOnAus10 = Automatik(TimerOnAus10, id107, id108, 10, false);
            if(logging)log("Trigger Minute/Stunde 10 aus Änderung");
        });
    }, 15000);
    

  • niemand eine Idee worans liegen könnte?


  • Meine Glaskugel ist im Augenblick ganz schön dreckig.
    Was sagen denn deine logs?

    Spontane Vermutung mit meiner dreckigen Glaskugel und ohne in den Quelltext geschaut zu haben: "Verschränkte" Timer; also Timer, die nicht ordentlich nacheinander laufen, sondern verschachtelt sind.


  • Danke für deine Antwort, aber das Problem ist, das die Timer laut logs richtig aufgezogen sind, aber einfach nicht feuern.
    Verschachtelt hab ich da eigentlich nichts, denn jeder Timer ist für sich einer. Auch die Zeiten passen alle. Sprich kein Timer könnte den anderen behindern da immer 1-2 Stunden unterschied sind.
    Das komische ist ja, wenn ich das Skript neu starte geht es ja wieder eine Zeit lang

Suggested Topics

  • 7
  • 27
  • 6
  • 5
  • 6
  • 3
  • 287
  • 27

751
Online

38.4k
Users

43.9k
Topics

613.2k
Posts