Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      IDiver last edited by

      @looxer01:

      @looxer01:

      Ist ein Fenster über einen Zeitabschnittswechsel geöffnet, wird nicht auf den neuen Zeitabschnitt gewechselt sondern der zum Zeitpunkt

      der Fensteröffnung verwendete Zeitabschnitt wird weiterverwendet bis ein neuer Wechsel eintritt oder das Script neu gestartet wird. `
      Hi,

      Hab mir gerade mal den Code angesehen und es scheint, dass ich bei "nicht drekt verknuepften" Sensoren bei Fensterstatus "geschlossen" eine neue TempFindung anstosse aber nicht bei direkt verknüpften Sensoren.

      Scheint ein Fehler zu sein und ist mir noch nicht aufgefallen.

      Deine Sensoren sind direkt verknuepft - korrekt ?

      vG Looxer `

      Hallo,

      Habe jetzt im Script bei dem Raumthermostat und den HK-Thermostaten den Punkt "7.Steuerung DV " auf "false" und bei den

      Verschlüssen den Punkt 7 "Direktverknuepft" ebenfalls auf "false" gesetzt OHNE die Verknüpfung auf der CCu tatsächlich aufzulösen.

      Jetzt geht's, es wird nach dem Schließen des Fensters die Richtige Temperatur hergenommen und der richtige Zeitabschnitt angezeigt.

      Danke für deine Hilfe, lasse es jetzt mal so laufen.

      Lg Helmut

      1 Reply Last reply Reply Quote 0
      • L
        looxer01 last edited by

        @IDiver:

        Habe jetzt im Script bei dem Raumthermostat und den HK-Thermostaten den Punkt "7.Steuerung DV " auf "false" und bei den

        Verschlüssen den Punkt 7 "Direktverknuepft" ebenfalls auf "false" gesetzt OHNE die Verknüpfung auf der CCu tatsächlich aufzulösen. `
        Hi,

        ja, das geht natürlich aber da könnten dann unerwünschte Nebeneffekte auftreten.

        Könntest du folgenden Fix mal testen ? Dann brauchst du nicht auf nicht direkt verknüpft umstellen.

        vG Looxer

        //-----------------------------------------------------------------------------------------------------
        // Funktion SensorChange  erkennt die Verschlussstellung eines Sensors und stellt die Temperatur entsprechend ein
        //-----------------------------------------------------------------------------------------------------
        function SensorChange(id) {
            var tabNo;
            tabNo = SensorFind(id);
        
            if (tabNo === 999) {
               log("Routine SensorChange: Sensor " + id + " nicht in Sensorliste gefunden","info");
               return; // Sensor nicht in Sensorlist gefunden
            }
        
            SensorList[tabNo][7] = SensorStatCalc(id, SensorList[tabNo][2]); // id des Sensors und device type - Der Status des Sensors wird ermittelt und in die sensorliste eingetragen
        
            // Status des Verschlusses in Tabelle updaten
            var room = SensorList[tabNo][0].toString();
        
            // Wenn keine Heizperiode
            if (getState(StateHeizperiode).val === false) {
                return; // keine Heizperiode
            }
            if (getState(path + "." + room + ".Source_Profil").val === 0 ) {
                return; // es ist noch kein Profil dem Raum zugeordnet
            }
            if (debug) {
                log("Routine SensorChange: Fenster " + id + " status geaendert fuer " +  SensorList[tabNo][1] + " " +  SensorList[tabNo][0] + " " + SensorList[tabNo][7], "info" );
                log("Routine SensorChange: Raum " + room, "info");
                log("Routine SensorChange: Sensor ist direktverknuepft ? " + SensorList[tabNo][9]);
                log("Routine SensorChange: Sensor status ist ? " +  SensorList[tabNo][7]);
            }
        
            if (SensorList[tabNo][9] ) {  // Sensor ist direktverknuepft und wurde geoeffnet
                if (debug) {
                    log("Routine SensorChange: Sensor Direktverknuepft  Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+  SensorList[tabNo][7], "info" );
                }
                writelog(room, id, "Routine SensorChange: Sensor Direktverknuepft  Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+  SensorList[tabNo][7])  ;
                if (VerschlussRaumStatus(room) === true ) { // Mindestens ein Fenster ist geoeffnet
                    setOwnState(path + "." + room + ".RaumStatusVerschluss", true);  // Raum ist geoeffnet         
                    SaveStatus("Fenster", room,false); // Meldung Absenkung  ein Fenster ist geoeffnet
                } else {
                    ExecuteTempDetermination(roomName, id);
                    writelog(roomName, id, "Sensor ausgeloest - auf geschlossen");
                    setOwnState(path + "." + room + ".RaumStatusVerschluss", false);  // Raum ist geschlossen 
                    SaveStatus("Heizplan", room,false); // Meldung loeschen
                }
                return;                                                                                                                     // nichts machen, da die Absenkung automatisch passiert
        
            }
        
            LoopDevices(room, true);
        
        } // ende Funktion
        
        
        1 Reply Last reply Reply Quote 0
        • I
          IDiver last edited by

          @looxer01:

          @IDiver:

          Habe jetzt im Script bei dem Raumthermostat und den HK-Thermostaten den Punkt "7.Steuerung DV " auf "false" und bei den

          Verschlüssen den Punkt 7 "Direktverknuepft" ebenfalls auf "false" gesetzt OHNE die Verknüpfung auf der CCu tatsächlich aufzulösen. `
          Hi,

          ja, das geht natürlich aber da könnten dann unerwünschte Nebeneffekte auftreten.

          Könntest du folgenden Fix mal testen ? Dann brauchst du nicht auf nicht direkt verknüpft umstellen.

          vG Looxer

          //-----------------------------------------------------------------------------------------------------
          // Funktion SensorChange  erkennt die Verschlussstellung eines Sensors und stellt die Temperatur entsprechend ein
          //-----------------------------------------------------------------------------------------------------
          function SensorChange(id) {
              var tabNo;
              tabNo = SensorFind(id);
          
              if (tabNo === 999) {
                 log("Routine SensorChange: Sensor " + id + " nicht in Sensorliste gefunden","info");
                 return; // Sensor nicht in Sensorlist gefunden
              }
          
              SensorList[tabNo][7] = SensorStatCalc(id, SensorList[tabNo][2]); // id des Sensors und device type - Der Status des Sensors wird ermittelt und in die sensorliste eingetragen
          
              // Status des Verschlusses in Tabelle updaten
              var room = SensorList[tabNo][0].toString();
          
              // Wenn keine Heizperiode
              if (getState(StateHeizperiode).val === false) {
                  return; // keine Heizperiode
              }
              if (getState(path + "." + room + ".Source_Profil").val === 0 ) {
                  return; // es ist noch kein Profil dem Raum zugeordnet
              }
              if (debug) {
                  log("Routine SensorChange: Fenster " + id + " status geaendert fuer " +  SensorList[tabNo][1] + " " +  SensorList[tabNo][0] + " " + SensorList[tabNo][7], "info" );
                  log("Routine SensorChange: Raum " + room, "info");
                  log("Routine SensorChange: Sensor ist direktverknuepft ? " + SensorList[tabNo][9]);
                  log("Routine SensorChange: Sensor status ist ? " +  SensorList[tabNo][7]);
              }
          
              if (SensorList[tabNo][9] ) {  // Sensor ist direktverknuepft und wurde geoeffnet
                  if (debug) {
                      log("Routine SensorChange: Sensor Direktverknuepft  Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+  SensorList[tabNo][7], "info" );
                  }
                  writelog(room, id, "Routine SensorChange: Sensor Direktverknuepft  Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+  SensorList[tabNo][7])  ;
                  if (VerschlussRaumStatus(room) === true ) { // Mindestens ein Fenster ist geoeffnet
                      setOwnState(path + "." + room + ".RaumStatusVerschluss", true);  // Raum ist geoeffnet         
                      SaveStatus("Fenster", room,false); // Meldung Absenkung  ein Fenster ist geoeffnet
                  } else {
                      ExecuteTempDetermination(roomName, id);
                      writelog(roomName, id, "Sensor ausgeloest - auf geschlossen");
                      setOwnState(path + "." + room + ".RaumStatusVerschluss", false);  // Raum ist geschlossen 
                      SaveStatus("Heizplan", room,false); // Meldung loeschen
                  }
                  return;                                                                                                                     // nichts machen, da die Absenkung automatisch passiert
                  
              }
          
              LoopDevices(room, true);
          
          } // ende Funktion
          
          ```` `  
          

          Hallo,

          Funkt leider nicht,

          ist eigentlich gleich wie vorher nur dass "Absenkung - Verschluss geoeffnet" weiter angezeigt wird obwohl das Fenster geschlossen ist.

          Im Log diese Fehlermeldungen:

          2018-10-21 20:37:31.687 - error: javascript.0 Error in callback: ReferenceError: roomName is not defined

          2018-10-21 20:37:31.688 - error: javascript.0 at SensorChange (script.js.common.Heizungskontrolle:1029:38)

          2018-10-21 20:37:31.688 - error: javascript.0 at Object. (script.js.common.Heizungskontrolle:707:29)

          Danke

          Lg Helmut

          1 Reply Last reply Reply Quote 0
          • L
            looxer01 last edited by

            @IDiver:

            Funkt leider nicht, `

            kannst du das nochmal versuchen ?

            sah jetzt bei mir ok aus.

            
            //-----------------------------------------------------------------------------------------------------
            // Funktion SensorChange  erkennt die Verschlussstellung eines Sensors und stellt die Temperatur entsprechend ein
            //-----------------------------------------------------------------------------------------------------
            function SensorChange(id) {
                var tabNo;
                tabNo = SensorFind(id);
            
                if (tabNo === 999) {
                   log("Routine SensorChange: Sensor " + id + " nicht in Sensorliste gefunden","info");
                   return; // Sensor nicht in Sensorlist gefunden
                }
            
                SensorList[tabNo][7] = SensorStatCalc(id, SensorList[tabNo][2]); // id des Sensors und device type - Der Status des Sensors wird ermittelt und in die sensorliste eingetragen
            
                // Status des Verschlusses in Tabelle updaten
                var room = SensorList[tabNo][0].toString();
            
                // Wenn keine Heizperiode
                if (getState(StateHeizperiode).val === false) {
                    return; // keine Heizperiode
                }
                if (getState(path + "." + room + ".Source_Profil").val === 0 ) {
                    return; // es ist noch kein Profil dem Raum zugeordnet
                }
                if (debug) {
                    log("Routine SensorChange: Fenster " + id + " status geaendert fuer " +  SensorList[tabNo][1] + " " +  SensorList[tabNo][0] + " " + SensorList[tabNo][7], "info" );
                    log("Routine SensorChange: Raum " + room, "info");
                    log("Routine SensorChange: Sensor ist direktverknuepft ? " + SensorList[tabNo][9]);
                    log("Routine SensorChange: Sensor status ist ? " +  SensorList[tabNo][7]);
                }
            
                if (SensorList[tabNo][9] ) {  // Sensor ist direktverknuepft und wurde geoeffnet
                    if (debug) {
                        log("Routine SensorChange: Sensor Direktverknuepft  Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+  SensorList[tabNo][7], "info" );
                    }
                    writelog(room, id, "Routine SensorChange: Sensor Direktverknuepft  Sensorstatus geaendert - ID " + id + " Raum " + room +" auf "+  SensorList[tabNo][7])  ;
                    if (VerschlussRaumStatus(room) === true ) { // Mindestens ein Fenster ist geoeffnet
                        setOwnState(path + "." + room + ".RaumStatusVerschluss", true);  // Raum ist geoeffnet         
                        SaveStatus("Fenster", room,false); // Meldung Absenkung  ein Fenster ist geoeffnet
                        return;   
                    } else {
                        setOwnState(path + "." + room + ".RaumStatusVerschluss", false);  // Raum ist geschlossen 
                        SaveStatus("Heizplan", room,false); // Meldung loeschen
                    }
                                                                                                                              // nichts machen, da die Absenkung automatisch passiert
            
                }
            
                LoopDevices(room, true);
            
            } // ende Funktion
            
            
            1 Reply Last reply Reply Quote 0
            • P
              PicNic last edited by

              @looxer01:

              @IDiver:

              Funkt leider nicht, `

              kannst du das nochmal versuchen ?

              sah jetzt bei mir ok aus. `

              Hallo looxer01,

              ich klinke mich hier mal mit ein 🙂 … ich habe/hatte das gleiche Problem wie IDiver und habe deinen zweiten Fix mal eingebaut und soweit ich das beurteilen kann funktioniert es habe drei mal ein wenig mit dem Heizplan gespielt, die Zeiten für die Temperaturänderung geändert und zu den Schaltzeiten immer das Fenster geöffnet gehabt. Danach fünf Minuten gewartet und dann das Fenster geschlossen. Die Temperatur wurde danach immer auf die neue Temperatur des Schedules gestellt.

              Also erst mal top und vielen Dank!

              Falls im normalen Praxisbetrieb noch etwas auftaucht werde ich mich melden, aber IDiver wird das ja sicherlich auch noch bei sich einbauen und testen.

              Vielen Dank

              PicNic

              1 Reply Last reply Reply Quote 0
              • T
                thobastian last edited by

                Hallo,

                erstmal vielen Dank für eure Hilfe hier. 🙂

                Ich konnte das Problem beheben, in dem ich neu installiert hatte.

                Aber ich habe noch ein kleines Problem: Das Script stellt 1 Grad weniger ein, als in der Tabelle eingetragen. Muss ich noch etwas beachten, damit die Werte übereinstimmen?

                1 Reply Last reply Reply Quote 0
                • H
                  holgerwolf last edited by

                  @thobastian:

                  Aber ich habe noch ein kleines Problem: Das Script stellt 1 Grad weniger ein, als in der Tabelle eingetragen. Muss ich noch etwas beachten, damit die Werte übereinstimmen? `

                  Wird vielleicht die Abwesenheitsabsenkung getriggert?

                  Gruß

                  Holger

                  1 Reply Last reply Reply Quote 0
                  • T
                    thobastian last edited by

                    ? Wenn ich Anwesend aktiviere, wird die Temperatur um 1 erhöht.

                    Ist diese Angabe Zwang ? Ich will im Moment keine Unterscheidung machen zwischen Anwesend und Nicht-Anwesend.

                    1 Reply Last reply Reply Quote 0
                    • H
                      holgerwolf last edited by

                      Dann schreib da doch einfach eine "0" rein.

                      Gruß

                      Holger

                      1 Reply Last reply Reply Quote 0
                      • T
                        thobastian last edited by

                        Hallo Holger,

                        ich steh etwas auf dem Schlauch. Wo kann ich denn die 0 eintragen?

                        Bei "Anwesend" kann ich doch nur ein Kreuz machen.

                        1 Reply Last reply Reply Quote 0
                        • H
                          holgerwolf last edited by

                          Bei der Abwesenheits Absenkung. Zwei Blöcke weiter rechts. Da steht per Default 1 drin.

                          Gruß

                          Holger

                          1 Reply Last reply Reply Quote 0
                          • I
                            IDiver last edited by

                            @looxer01:

                            @IDiver:

                            Funkt leider nicht, `

                            kannst du das nochmal versuchen ?

                            sah jetzt bei mir ok aus. `

                            Hallo,

                            Hab's jetzt 1 1/2 Stunden im 10 Minuten Wechsel durchlaufen lassen jedes mal mit geöffneten Fenster und ca. 2 min nach dem

                            Zeitabschnitt Fenster geschlossen, Raumthermostat wurde sofort umgestellt und nach ~5 min die HK-Thermostate.

                            Also ohne Fehler funktioniert. 😄

                            Danke!!

                            Lg Helmut

                            1 Reply Last reply Reply Quote 0
                            • T
                              thobastian last edited by

                              @holgerwolf:

                              Bei der Abwesenheits Absenkung. Zwei Blöcke weiter rechts. Da steht per Default 1 drin.

                              Gruß

                              Holger `

                              Vielen Dank !!

                              Gruß

                              Thomas

                              1 Reply Last reply Reply Quote 0
                              • L
                                looxer01 last edited by

                                @IDiver:

                                Hab's jetzt 1 1/2 Stunden im 10 Minuten Wechsel durchlaufen lassen jedes mal mit geöffneten Fenster und ca. 2 min nach dem

                                Zeitabschnitt Fenster geschlossen, Raumthermostat wurde sofort umgestellt und nach ~5 min die HK-Thermostate.

                                Also ohne Fehler funktioniert `
                                Danke euch fürs Testen. Dann werde ich zum WE eine neue Version machen.

                                vG Looxer

                                1 Reply Last reply Reply Quote 0
                                • I
                                  IDiver last edited by

                                  Danke euch fürs Testen. Dann werde ich zum WE eine neue Version machen.

                                  vG Looxer

                                  Wir haben zu Danken!!

                                  Lg

                                  1 Reply Last reply Reply Quote 0
                                  • Chaot
                                    Chaot last edited by

                                    Ich habe meine alte Heizungssteuerung jetzt komplett von der Fritzbox auf den ioBroker gelegt.

                                    Zum Script ein paar Sachen bei denen ich vermute das es an den DECT Thermostaten liegt:

                                    Steuerung per Event funktioniert nicht. Ich arbeite mit dem Cron Job.

                                    Boost können die Dinger nicht direkt per Befehl

                                    Gerade das Boost wollte ich wieder haben. Dazu habe ich im letzten Jahr einen Dash Button installiert der den Thermostat für 60 Minuten auf 28 °C gestellt hat.

                                    Jetzt mit dem neuen Script dachte ich das ich das problemlos so weiterverwenden kann - denkste!

                                    Das Heizungsscript überschreibt logischerweise meine Einstellung.

                                    Mit etwas experimentieren habe ich dachte ich eine Lösung gefunden. Aber es scheint nicht so richtig zu funktionieren:

                                    Ich setze den Datenpunkt View_manually_adjusted auf eine Temperatur und denke das der dann die Steuerung übersteuert.

                                    Das Script dazu:

                                    ! const idTaster = "amazon-dash.0.00-fc-8b-f6-4b-a9.pressed"/*pressed*/; const idTarget = "javascript.0.Heizung.Heizplan.Toilette.View_Manually_Adjusted"/*View_Manually_Adjusted*/; const idVis = "javascript.0.Heizung.LaufzeitBad"; // Anzeige Restdauer in Minuten const High = "32"; ! var cnt = getState(idVis).val; var timer = null; ! function countDown() { cnt--; setState(idVis, cnt, true); if(cnt <= 0) { clearInterval(timer); setState(idTarget, 0); } } ! on({id: idTaster, val: true}, function () { setState(idTarget, High); cnt = 60; setState(idVis, cnt, true); if(timer) clearInterval(timer); timer = setInterval(countDown, 60000); // jede Minute }); !
                                    Allerdings ist es jetzt scheinbar so das die manuelle Temperatur zwar kurz ins Thermostat geschrieben wird, aber nach wenigen Augenblicken wieder die "normale" Temperatur dort steht.

                                    Dazu ist mir auch noch aufgefallen das ich andere Werte eintragen muss.

                                    Bei 27 °C muss ich 30 eintragen und bei 28°C dann 32.

                                    Wo habe ich meinen Denkfehler oder welchen Datenpunkt muss ich ansteuern um die Funktion zu erreichen.

                                    Ich gebe zu das das vielleicht der absolute Weicheimodus ist, aber da ich oft zu unterschiedlichen Zeiten zum Duschen komme hat es sich doch als recht sparsam erwiesen erst zu dem Zeitpunkt die Heizung wirklich anzusteuern.

                                    1 Reply Last reply Reply Quote 0
                                    • L
                                      looxer01 last edited by

                                      Hi,

                                      wenn du die Temp direkt am thermostat aenderst (per programm), dann sollte dies als manuelle Änderung erkannt werden. im View stellst du die Gültigkeit auf 60.

                                      hast du das schon probiert?

                                      Vg looxer

                                      Gesendet von meinem SM-G965F mit Tapatalk

                                      1 Reply Last reply Reply Quote 0
                                      • Chaot
                                        Chaot last edited by

                                        Nein, das funktioniert bei den DECT Teilen nicht so.

                                        Die haben eine Basisprogrammierung die alle 15 Minuten von der Fritzbox mit den in der Box vorliegenden Daten überschrieben wird. Es wird zwar die Temperatureinstellung ausgelesen, aber ignoriert.

                                        Es gibt zwar einen manuellen Modus, aber der setzt gleichzeitig die Programmierfähigkeit außer Kraft.

                                        Im Ursprünglichen Script habe ich ja den Thermostat über die Fritzbox direkt auf die Temperatur gesetzt. Das wird aber dann von Heizungsscript wieder überschreiben.

                                        Das würde aber auch die Box wieder überschreiben weil sie nach 15 Minuten wieder auf die Ursprungsprogrammierung zurückfällt.

                                        Ich müsste also wirklich im Heizungsscript die Temperatur ändern.

                                        Was mich zur nächsten Frage bringt:

                                        Wenn ich das im VIS manuell ändere funktioniert das auch nicht. Warum? Wenn ich dort 60 Minuten und die Temperatur eingebe sollte das doch für 60 Minuten auf der Temperatur landen.

                                        Ja, mir ist klar das das ein echt blödes DECT System ist…..

                                        1 Reply Last reply Reply Quote 0
                                        • sigi234
                                          sigi234 Forum Testing Most Active last edited by

                                          Hallo,

                                          wenn das neue Skript kommt, muss ich die View dann NEU machen bzw. einstellen?

                                          Und was ist eigentlich das genau: Aktueller Solltemp Zeitabschnitt

                                          1 Reply Last reply Reply Quote 0
                                          • L
                                            looxer01 last edited by

                                            @sigi234:

                                            enn das neue Skript kommt, muss ich die View dann NEU machen bzw. einstellen? `

                                            Nein, du musst nur unterhalb der Einstellungen den Code austauschen.

                                            • keine Aenderung der Eisntellungen

                                            • keine VIS Aenderungen

                                            However. Fuer zukuenftige Erweiterungen kann es sein, dass Einstellungsoptionen geaendert werden oder auch zum VIS was hinzukommt.

                                            Das werde ich aber immer beschreiben und eine komplette Neuinstallation sollte nicht notwendig sein.

                                            vG Looxer

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            938
                                            Online

                                            31.7k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            climate heating javascript template
                                            115
                                            1127
                                            331576
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo