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.
    • S
      shattered_dream last edited by

      @looxer01:

      @dav71701:

      iaomi Sensor wird zwar als "offen" erkannt, aber die TemperaturAbsenkung wir nicht durchgeführt. `

      Hi,

      ist schon eigenartig, dass es nur um Xiaomi geht. Waere mal interessant zu wissen, ob es sonst noch Erfahrungen gibt mit "Nicht HM" Sensoren.

      Ist aber wahrscheinlich Zufall und damit zu erklären, dass viele hier Xiaomi im Einsatz haben.

      Also, beim Öffnen sollte noch die Routine "LoopDevises" durchlaufen werden. kannst du mal schauen, ob die Meldungen findest aus der Routine. Und zwar ist das hier:

              Sensor = VerschlussRaumStatus(roomName);
              if (debug) {log("Routine LoopDevices: Sensorstatus fuer raum " + roomName + " ist " + Sensor, "info"); }
              // Check ob ein Verschlusssensor offen ist
              if (sensorausgeloest) {  // ein nicht direkt verknuepfter Sensor hat im Raum ausgeloest
                  // Wenn ein Verschluss des Raumes geoeffnet ist, dann wird die Temp Absenkung gemacht
                  if (Sensor) {  // steht einer der Sensoren auf offen ?
      //                SetRoomOpen( roomName );  // in der delay tab werden evt Zeitstempel geloescht
                      Source_GlobalParameter = "Verschluss offen TemperaturAbsenkung gesetzt";
                      if (debug) { log("Routine LoopDevices:" +  Source_GlobalParameter, "info"); }
                      if (Check_SensorDV(roomName) === false) {  // ist der Sensor direktverknuepft ?
                          SetTemp(roomName, VerschlussAbsenkungsGrenze, id, false);
                      }
                      writelog(roomName, id, "Sensor ausgeloest - auf geoeffnet");
                      continue;
                  } else {
                      SetRoomClosed(roomName,ControlTab[x][12]);  // zeitstempel setzen fuer delay wenn erforderlich
                      Source_GlobalParameter = "Raum " + roomName + " jetzt geschlossen ";
                      if (getState(path + "." + roomName + ".Source_TimeStamp").val === "init" && getState(id).val !== VerschlussAbsenkungsGrenze ) {  // Wenn keine manuelle Temp gesetzt war
                          Source_GlobalParameter = "Verschluss geschlossen TemperaturAbsenkung zurueck gesetzt";
                          if (debug) { log("Routine LoopDevices:" +  Source_GlobalParameter, "info"); }
                          ExecuteTempDetermination(roomName, id);
                          writelog(roomName, id, "Sensor ausgeloest - auf geschlossen");
                          continue;
                      } // kein TimeStamp gesetzt
                  } // endif sensor status true
              } // endif Sensor ausgeloest
      
              if (Sensor) {  // Wenn ein Sensor offen ist, dann mache nix
                  return;
              }
      
      

      Wenn dieser Code nicht durchlaufen wird, dann können wir den Fehler weiter eingrenzen.

      Was hast du für Thermostate ? HM ? mit Wandthermostat ?

      vG Looxer `

      Diese Routine wird wohl nicht durchlaufen… Habe mal Debug auf true gestellt und die Tür geöffnet....

      Das kommt als Log raus :

      18:57:03.060 [info] javascript.0 script.js.common.Skript3: Routine SensorFind ID = mihome.0.devices.magnet_158d0001fa3382.state Raum = Küche

      18:57:03.060 [info] javascript.0 script.js.common.Skript3: Routine SensorStatCalc: Sensorstatus ist true fuer devtype = NoneHM und id mihome.0.devices.magnet_158d0001fa3382.state

      18:57:03.060 [info] javascript.0 script.js.common.Skript3: Routine SensorChange: Fenster mihome.0.devices.magnet_158d0001fa3382.state status geaendert fuer mihome.0.devices.magnet_158d0001fa3382.state Küche true

      18:57:03.061 [info] javascript.0 script.js.common.Skript3: Routine SensorChange: Raum Küche

      18:57:03.061 [info] javascript.0 script.js.common.Skript3: Routine SensorChange: Sensor ist direktverknuepft ? false

      18:57:03.061 [info] javascript.0 script.js.common.Skript3: Routine SensorChange: Sensor status ist ? true

      Dazu noch ne Frage : Kann das dran liegen dass "setroomopen" auskommentiert ist ?

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

        Hi,

        also in der vorherigen Diskussion hatten wir den Fall, dass der Sensor automatisch erkannt wurde, weil durch CUX definiert.

        Die Lösung hier waere vermutlich die folgende Tabelle SensorTypeTab an Stelle 7 auf false zu setzen, und zwar für den Sensor HM-Sec-SC.

        also hier:

        // Typen-Tabelle der Verschlusssensoren fuer Homematic Geräte
        // 6 = Verschlussstatus = false ist gechlossen
        var SensorTypeTab = [];
        //                   0.RPC-Pfad    1.GeraeteType  2\. Beschreibung,              3.Type     4.DP Status   5.nicht verwendet  6\. Verschlussstatus    7\. direktverknuepft
        SensorTypeTab[0] = ['hm-rpc.0.',  'HM-Sec-SCo' ,    'Fenstersensor (neu)' ,       'HM',    '1.STATE' ,        false,         false,                 true    ];
        SensorTypeTab[1] = ['hm-rpc.0.',  'HM-Sec-SC'  ,    'Fenstersensor (alt)' ,       'HM',    '1.STATE' ,        false,         false,                 true    ];
        SensorTypeTab[2] = ['hm-rpc.0.',  'HM-Sec-RHS' ,    'Fenster-Drehgriffkontakt',   'HM',    '1.STATE' ,        false,         0,                     true    ];
        SensorTypeTab[3] = ['hm-rpc.0.',  'HM-Sec-SC-2',    'Fenstersensor-2 (alt)' ,     'HM',    '1.STATE' ,        false,         false,                 true    ];
        SensorTypeTab[4] = ['hm-rpc.1.',  'HMIP-SWDO'  ,    'Fenstersensor (HMIP )' ,     'IPSE',  '1.STATE' ,        false,         0,                     true    ];
        SensorTypeTab[5] = ['hm-rpc.2.',  'HMW-Sen-SC-12-DR','Schließerkontakt HMW' ,     'HM',    '1.STATE' ,        false,         false,                 false   ];
        
        

        Kann es sein, dass du den Xiaomi auch über CUX eingebunden hast ?

        vG Looxer

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

          Nein habe ihn nicht über Cux eingebunden… Nur am Mihome angemeldet...

          Hab das mal geändert, da ändert sich nichts...

          Interessanterweise : Wenn ich die Tür schliesse, wird "ExecuteTempDetermination" laut log durchgeführt....

          Also wird der Status des Sensors erkannt und verarbeitet....

          Beim Öffnen wird das allerding nicht durchgeführt...

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

            Hi,

            tausche mal bitte in Routine SensorChange folgenden Code aus:

            habe eine zusätzliche Logzeile eingebaut

            neu:

                if (SensorList[tabNo][7] ) {  // Sensor ist direktverknuepft und wurde geoeffnet
                    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])  ;
                    return;                                                                                                                     // nichts machen, da die Absenkung automatisch passiert
                }
            
            Es scheint so, dass die Routine "LoopDevices" nicht aufgerufen wird.
            Aber die Logeintragungen kommen bis zu dem o.g. Codeschnipsel. Danach wird LoopDevices aufgerufen.
            
            vG Looxer
            
            
            1 Reply Last reply Reply Quote 0
            • S
              shattered_dream last edited by

              Habs eingebaut… FOlgende Meldung im Log :

              javascript.0 script.js.common.Skript3: Routine SensorChange: Sensor Direktverknuepft Sensorstatus geaendert - ID mihome.0.devices.magnet_158d0001fa3382.state Raum Küche auf true

              Ist auch egal ob ich in der Sensorliste für NoneHM false oder true eingestellt habe, der erkennt das immer als direktverknüpft...

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

                @shattered_dream:

                Habs eingebaut… FOlgende Meldung im Log : `
                jo, das zeigt, dass das Script davon ausgeht, dass der Sensor direktverknuepft ist.

                Ich glaube ich habe da einen fehler gefunden:

                Tausche bitte nochmal aus:

                    if (SensorList[tabNo][9] ) {  // Sensor ist direktverknuepft und wurde geoeffnet
                        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])  ;
                        return;                                                                                                                     // nichts machen, da die Absenkung automatisch passiert
                    }
                
                    vG Looxer
                
                
                1 Reply Last reply Reply Quote 0
                • S
                  shattered_dream last edited by

                  Tip top, das scheints gewesen zu sein…..

                  Funzt nun... Dank dir für die Unterstützung!

                  1 Reply Last reply Reply Quote 0
                  • K
                    kaschperle83 last edited by

                    Super. Ich bin gerade im Urlaub. Werde es danach direkt testen.

                    Gesendet aus Hessen.

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

                      @kaschperle83:

                      Super. Ich bin gerade im Urlaub. Werde es danach direkt testen. `
                      Feedback wäre prima.

                      Wenn es für alle läuft mache ich eine neue Version.

                      vG Looxer

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

                        Wie gesagt bei mir funzt es!

                        Muss mich jetzt mal in hochsprachen Programmierung einarbeiten..

                        Ist als SPS Programmierer doch ne kleine Umstellung…

                        Gesendet von meinem ONEPLUS A3003 mit Tapatalk

                        1 Reply Last reply Reply Quote 0
                        • D
                          dav71701 last edited by

                          @looxer01:

                          @shattered_dream:

                          Habs eingebaut… FOlgende Meldung im Log : `
                          jo, das zeigt, dass das Script davon ausgeht, dass der Sensor direktverknuepft ist.

                          Ich glaube ich habe da einen fehler gefunden:

                          Tausche bitte nochmal aus:

                              if (SensorList[tabNo][9] ) {  // Sensor ist direktverknuepft und wurde geoeffnet
                                  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])  ;
                                  return;                                                                                                                     // nichts machen, da die Absenkung automatisch passiert
                              }
                              
                              
                              vG Looxer
                          
                          ```` `  
                          

                          Also mit dieser Änderung und den folgenden Einstellungen, weil ich den Xiaomi - Sensor als Cux eingebunden habe, funktioniert es jetzt auch bei mir, super danke 🙂

                          ThermostatTypeTab[2]  = ['hm-rpc.0.',  'HM-CC-RT-DN'     , 'Heizkoerperthermostat(neu)' ,'HT',   '4.SET_TEMPERATURE'      ,   false,        '4.MANU_MODE',              false,                  '4.ACTUAL_TEMPERATURE',      '4.CONTROL_MODE',           12,                                            0];
                          SensorTypeTab[1] = ['hm-rpc.0.',  'HM-Sec-SC'  ,    'Fenstersensor (alt)' ,       'HM',    '1.STATE' ,        false,         false,                 false   ];
                          
                          
                          1 Reply Last reply Reply Quote 0
                          • Chaot
                            Chaot last edited by

                            Wow,

                            dasDing ist ja wirklich gut gemacht.

                            Eine ganz blöde Frage:

                            Lässt sich das eventuell auch auf DECT Thermostate adaptieren?

                            Die Datenpunkte scheinen ja zu den HM Thermostaten anders zu sein und es gibt bei den Dingern per Remote Befhl keinen manuellen Modus.

                            Hat das schon jemand versucht oder hilft vielleicht das Bild weiter?
                            5779_dect.jpg

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

                              @Chaot:

                              Lässt sich das eventuell auch auf DECT Thermostate adaptieren? `

                              Hi,

                              die erste Voraussetzung ist, dass du die SollTemp in IoBroker setzen kann und das Thermostat diese auch annimmt.

                              Ich sehe, dass du eine Target Temp hast. Wenn die also nicht nur Read Only ist, dann ja, dann sollte es gehen.

                              @Chaot:

                              Die Datenpunkte scheinen ja zu den HM Thermostaten anders zu sein und es gibt bei den Dingern per Remote Befehl keinen manuellen Modus. `

                              Ich nehme an, dass das Thermostat ein eigenes Programm hat, dass du einstellen kannst.

                              Wenn das Thermostat ausschließlich nach der eigenen Planung arbeiten kann, dann hat es keinen manuellen mode.

                              Das heißt aber nicht, dass du das Thermostat nicht steuern kannst. Wenn du Beispielsweise nur einmal am Tag eine Temp eingeben würdest und ioBroker eine Minute später schlicht wieder übersteuerst, dann ist das zumindest ein Workaround um damit umzugehen.

                              Nun weiß ich nicht wie das Thermostat genau funktioniert aber ich würde es mal probieren.

                              vG Looxer

                              1 Reply Last reply Reply Quote 0
                              • E
                                ErazorVIP last edited by

                                Hallo,

                                ich wollte heute mal das Script ausprobieren. Jedoch bekomme ich leider beim start immer folgende Meldung im Log:

                                16:05:05.580	[info]	javascript.0 Start javascript script.js.common.heating
                                16:05:05.580	[info]	javascript.0 script.js.common.heating: Routine GetDevices Devices initialisiert
                                16:05:05.581	[info]	javascript.0 script.js.common.heating: registered 0 subscriptions and 0 schedules
                                16:05:07.423	[info]	javascript.0 script.js.common.heating: Heizungsscript verarbeitung benutzt Trigger und Events
                                16:05:07.424	[warn]	javascript.0 at setOwnState (script.js.common.heating:494:5)
                                16:05:07.425	[warn]	javascript.0 at LoopRooms (script.js.common.heating:773:5)
                                16:05:07.425	[warn]	javascript.0 at Object. (script.js.common.heating:431:9)
                                
                                

                                Kann mir jemand weiterhelfen? :?:

                                LG

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

                                  Hi @ErazorVIP:

                                  Jedoch bekomme ich leider beim start immer folgende Meldung im Log: `
                                  sieht nach einem Problem bei der Konfiguration aus (warnung).

                                  javascript.0 at Object. (script.js.common.heating:431:9)

                                  Zeile 431 (falls du keine global Scripte verwendest)

                                  Wenn du den Konfig Teil postest laesst sich evt was sagen.

                                  vG Looxer

                                  1 Reply Last reply Reply Quote 0
                                  • E
                                    ErazorVIP last edited by

                                    Ich habe eigentlich alles bei den Standardeinstellungen gelassen.

                                    Ich habe nur HM-IP Thermostate.

                                    Es werden auch keine States angelegt.

                                    javascript.0	2018-10-02 17:18:20.097	warn	at Object. <anonymous>(script.js.Heizungssteuerung.Heating:431:9)
                                    javascript.0	2018-10-02 17:18:20.097	warn	at LoopRooms (script.js.Heizungssteuerung.Heating:773:5)
                                    javascript.0	2018-10-02 17:18:20.097	warn	at setOwnState (script.js.Heizungssteuerung.Heating:494:5)
                                    javascript.0	2018-10-02 17:18:20.093	warn	State "javascript.0.Heizung.Heizplan.GlobaleParameter.Source_last_Program_Run" not found</anonymous> 
                                    
                                    // Beginn Generelle Einstellungen
                                    // werden an dieser Stelle benoetigt - Einstellungen sind nur in Spezialfaellen notwendig
                                    //------------------------------------------------------------------------------
                                    // Anpassung nur wenn unbedingt notwendig. Hier ist der Ansatz um z.B. Einliegerwohnungen separat zu steuern
                                    var JSPath                  = "javascript.0.";             // JS- Pfad
                                    var path                    = JSPath + 'Heizung.Heizplan';  // Pfad fuer create states
                                    var Gparameterpath          = path + ".GlobaleParameter";  // Pfad in die Globalen Parameter
                                    var ICALPath                = "ical.0.events";             // Pfad zu den ICAL events zur Profilauswahl
                                    //------------------------------------------------------------------------------
                                    // Ende Generelle Einstellungen
                                    // Usereinstellungen sind Einstellungen, die ueblicherweise gemacht werden
                                    //------------------------------------------------------------------------------
                                    
                                    //------------------------------------------------------------------------------
                                    // Beginn USER Einstellungen
                                    //------------------------------------------------------------------------------
                                    
                                    // Gewerke - wichtige Einstellung, da nur die Geraete eingelesen werden, die im Gewerk vorhanden sind
                                    // Das Gewerk muss alle Thermostate bzw Sensoren enhalten
                                    var HeizungGewerk           = "Heizung";        //  diesem Gewerk muessen alle Thermostate zugeordnet sein.
                                    var SensorGewerk            = "Verschluss";     //  diesem Gewerk muessen alle Verschlusssensoren zugeordnet sein.
                                    
                                    // Alle x Minuten wird gecheckt ob die SollTemp angepasst werden muss - Empfehlung wenn cron dann 5
                                    // Wenn Wert = 0 ist dann läuft das Skript über Events (empfohlener Weg)
                                    var cron = 0;
                                    
                                    // Raumliste -  empfohlen zu benutzen fuer kleine Systeme
                                    // UseRoomList heisst, dass die nur hier gelisteten Raeume angelegt und abgearbeitet werden - somit werden nicht sofort alle Datenpunkte aller Räume angelegt (ca. 100 pro Raum und Profil)
                                    // dies dient hauptsaechlich zur Anlage der Daten - So koennen Raum fuer Raum alle States angelegt wrden
                                    // Das sollte genutzt werden mit langsamen Rechnern wie Raspi mit SD karte
                                    var UseRoomList = false;      // Wenn testmodus werden nur die Angegebenen Raeume abgearbeitet
                                    var RoomList = [];
                                    RoomList[0] = ['Wohnzimmer'];   // Liste der Raeume die gesteuert werden soll zum Testen
                                    RoomList[1] = ['Raum2'];
                                    RoomList[2] = ['Raumx'];
                                    RoomList[3] = ['Raum3'];
                                    RoomList[4] = ['Raum4'];
                                    RoomList[5] = ['Raum5'];
                                    RoomList[6] = ['Raum6'];
                                    RoomList[7] = ['Raum7'];
                                    RoomList[8] = ['Raum8'];
                                    RoomList[9] = ['Raum9'];
                                    
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      shattered_dream last edited by

                                      Wo sind die Homematic IP Geräte angebunden?

                                      Ccu?

                                      Ich Tipp drauf dass der Name des Gewerks nicht passt…..

                                      Gesendet von meinem ONEPLUS A3003 mit Tapatalk

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

                                        Danke.

                                        Ich habe schon etwas mit den Dingern experimentiert und kann vermutlich das interne Programm auf eine Temperatur festlegen (wäre ja dann als Fallbacklösung geeignet).

                                        Steuerbefehle zur Temperaturregelung kann ich bereits absenden. Also beispielsweise bei offenem Fenster die TargetTemp auf 10 °C setzen funktioniert problemlos.

                                        Ich werde mal das Scrip bei einem Raum probeweise einsetzen und schauen wie sich das verhält.

                                        Da ich in den Räumen mehrere Temperatursensoren habe ist das natürlich die deutlich bessere Lösung als sich auf die intern erfasste Temperatur zu verlassen.

                                        Ich muss nur noch herausfinden wie ich die Temperatursensoren so einbinde das der Offset zum internen Wert eingearbeitet wird.

                                        Beispiel:

                                        Raumtemperatur gemessen/gemittelt = 22 °C

                                        Temperatur am Thermostat = 24 °C

                                        Regeltemperatur müsste dann 24 °C sein obwohl ich als Wunschtemperatur 22 °C einstellen möchte.

                                        Hast du sowas irgendwo im Script vorgesehen?

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

                                          Man könnte ja mit der berechneten Differenz einen Offset an die Thermostate schicken

                                          Gesendet von meinem ONEPLUS A3003 mit Tapatalk

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

                                            Hi,
                                            @Chaot:

                                            Hast du sowas irgendwo im Script vorgesehen? `
                                            Im Script ist das so nicht vorgesehen. Das Problem, dass ich dabei sehe ist, dass das Offset wahrscheinlich nicht immer 2 Grad ist.

                                            Das hängt vermutlich von der Aussentemperatur des Heizkörpers ab. In der Übergangszeit dürften es z.B. weniger als 2 Grad sein. (lauwarmer Heizkörper).

                                            Wenn es stabil 2 Grad sein sollen, dann kommt die Diff-Temp bei Abwesenheit oder Urlaub in Frage. Die kann man negativ oder positiv setzen.

                                            vG Looxer

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            572
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

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