Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.2k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.5k

[Vorlage] Heizungsthermostatsteuerung 2.1 - Script

Scheduled Pinned Locked Moved Skripten / Logik
javascripttemplateheatingclimate
1.1k Posts 115 Posters 403.4k Views 61 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • eric2905E Offline
    eric2905E Offline
    eric2905
    wrote on last edited by
    #303

    Schaue ich mir mal an.

    Snapshot, basteln, fertig.

    Melde mich.

    Gruß,

    Eric

    Roses are red, violets are blue,

    if I listen to metal, my neighbours do too

    1 Reply Last reply
    0
    • A Offline
      A Offline
      Adnim
      wrote on last edited by
      #304

      Juhu Danke Looxer mit dem neuen Code-schnipsel läuft es jetzt auch bei mir Gut!

      1 Reply Last reply
      0
      • eric2905E Offline
        eric2905E Offline
        eric2905
        wrote on last edited by
        #305

        @eric2905:

        Schaue ich mir mal an.

        Snapshot, basteln, fertig.

        Melde mich. `
        bin jetzt das gekommen, das einzubauen.

        Läuft jetzt ohne manuelle Verschiebung.

        Gruß,

        Eric

        Roses are red, violets are blue,

        if I listen to metal, my neighbours do too

        1 Reply Last reply
        0
        • L Offline
          L Offline
          looxer01
          wrote on last edited by
          #306

          @eric2905:

          Läuft jetzt ohne manuelle Verschiebung. `
          super danke euch fürs update.

          Ich denke, dass ich es am Ende nochmal anders einbauen werde. (ohne Zufallszahlen)

          Damit dürften auch keine zufälligen Überschneidungen auftreten.

          vG Looxer

          1 Reply Last reply
          0
          • eric2905E Offline
            eric2905E Offline
            eric2905
            wrote on last edited by
            #307

            Gib mir ein paar Tage zum Testen - habe es erst heute eingebaut.

            Gruß,

            Eric

            Roses are red, violets are blue,

            if I listen to metal, my neighbours do too

            1 Reply Last reply
            0
            • tobetobeT Offline
              tobetobeT Offline
              tobetobe
              wrote on last edited by
              #308

              @looxer01:

              Zwei zusätzliche Zeilen sollten hier Abhilfe veschaffen. Ich waere dankbar, wenn das jemand testen könnte.

              (Es wird eine zufällige Zeitverschiebung zwischen 1 und 30 Sekunden eingeplant.) `

              Hi Looxer,

              Ich habe die Änderung am vergangenen Wochenende eingespielt, nachdem ich wegen häufig auftretender Fehlern beim Schedulewechsel wieder auf die alte Version zurückgegangen war. Seitdem läuft die V2 absolut stabil. Vielen Dank!

              Beste Grüße
              tobetobe

              1 Reply Last reply
              0
              • L Offline
                L Offline
                looxer01
                wrote on last edited by
                #309

                @looxer01:

                Ich denke, dass ich es am Ende nochmal anders einbauen werde. (ohne Zufallszahlen) `

                Hi,

                ich habe mich des Themas nochmal angenommen da ich die Befürchtung habe, dass durch die Zufallszahlen auch Überschneidungen des Schedules vorkommen können. Die Wahrscheinlichkeit erhöht sich mit der Anzahl der zu planenden Räume.

                Daher habe ich jetzt folgendes implementiert:

                1. Die schedules werden mit einem Abstand von 2 Sekunden eingeplant

                2. Wenn es mehr als 28 zu heizende Räume gibt (wohl unwahrscheinlich, dann wird angefangen jede Sekunde zu planen

                3. erst ab 59 zu heizenden Räume gibt es Überschneidungen.

                Die Fälle 2 und 3 dürften wohl eher theoretisch sein.

                Wäre schön, wenn jemand testen könnte, ob die 2 Sekunden Abstand reichen. Ich habe bei mir damit kein Problem, hatte ich vorher aber auch nicht.

                Zum Testen einfach wieder die Funktion austauschen:

                ! ````
                //-----------------------------------------------------------------------------------------------------
                // Funktion ExecuteTempDetermination checkt ob eineThermostat/Raum Temperatur manuell angpasst wurde
                //-----------------------------------------------------------------------------------------------------
                function ExecuteTempDetermination(roomName, id) {
                var ActiveRoomProfile;
                var ScheduledSollTemp;
                ! // Findung des aktuellen RaumProfiles
                ActiveRoomProfile = ActiveProfile(roomName); // Ermittlung des aktiven Raumprofils
                //die geplante Soll Temperatur aus dem Raumschedule aus dem aktuellen Profil ermitteln
                ScheduledSollTemp = SelectSwitchTime(roomName, ActiveRoomProfile, "CurrSollTemp",id); // Ermittlung der geplanten Solltemperatur
                if (debug) {
                log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach Switchtime: " + ScheduledSollTemp + " Findung " + Source_SchedulePoint, "info");
                }
                // Schauen ob die ermittelte Temperatur angepasst werden muss z.B. party Gaeste etc
                ScheduledSollTemp = OverruleSollTemp(roomName, ActiveRoomProfile, ScheduledSollTemp, id); //Global und Profilparameter koennen den schedule uebersteuern
                if (debug) {
                log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach overrule: " + ScheduledSollTemp+ " Findung " + Source_GlobalParameter, "info");
                }
                ! // jetzt die Temperatur dem Thermostat uebermitteln
                SetTemp(roomName, ScheduledSollTemp, id, true); // jetzt die Temperatur schalten
                ! if (NextSchedules[roomName]) {
                if (debug) { log("Schedule gelöscht für " + roomName, "info"); }
                clearSchedule(NextSchedules[roomName]);
                NextSchedules[roomName] = null;
                }
                // jetzt Delay-Sekunden ermitteln, um die Schedules nicht gleichzeitig auszuführen
                var delaysek=0;
                var z = 1;
                for (var roomCheck in rooms) { // loop ueber all Raeume
                roomCheck = roomCheck.replace(/\s/g, "_"); // Blanks durch unterstrich ersetzen
                if ( roomCheck === roomName) {
                delaysek = z * 2; // es werden alle 2 Sekunden ein schedule geplant also 2,4,6....
                if (delaysek > 58) { // jetzt sind 58 Sekunden erreicht
                delaysek = (delaysek - 59) * 2 - 1 ; // also mit 1,3,5... Sekunden weiter planen
                }
                if ( z > 59) { // mehr als 59 Räume mit Thermostaten? wohl kaum
                delaysek = 0;
                }
                break;
                }
                z = z + 1
                }//endfor roomcheck

                // jetzt die Cron Pattern bestimmen und einplanen
                var schedArr = Source_SchedulePoint.split("_"); // [0]=Mo, [1]=00:00:00
                schedArr[1] = schedArr[1].substr(0,6) + delaysek;
                var nextSchedule = parseInt(schedArr[1].substr(6, 2), 10) + " " + parseInt(schedArr[1].substr(3, 2), 10) + " " + parseInt(schedArr[1].substr(0, 2), 10) + " * * *";
                if (debug) { log("Setze Schedule für nächste Planzeit " + nextSchedule + " für Raum " + roomName, "info"); }
                NextSchedules[roomName] = schedule(nextSchedule, function() {
                    if (debug) { log("Schedule Triggered für nächste Planzeit für Raum " + roomName, "info"); }
                    TriggerUpdate(roomName);
                });
                

                } // ende Funktion

                ! ````

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  passuff
                  wrote on last edited by
                  #310

                  @looxer01:

                  @looxer01:

                  Ich denke, dass ich es am Ende nochmal anders einbauen werde. (ohne Zufallszahlen) `

                  Hi,

                  ich habe mich des Themas nochmal angenommen da ich die Befürchtung habe, dass durch die Zufallszahlen auch Überschneidungen des Schedules vorkommen können. Die Wahrscheinlichkeit erhöht sich mit der Anzahl der zu planenden Räume.

                  Daher habe ich jetzt folgendes implementiert:

                  1. Die schedules werden mit einem Abstand von 2 Sekunden eingeplant

                  2. Wenn es mehr als 28 zu heizende Räume gibt (wohl unwahrscheinlich, dann wird angefangen jede Sekunde zu planen

                  3. erst ab 59 zu heizenden Räume gibt es Überschneidungen.

                  Die Fälle 2 und 3 dürften wohl eher theoretisch sein.

                  Wäre schön, wenn jemand testen könnte, ob die 2 Sekunden Abstand reichen. Ich habe bei mir damit kein Problem, hatte ich vorher aber auch nicht.

                  Zum Testen einfach wieder die Funktion austauschen:

                  ! ````
                  //-----------------------------------------------------------------------------------------------------
                  // Funktion ExecuteTempDetermination checkt ob eineThermostat/Raum Temperatur manuell angpasst wurde
                  //-----------------------------------------------------------------------------------------------------
                  function ExecuteTempDetermination(roomName, id) {
                  var ActiveRoomProfile;
                  var ScheduledSollTemp;
                  ! // Findung des aktuellen RaumProfiles
                  ActiveRoomProfile = ActiveProfile(roomName); // Ermittlung des aktiven Raumprofils
                  //die geplante Soll Temperatur aus dem Raumschedule aus dem aktuellen Profil ermitteln
                  ScheduledSollTemp = SelectSwitchTime(roomName, ActiveRoomProfile, "CurrSollTemp",id); // Ermittlung der geplanten Solltemperatur
                  if (debug) {
                  log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach Switchtime: " + ScheduledSollTemp + " Findung " + Source_SchedulePoint, "info");
                  }
                  // Schauen ob die ermittelte Temperatur angepasst werden muss z.B. party Gaeste etc
                  ScheduledSollTemp = OverruleSollTemp(roomName, ActiveRoomProfile, ScheduledSollTemp, id); //Global und Profilparameter koennen den schedule uebersteuern
                  if (debug) {
                  log("Routine ExecuteTempDetermination: raum " + roomName + "Solltemp nach overrule: " + ScheduledSollTemp+ " Findung " + Source_GlobalParameter, "info");
                  }
                  ! // jetzt die Temperatur dem Thermostat uebermitteln
                  SetTemp(roomName, ScheduledSollTemp, id, true); // jetzt die Temperatur schalten
                  ! if (NextSchedules[roomName]) {
                  if (debug) { log("Schedule gelöscht für " + roomName, "info"); }
                  clearSchedule(NextSchedules[roomName]);
                  NextSchedules[roomName] = null;
                  }
                  // jetzt Delay-Sekunden ermitteln, um die Schedules nicht gleichzeitig auszuführen
                  var delaysek=0;
                  var z = 1;
                  for (var roomCheck in rooms) { // loop ueber all Raeume
                  roomCheck = roomCheck.replace(/\s/g, "_"); // Blanks durch unterstrich ersetzen
                  if ( roomCheck === roomName) {
                  delaysek = z * 2; // es werden alle 2 Sekunden ein schedule geplant also 2,4,6....
                  if (delaysek > 58) { // jetzt sind 58 Sekunden erreicht
                  delaysek = (delaysek - 59) * 2 - 1 ; // also mit 1,3,5... Sekunden weiter planen
                  }
                  if ( z > 59) { // mehr als 59 Räume mit Thermostaten? wohl kaum
                  delaysek = 0;
                  }
                  break;
                  }
                  z = z + 1
                  }//endfor roomcheck

                  // jetzt die Cron Pattern bestimmen und einplanen
                  var schedArr = Source_SchedulePoint.split("_"); // [0]=Mo, [1]=00:00:00
                  schedArr[1] = schedArr[1].substr(0,6) + delaysek;
                  var nextSchedule = parseInt(schedArr[1].substr(6, 2), 10) + " " + parseInt(schedArr[1].substr(3, 2), 10) + " " + parseInt(schedArr[1].substr(0, 2), 10) + " * * *";
                  if (debug) { log("Setze Schedule für nächste Planzeit " + nextSchedule + " für Raum " + roomName, "info"); }
                  NextSchedules[roomName] = schedule(nextSchedule, function() {
                      if (debug) { log("Schedule Triggered für nächste Planzeit für Raum " + roomName, "info"); }
                      TriggerUpdate(roomName);
                  });
                  

                  } // ende Funktion

                  ! ```` `

                  führt bei mir zu folgenden Fehlermeldungen:

                  13:15:49.049 [error] javascript.0 at ManAdjustments (script.js.common.Heizungssteuerung:1034:68)

                  13:15:49.049 [error] javascript.0 at LoopDevices (script.js.common.Heizungssteuerung:863:18)

                  13:15:49.049 [error] javascript.0 at LoopRooms (script.js.common.Heizungssteuerung:763:13)

                  13:15:49.050 [error] javascript.0 at Object. (script.js.common.Heizungssteuerung:419:9)

                  1 Reply Last reply
                  0
                  • L Offline
                    L Offline
                    looxer01
                    wrote on last edited by
                    #311

                    @passuff:

                    führt bei mir zu folgenden Fehlermeldungen: `

                    Hi,

                    Die Fehler sind leider nicht selbsterklärend. Sieht so aus, dass an der Stelle der Subscriptions was schief geht.

                    Allerdings ist keine subscriptionsrelevante Aenderung in der Funktion angefasst worden. Daher bin ich da gerade ratlos.

                    schick mir doch mal deine Programmversion. Schaue ich mir dann an.

                    Hat sonst noch jemand Fehler mit der Funktion ?

                    vG Looxer

                    1 Reply Last reply
                    0
                    • eric2905E Offline
                      eric2905E Offline
                      eric2905
                      wrote on last edited by
                      #312

                      Hi,

                      ich hatte jetzt auch wieder Probleme mit dem automatischen Umschalten.

                      Ich habe das Gefühl, das die ganzen Subscriptions (zusammen mit vielen anderen) für die eine JavaScript-Instanz zu viel war.

                      Habe Dein Script jetzt auf einem eigenen ioBroker-Host (Multihost-Umgebung) mit eigener JS-Instanz umgezogen. Mal sehen, wie es jetzt läuft.

                      Gruß,

                      Eric

                      Roses are red, violets are blue,

                      if I listen to metal, my neighbours do too

                      1 Reply Last reply
                      0
                      • L Offline
                        L Offline
                        looxer01
                        wrote on last edited by
                        #313

                        @eric2905:

                        ich hatte jetzt auch wieder Probleme mit dem automatischen Umschalten. `
                        Hi Eric,

                        ich vermute eher, dass es daran liegt, dass eben auch zufällig Schedules gleichzeitig liegen können. (Zufallsfunktion)

                        Daher habe ich die Funktion angepasst und die Verschiebung ist jetzt für jeden Raum immer Gleich.

                        Also z.B. Schlafzimmer hat dann immer plus 8 Sekunden.- Abhängig von der Position des Raumes in der Raumliste.

                        (4.Position z.B. mal 2 Sekunden = 8 Sekunden)

                        Die Subscriptions an sich bzw die schedules sollten nicht wirklich Performance Probleme auslösen.

                        Daher glaube ich eher, dass es an Schedule-Überschneidungen liegt.

                        Hast du schon die neue Funktion probiert. Läuft die ohne Fehler bei dir ?

                        Ich weiss auch nicht ob die 2 Sekunden Abstand ausreichend sind. Daher wäre ein Test klasse.

                        vG Looxer

                        1 Reply Last reply
                        0
                        • eric2905E Offline
                          eric2905E Offline
                          eric2905
                          wrote on last edited by
                          #314

                          Hi,

                          die neue Funktion läuft ohne Probleme, sofern der Raum überhaupt „angesprungen“ wurde.

                          Mittels Pushover habe ich Verschiebungen gesehen, aber es fehlten ab und an halt wieder mal Räume.

                          Da ich über 40 Scripte auf der einen JS-Instanz laufen habe (die nimmt sich über 150 MB RAM), denke ich eher an ein Problem in Richtung „zu viel Subscriptions“, o.ä.

                          Mal sehen, wie es sich jetzt verhält.

                          Gruß,

                          Eric

                          Roses are red, violets are blue,

                          if I listen to metal, my neighbours do too

                          1 Reply Last reply
                          0
                          • P Offline
                            P Offline
                            passuff
                            wrote on last edited by
                            #315

                            @passuff:

                            führt bei mir zu folgenden Fehlermeldungen:

                            13:15:49.049 [error] javascript.0 at ManAdjustments (script.js.common.Heizungssteuerung:1034:68)

                            13:15:49.049 [error] javascript.0 at LoopDevices (script.js.common.Heizungssteuerung:863:18)

                            13:15:49.049 [error] javascript.0 at LoopRooms (script.js.common.Heizungssteuerung:763:13)

                            13:15:49.050 [error] javascript.0 at Object. (script.js.common.Heizungssteuerung:419:9) `

                            Sorry, war ein copy & paste Fehler. Das Skript funktioniert.

                            1 Reply Last reply
                            0
                            • eric2905E Offline
                              eric2905E Offline
                              eric2905
                              wrote on last edited by
                              #316

                              Hi looxer01,

                              es wurde wieder ein Raum "ausgelassen".

                              Wie, nach welcher Logik, werden die Räume abgearbeitet?

                              Ich habe die Räume jetzt mal fest eingetragen und die Raumliste aktiviert.

                              Morgen früh mal sehen, ob jetzt alles geschaltet wird, wie es soll.

                              Gruß,

                              Eric

                              Roses are red, violets are blue,

                              if I listen to metal, my neighbours do too

                              1 Reply Last reply
                              0
                              • L Offline
                                L Offline
                                looxer01
                                wrote on last edited by
                                #317

                                @eric2905:

                                Wie, nach welcher Logik, werden die Räume abgearbeitet? `
                                Hi Eric,

                                Wenn ein Sensor geöffnet ist oder eine manuelle Temperatur eingestellt ist, dann wir der schedule nicht ausgeführt.

                                VG locxer

                                Von unterwegs

                                1 Reply Last reply
                                0
                                • eric2905E Offline
                                  eric2905E Offline
                                  eric2905
                                  wrote on last edited by
                                  #318

                                  Hi Looxer,

                                  ich meinte, wenn die Zeiten quasi identisch sind (z.B. 05:00 Uhr), und immer wieder zwei Räume auffällig sind (einer, „Schlafzimmer“, öfter und „Bad“ seltener). Alle anderen sieben Räume laufen ohne Probleme.

                                  Keine manuelle Änderung - das funktioniert problemlos.

                                  Gruß,

                                  Eric

                                  Roses are red, violets are blue,

                                  if I listen to metal, my neighbours do too

                                  1 Reply Last reply
                                  0
                                  • L Offline
                                    L Offline
                                    looxer01
                                    wrote on last edited by
                                    #319

                                    @eric2905:

                                    ich meinte, wenn die Zeiten quasi identisch sind (z.B. 05:00 Uhr `
                                    Hi Eric,

                                    Moeglichweise reichen die 2 Sek bei dir nicht.

                                    Werde mal eine Variante machen. Wie viel Räume hast du ?

                                    Vg looxer

                                    1 Reply Last reply
                                    0
                                    • eric2905E Offline
                                      eric2905E Offline
                                      eric2905
                                      wrote on last edited by
                                      #320

                                      @looxer01:

                                      Werde mal eine Variante machen. Wie viel Räume hast du ? `
                                      Ich habe 9 Räume drin.

                                      Gib mir die Codestelle, die ich ändern muss, dann mache ich das.

                                      Gruß,

                                      Eric

                                      Roses are red, violets are blue,

                                      if I listen to metal, my neighbours do too

                                      1 Reply Last reply
                                      0
                                      • L Offline
                                        L Offline
                                        looxer01
                                        wrote on last edited by
                                        #321

                                        @eric2905:

                                        Ich habe 9 Räume drin.

                                        Gib mir die Codestelle, die ich ändern muss, dann mache ich das. `

                                        Trag hier:

                                        delaysek = z * 2;

                                        Statt 2 einfach 6 ein.

                                        Das ist das Max. Ich muss dann mal auch Minuten einbeziehen. Ist aber aufwendiger

                                        Vg looxer

                                        1 Reply Last reply
                                        0
                                        • Q Offline
                                          Q Offline
                                          quorle
                                          wrote on last edited by
                                          #322

                                          Guten Morgen liebe Gemeinde,

                                          ich hätte wieder einmal ein kleines Anliegen bzw. Problemchen.

                                          Und zwar wollte ich heute einen Raum umstellen auf einen 3-Punkt-Regler. Der 3-Punkt-Regler ist ein eigenes Script was die aktuell gemessene Raumtemperatur ( hm-rpc.1.CUX1200001.1.TEMPERATURE ) nimmt und den aktuell vorgegebenen Solltemperaturwert vom Heizungsscript mit dazu nimmt und dann einen neuen Teperaturwert liefert, der in eine Variable ( javascript.0.Ausgabe_neuesScript_Sollwert_Temp_an_Regler ) geschrieben wird. Dies funktioniert auch soweit ganz gut, jedoch wie bekomme ich die neue Vorgabe in das Heizungsscript, sodass dieses dann an die Regler schickt? Oder wäre dies zu umständlich und ich sollte den neuen Wert einfach aus dem Script des 3-Punkt-Reglers an die einzelnen Regler senden?

                                          Ausserdem stellt das Heizungsscript leider die Regler nicht mehr automatisch in den manuellen Modus, den man ja eigentlich benötigt, oder?

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          461

                                          Online

                                          32.5k

                                          Users

                                          81.7k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe