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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

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

      Ich habe auch nicht viele Konfigurationen im Script geändert.

      Script und View liegen anbei.

      Ich habe 3 HM-Thermostate und 1 Stellantrieb im Wohnzimmer.

      Die HM-Thermostate sind Gewerk "Heizung"

      Der Stellantrieb ist Gewerk "Verschluss"

      Zukünftig kommen wahrscheinlich 3-5 Räume dazu.

      In der View habe ich zum Test erstmal nur das Wohnzimmer konfiguriert.
      1555_heizungsscript.txt
      1555_view.js

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

        @thobastian:

        Ich habe auch nicht viele Konfigurationen im Script geändert. `
        Hi,

        also das ist ja quasi alles wie die Download Datei. Wie sieht denn das Log aus ?

        Stelle dazu bitte debug = true

        und poste das log nach dem ersten Aufruf des Programmes.

        Da steht dann auch die Liste der gefundenen Thermostate und Sensoren.

        vG Looxer

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

          Da kam nicht viel raus:

          undefined2018-10-20 13:11:31.781 - warn: javascript.0 Reconnection to DB.

          2018-10-20 13:11:31.759 - warn: history.0 Reconnection to DB.

          2018-10-20 13:11:31.768 - warn: history.0 Reconnection to DB.

          2018-10-20 13:11:31.803 - warn: javascript.0 Reconnection to DB.

          2018-10-20 13:11:34.520 - info: javascript.0 Start javascript script.js.common.Heizungsscript

          2018-10-20 13:11:34.531 - error: javascript.0 script.js.common.Heizungsscript: script.js.common.Heizungsscript:135

          2018-10-20 13:11:34.531 - error: javascript.0 var debug = t;

          2018-10-20 13:11:34.531 - error: javascript.0 ^

          2018-10-20 13:11:34.532 - error: javascript.0 ReferenceError: t is not defined

          2018-10-20 13:11:34.532 - error: javascript.0 at script.js.common.Heizungsscript:135:13

          2018-10-20 13:11:34.533 - error: javascript.0 at Script.runInContext (vm.js:74:29)

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

            Hi,

            2018-10-20 13:11:34.531 - error: javascript.0 var debug = t;
            
            

            da hast du einen Fehler eingebaut.

            es muss heissen

            var debug = true;

            vG Looxer

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

              Hallo,

              muss ich eigentlich für jeden Raum bzw. Thermostat eine eigene Vis anlegen?

              Also auch einen eigenen Plan pro Raum?

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

                Ja, das wirst du wohl müssen.

                Ich habe das bei mir so gelöst das ich in der Heizung einen Raumplan erstellt habe und dort entsprechende Navigationsbutton untergebracht habe die dann auf den einzelne View verweisen. Dann bleibt das schön übersichtlich.

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

                  Ok, also dann oben ein Button hin der dann zum nächsten Raum verweist und für jeden Raum eine View erstellen.

                  Und natürlich im Script die Räume ergänzen.

                  2858_screenshot__924_.png

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

                    ?

                    Wieso muss ich die Räume im Script hineinbringen ?

                    Im Script steht doch, dass das nur bei kleinen Anlagen notwendig ist.

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

                      @thobastian:

                      ?

                      Wieso muss ich die Räume im Script hineinbringen ? `
                      musst du nicht. in den obigen Beiträgen geht es um die Visualisierung und da braucht es einen View per Raum.

                      vG Looxer

                      1 Reply Last reply Reply Quote 0
                      • S
                        swordfisch last edited by

                        Script funktioniert bei mir Gut

                        Hab aktuell nur ein paar warn's im log gefunden

                        ! ````
                        javascript.0 2018-10-21 01:06:41.965 warn at Object. <anonymous>(script.js.common.Heizungssteuerung_neu14_10:492:9)
                        javascript.0 2018-10-21 01:06:41.965 warn at LoopRooms (script.js.common.Heizungssteuerung_neu14_10:805:13)
                        javascript.0 2018-10-21 01:06:41.965 warn Wrong type of javascript.0.Heizung.Heizplan.GlobaleParameter.Anwesenheit: "number". Please fix, while deprecated and will not work in next versions.</anonymous>

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

                          Hi
                          @swordfisch:

                          Hab aktuell nur ein paar warn's im log gefunden `

                          schau bitte mal in den Datenpunkt der über folgende Variable im Script definiert wird:

                          var StateAnwesenheitFunction = JSPath + "Anwesenheitssteuerung.Userlist.JemandDa";
                          
                          

                          Das Script erwartet da einen Boolean Wert und vermutlich ist dies nicht der Fall - Oder das Feld ist nicht als Boolean definiert.

                          vG Looxer

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

                            Hallo, vielen Dank für's Teilen und die Unterstützung!

                            Nachdem ich so ziemlich die meisten hier beschriebenen Einstellungsfehler ebenfalls gemacht habe bleibt leider ein Problemchen offen.

                            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.

                            Verwendet wird ein Raumthermostat "HM-TC-IT-WM-W-EU", 2 St. HK-Thermostate "HM-CC-RT-DN" und 2 St. Fensterkontakte "HM-Sec-SCo"

                            Konnte leider im Forum zu diesem verhalten nichts finden.

                            Irgend eine Idee dazu?

                            Danke

                            Lg, Helmut

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

                              @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

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

                                Hallo,

                                Ja sind direkt verknüpft.

                                Danke

                                Lg Helmut

                                1 Reply Last reply Reply Quote 0
                                • S
                                  swordfisch last edited by

                                  @looxer01:

                                  Hi
                                  @swordfisch:

                                  Hab aktuell nur ein paar warn's im log gefunden `

                                  schau bitte mal in den Datenpunkt der über folgende Variable im Script definiert wird:

                                  var StateAnwesenheitFunction = JSPath + "Anwesenheitssteuerung.Userlist.JemandDa";
                                  
                                  

                                  Das Script erwartet da einen Boolean Wert und vermutlich ist dies nicht der Fall - Oder das Feld ist nicht als Boolean definiert.

                                  vG Looxer `

                                  Ok ja das ist bei mir der Fall liegt dann also an meiner config

                                  Nutze Radar als Anwesenheitseroennung auf Bluetooth bzw Wifi Basis

                                  Grüße Swordfisch

                                  1 Reply Last reply Reply Quote 0
                                  • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            688
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            climate heating javascript template
                                            115
                                            1127
                                            361352
                                            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