Skip to content
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

[Vorlage] Heizungsthermostatsteuerung 2.1 - Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascripttemplateheatingclimate
1.1k Beiträge 115 Kommentatoren 396.1k Aufrufe 61 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • eric2905E Offline
    eric2905E Offline
    eric2905
    schrieb am zuletzt editiert von
    #290

    @Kochenmitmusik

    In Deinem, extra zu diesem Thema eröffneten Thread warten wir auf Antworten von Dir.

    Dein „Problem“ hat nichts mit dem Heizungsscript zu tun - es „leidet“ unter einer Fehlkonfig / einem Bug auf Deiner CCU.

    Gruß,

    Eric

    Von unterwegs getippert

    Roses are red, violets are blue,

    if I listen to metal, my neighbours do too

    1 Antwort Letzte Antwort
    0
    • A Offline
      A Offline
      Adnim
      schrieb am zuletzt editiert von
      #291

      @eric2905:

      Hi,

      genau das meine ich. Der betreffende Raum wird zeitgleich mit anderen Räumen geschaltet, und nur dieser ändert die Soll-Temp nicht.

      Ich kriege das ja so gar nicht mit. Immer wenn ich dann mal auf die aktuellen Werte schaue, sehe ich dann, das es nicht passt. Script-Neustart und sofort wird der Raum nachgezogen.

      Logging mach ich mal an.

      Später werde ich den Raum mal um 5 Minuten verschieben. Mal sehen, ob das was bringt.

      Gruß,

      Eric

      Von unterwegs getippert `

      Hi

      habe mal rumgespielt indem ich nur 2 Räume im Script eingetragen habe,danach funzt anscheinend alles Reibungslos. Würde auch gerne mal ein Delay hier testen bekomme das aber nicht so hin.

      hier wird im Script das Thermostat geschaltet? (Zeile 1396)

       // jetzt die Temperatur dem Thermostat uebermitteln
          SetTemp(roomName, ScheduledSollTemp, id, true);  // jetzt die Temperatur schalten
      

      Wenn ich das änder in :

       SetTempDelayed(roomName, ScheduledSollTemp, id, true,15000);
      

      bekomm ich nen error im Log. Kann man hier einen Delay setzten und wie? Edit: Bzw bringt mir das überhaupt etwas da ja dann alle Räume den gleichen Delay bekommen, für jeden ein unterschiedlicher wäre besser

      Edit2: Habe im Wohnzimmer 4xTFK, 2xThermostate und 1xWandthermostat (keine Direktverknüpfungen). Sobald ich diesen aussen vorlasse Funzt es

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #292

        @Adnim:

        hier wird im Script das Thermostat geschaltet? (Zeile 1396) `
        Nein, in Zeile 482 wird der Sollwert an das Thermostat gesendet (glaube ich)

            setState(stateId, val);
        
        

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • A Offline
          A Offline
          Adnim
          schrieb am zuletzt editiert von
          #293

          ok habe es nicht lassen können, das habe ich ergoogelt, könnte das funzen error habe ich nicht?

          var delaymin1 = 5;
          var delaymax1 = 10;
          var zufallsdelay = Math.floor(Math.random() * (delaymax1 - delaymin1)) + delaymin1;
          
          function setOwnState(stateId, val) {
              if (stateId.indexOf(path) !== -1 && cron === 0) {
                  if (! ownStateChanges[stateId]) ownStateChanges[stateId] = 1;
                      else ownStateChanges[stateId]++;
              }
              setStateDelayed(stateId, val,true,zufallsdelay);
          

          edit: nope das führt zu einer endlosschleife

          1 Antwort Letzte Antwort
          0
          • Q Offline
            Q Offline
            quorle
            schrieb am zuletzt editiert von
            #294

            Leute, hab ich es richtig verstanden, dass die Solltemperatur die zum Regler gesendet wird nur im VIS einzustellen ist? Und diese nicht im Programm an den Regler gesendet wird?

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              PicNic
              schrieb am zuletzt editiert von
              #295

              Hallo Looxer,

              seit meinem letzten (hausgemachten) Problem läuft alles wie am Schnürchen. Und da nun alles fein ist, kommen einem auch Ideen, wie es noch feiner laufen könnte 😉

              Ich frage mich, ob es möglich wäre pro Verschluss ein Delay einzutragen die das Skript wartet um am zugehörigen Thermostat die Temperatur abzusenken.

              Das wäre bei uns z.B. die Terrassentür, oder die Haustür.

              Bei der Haustür zum Beispiel, wenn die Tür zum alleinigen Verlassen des Hauses nur kurz auf und direkt wieder zu geht oder auch beim Verlassen des Hauses mit Kindern (ja, ja … das kann dann gut auch mal 30 Sekunden dauern bis sich die Tür wieder schließt). Heißt, dass die Temperatur erst abgesenkt werden soll, wenn die Tür z.B. länger als 30 Sek. geöffnet ist um Einkäufe reinzutragen oder die sehr sperrige in einen Teppich eingewickelte Leiche in den vor der Tür wartenden Transporter zu verladen ...

              Wäre so etwas möglich?

              Danke und viele Grüße

              PicNic

              1 Antwort Letzte Antwort
              0
              • paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #296

                @quorle:

                hab ich es richtig verstanden, dass die Solltemperatur die zum Regler gesendet wird nur im VIS einzustellen ist? Und diese nicht im Programm an den Regler gesendet wird? `
                Nein, da Du eine Reglerkaskade möchtest, wird die Solltemperatur, die zum Regler gesendet wird, im Skript gesendet. Der Vorgabesollwert für den Hilfsregler (Skript) ist ein virtueller Datenpunkt ("javascript.0…"), dessen Wert im VIS einzustellen ist.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  Smartuser
                  schrieb am zuletzt editiert von
                  #297

                  Hallo Zusammen,

                  kurze Zwischenfrage 🙂

                  Gibt es bei den "Zeit-Widgets" eine Möglichkeit die Sekunden nicht mit anzuzeigen?
                  1853_unbenannt.png
                  Diese Option verhindert ja nur dass die Sekunden im Popup nicht angezeigt werden.

                  Würde das nicht Sinn machen die dann auch komplett auszublenden?

                  Oder geht das irgendwo anders?

                  Gruß

                  1 Antwort Letzte Antwort
                  0
                  • A Offline
                    A Offline
                    Adnim
                    schrieb am zuletzt editiert von
                    #298

                    Hi

                    hier noch mehr gefilterte Logs, überschreiten ungepackt leider die 2mb grenze daher als archiv; vielleicht hilfts…
                    4760_log25.02.rar

                    1 Antwort Letzte Antwort
                    0
                    • U Offline
                      U Offline
                      UweS
                      schrieb am zuletzt editiert von
                      #299

                      Hallo

                      Jetzt konnte ich ein schon gelöstes Problem wieder erkennen.

                      Die Abwesenheitserkennung ist aktiviert und funktioniert. D.h. wenn alle G tags außer Haus sind geht der Status Jemand Da auf false.

                      Ich bin heute um 14:46 nach Hause gekommen und der Status hat sich auf true gesetzt, allerdings im Heizplan ist zwar das Häckchen auf anwesend aber die Temp passt sich nicht an.

                      4787_screenshoot_heizung.png
                      4787_screenshoot_heizplan.png

                      Logs kann ich nachliefern.

                      Was mir jetzt noch aufgefallen ist.

                      Wenn ich im VIS z.B. Partymodus anwähle dann ändert sich die Temp und wenn ich diesen abwähle passt die eingestellte Temp wieder.

                      Vielleicht hilft das ja für die Fehlersuche.

                      Vielen Dank für die Hilfe

                      1 Antwort Letzte Antwort
                      0
                      • eric2905E Offline
                        eric2905E Offline
                        eric2905
                        schrieb am zuletzt editiert von
                        #300

                        Hi Looxer,

                        @looxer01:

                        @eric2905:

                        Später werde ich den Raum mal um 5 Minuten verschieben. Mal sehen, ob das was bringt. `
                        Das könnte sogar helfen. Ich hatte mal darüber nachgedacht den Schedule immer ein paar Sekunden zu verschieben damit es keine Konflikte gibt.

                        Wenn du das erfolgreich testest, dann weiss ich was zu tun ist. `
                        ich habe jetzt (nach Test mit einem Raum) alle Räume mit jeweils 1 Minute Verschiebung laufen. Der Test mit allen 9 Räumen läuft nun seit fast 2 Wochen und seitdem habe ich keine "Fehl-Einstellungen" mehr festgestellt. Alle Räume schalten zu den definierten Zeiten (lasse mich derzeit jeweils per Pushover informieren).

                        Gruß,

                        Eric

                        Roses are red, violets are blue,

                        if I listen to metal, my neighbours do too

                        1 Antwort Letzte Antwort
                        0
                        • S Offline
                          S Offline
                          Stefan_1969
                          schrieb am zuletzt editiert von
                          #301

                          Hallo zusammen!

                          Von mir auch mal ein grosses Lob! Hab das Script und visu jetzt seit drei, vier Wochen in Betrieb und es funktioniert soweit gut. Auch Dank der Tipps, die es hier immer wieder gibt.

                          Hut ab und Daumen hoch!

                          Viele Grüsse - Stefan


                          ioBroker, grafana, influx, mariaDB, pihole, MotionEye auf proxmox
                          Geräte: Homematic, Shelly, Sonoff, Gosund, WEMOS

                          1 Antwort Letzte Antwort
                          0
                          • L Offline
                            L Offline
                            looxer01
                            schrieb am zuletzt editiert von
                            #302

                            Hi,

                            leider bin ich zur Zeit beruflich ziemlich landunter. Habt ihr sicher an meinen fehlenden Antworten gemerkt.

                            Liegt eben daran, dass auch die Wochenenden mit Arbeitszeiten versehen sind. Ich hoffe, dass sich das bald wieder aendert.

                            Das Thema der nicht ausgefuehrten Schaltungen zu den geplanten Zeiten hat sich ja geklärt. Gleiche Uhrzeiten des schedules können zu Problemen führen.

                            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.)

                            Hierzu einfach die Funktion austauschen.

                            vG Looxer

                            ! ! //----------------------------------------------------------------------------------------------------- // 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; } // Mo_00:00:00 var schedArr = Source_SchedulePoint.split("_"); // [0]=Mo, [1]=00:00:00 var ZufallSek = Math.floor(Math.random() * (30 - 1 + 1)) + 1; schedArr[1] = schedArr[1].substr(0,6) + ZufallSek; 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 Antwort Letzte Antwort
                            0
                            • eric2905E Offline
                              eric2905E Offline
                              eric2905
                              schrieb am zuletzt editiert von
                              #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 Antwort Letzte Antwort
                              0
                              • A Offline
                                A Offline
                                Adnim
                                schrieb am zuletzt editiert von
                                #304

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

                                1 Antwort Letzte Antwort
                                0
                                • eric2905E Offline
                                  eric2905E Offline
                                  eric2905
                                  schrieb am zuletzt editiert von
                                  #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 Antwort Letzte Antwort
                                  0
                                  • L Offline
                                    L Offline
                                    looxer01
                                    schrieb am zuletzt editiert von
                                    #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 Antwort Letzte Antwort
                                    0
                                    • eric2905E Offline
                                      eric2905E Offline
                                      eric2905
                                      schrieb am zuletzt editiert von
                                      #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 Antwort Letzte Antwort
                                      0
                                      • tobetobeT Offline
                                        tobetobeT Offline
                                        tobetobe
                                        schrieb am zuletzt editiert von
                                        #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 Antwort Letzte Antwort
                                        0
                                        • L Offline
                                          L Offline
                                          looxer01
                                          schrieb am zuletzt editiert von
                                          #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 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          721

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe