Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] Heizungsthermostatsteuerung - Script

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

      Hi,

      EDIT - 28.12.2017

      bevor ihr weiterlest möchte ich darauf hinweisen, dass es eine neue Version (2.0) gibt.

      Die gibt es hier: http://forum.iobroker.net/viewtopic.php?f=21&t=10096

      EndEDIT

      Heute möchte ich euch mein Script zur Steuerung von Heizungsthermostaten vorstellen.

      Ihr bekommt das Script, ein Beispiel-View und Dokumentation.

      Ein Bild sagt mehr als viele Worte:
      305_heizung.jpg

      Die Funktionsliste findet sich hier:

      ! Funktionsübersicht
      ! Das Programm stellt folgende Funktionen zur Verfügung:
      ! - Unterstützung von verschiedenen Thermostaten
      ! o Alte HM-Wandthermostate
      ! o Neue HM-Thermostate (Wandthermostate und Heizkörperthermostate)
      ! o Homematic IP (Wand- und Heizkörperthermostate)
      ! o Unterstützung von Nicht-Homematic Thermostaten
      ! - Absenkung der Heizungsthermostate auf die „Fenster-Offen“-Temperatur
      ! - eingebundene Thermostate reagieren wie bei native Homematic mit Gruppenbildung. Manuelle Anpassungen werden erkannt und synchronisiert
      ! - Wochenprogramm mit bis zu 6 Zeiten/Temperaturen je Tag (Montag – Sonntag) und ein separates Feiertags-Programm (somit 8 Zeilen je Woche mit je 6 Zeiten/Temperaturvorgaben)
      ! - Feiertagszeile kann auch für Urlaub bei Anwesenheit genutzt werden)
      ! - Einfacher Verweis auf den Vortag („wie Vortag“- Funktion)
      ! - Möglichkeit der Planung mit bis zu 9 Profilen
      ! Dient z.B. für Schichtplanung oder dem einfachen Umschalten bei Ferienhäusern, etc)
      ! o Wochenprogramm je Profil
      ! o Diverse Profilparameter wie (Grad Celsius Absenkung oder Anhebung von Temperaturen und Definition einer Mindesttemperatur)
      ! o Aktivierung / Deaktivierung von Profilen manuell oder über Google Kalender
      ! - Verwendung von Raumparameter für
      ! o die Eingaben einer manuellen Temperatur
      ! o die Vorhaltezeit der manuellen Temperatur in Minuten
      ! o die Anzeige der Gültigkeit bis für die manuelle Temperatur
      ! o Reset der manuellen Temperatur
      ! o das automatische setzen des manuellen Modus
      !  
      ! - Verwendung von globalen Parametern (manuell oder über Google Kalender), die für alle Räume und Profile gleich gültig sind für da
      ! o An/Abwesenheit, (Absenkung bei Abwesenheit)
      ! o Urlaub, (Absenkung bei Urlaub)
      ! o Party, (Absenkung bei Party)
      ! o Gäste (Anhebung bei Gäste)
      ! - Für die o.g. globalen Parameter können je Raum-Profil Temperaturanpassungen in Grad Celsius vorgenommen werden. Diese können negativ/positiv oder null sein.
      ! - Lieferung eines Views der rel. schnell für weitere Räume kopiert werden kann. Der View ist so aufgebaut, dass (fast) alle Eingaben per Touch bedient werden können. Der View beinhaltet für Raum und Profil das Wochenprogramm, die Profilparameter, die Raumparameter und die globalen Parameter
      ! - Automatisierungen
      ! o Findung eines Profils durch z.B. Google Kalender über ICAL
      ! z.B. für Schichtpläne durch Integration mit z.B. Google Kalender (ICAL)
      ! o Findung von Feiertagen über den Feiertagsadapter oder alternativ ICAL
      ! o Findung von Temperaturparameter (z.B. Gäste, Party, Urlaub Abwesend, Urlaub Anwesend etc.) durch Integration mit z.B. Google Kalender (ICAL)
      ! o Automatische Abwesenheitsabsenkung falls gewünscht (Integration mit einer An/Abwesenheitssteuerung)
      ! - Automatische Temperaturanpassungen können nicht unter eine je Raum/Profil bestimmbare Mindesttemperatur sinken
      ! - Automatische Einstellung des manuellen (MANU) Modus (für die neuen Thermostate)
      ! - Handling von manuellen Änderungen (z.B. am Thermostat oder über Alexa)
      ! o Erkennung von manuell eingestellten Temperaturen.
      ! o Einstellung der Vorhaltedauer von manuell eingestellten Temperaturen je Raum (in
      ! Minuten)
      ! o Darstellung der Zeit bis zu der die manuelle Temperatur gültig ist (Datum/Uhrzeit)
      ! o Sofortige Erkennung von Temperaturanpassung am Thermostat durch Subscription
      ! o Funktioniert auch ohne Direktverknüpfung
      ! - Verschlusssensoren
      ! o Temperaturabsenkung auch für nicht durch direktverknüpfte Geräte
      ! o Sofortige Erkennung von „Verschluss offen" durch Subscription
      !  
      ! - 3-stufiges Logging
      ! o Stufe 1 – Speicherung der letzten Temperaturfindung in Datenpunkte
      ! und Anzeige im View
      ! o Stufe 2 – erweitertes online-Logging (einstellbar)
      ! o Stufe 3 – Externes Logging in Excel Format (einstellbar)
      ! - Steuerung von separaten Wohneinheiten (z.B. Einliegerwohnung und Hauptwohnung) mit unabhängigen Parametern. (durch Kopie des Programmes und weiteren Einstellungen zur Separierung )

      Wenn ihr es ausprobieren wollt, ein paar Hinweise:

      Einstellungen im Programm

      nur die Zurodnung zu Gewerke für Sensoren und Thermostate ist notwendig. Das Script ist danach sofort lauffähig.

      View

      Bevor ihr den View importiert solltet ihr den zugeordnetenn Raum austauschen. Das könnt ihr mit einem normalen Editor machen (z.B. notepad++)

      "Bitte nicht mit WORD". Nutzt einfach die REPLACE funktion des Editors und ersetzt "Schlafzimmer" mit dem Namen eures Raumes.

      Falls ihr blanks im Raumnamen habt, dann müssen diese mit Unterstrich (also "_") ersetzt werden. Kinderzimmer 1 wird also zu Kinderzimmer_1.

      Den View könnt ihr dann mit eurer Umgebung mit VIS-Funktionen einbinden. Die Art der Einbindung hängt ab von den eigenen Views, bzw. Vorstellungen ab. Eine Möglichkeit ist über Container Views und einem Transparenten Widget auf die Temperatur eines Raumes zu klicken.

      Installation

      Sobald das Programm aufgerufen wird werden alle Datenpunkte für alle Räume und Profile angelegt. Falls ihr einen langsamen Rechner (z.B. Raspi oder Vergleichbares mit SD-Karte) habt, dann solltet ihr raumweise vorgehen. Das ist in der Doku beschrieben.

      Wenn das Programm läuft und ihr Zugriff auf die Views habt, dann müsst ihr noch ein aktivies Profil (erstmal 1) im View zuordnen. Erst dann werden die Räume entsprechend des Planes beheizt.

      EDIT–- DIES hat sich mit Version 0.81 geändert. Jetzt sind die Profile nach dem Anlegen sofort aktiv. Das erste Auslesen der Thermostate dürfte dazu führen, dass die gegenwärtigen Soll-Temperaturen als manuell gesetzt erkannt werden. Sie ändern sich nicht sofort aber nach 120 Minuten werden die Temperaturen erstmalig über die Profilpläne (Heizpläne) gesteuert.

      Bitte schaut in die Doku. Dort sind alle Einzelheiten beschrieben

      Hinweise, wenn das Programm Thermostate/Sensoren nicht erkennt:

      Falls die Thermostate/Sensoren nicht eingelesen werden, dann gibt es vermutlich Ungereimtheiten beim SetUp der Räume/Gewerke. Es empfiehlt sich folgende Vorgehensweise:

      1. Überprüfen, dass die Thermostate / Sensoren in der CCU wirklich den richtigen Gewerken und Räumen zugeordnet sind

      2. Überprüfen, dass in den ioBroker Aufzählungen (rooms und functions) die Räume und Gewerke gelistet sind. Irgendwelche $functions oder $rooms sollten nicht auftauchen.

      3. Bei Ungereimtheiten in den Aufzählungen könnt ihr versuchen manuell zu korrigieren. Wenn bei den Aufzählungen nur CCU Räume und Gewerke vorhanden sind, dann empfiehlt sich einmal die rooms und functions komplett zu loeschen.

      4. nachdem geändert wurde muss der REGA adapter neu geladen werden ( bei den Instanzen). Bei mir war es so, dass ich ioBroker stoppen musste und neu starten musste, um die Aenderungen wirksam im Programm zu sehen (obwohl die Aufzählungen korrigiert waren) ich vermute, dass das mit der Nutzung von REDIS zusammenhängt -

      Open Issues:

      Im Zusammenhang mit "View in Widget " widgets und auch container widgets gibt es drei Fehler im VIS, die ich hier und auch in Trello reportet habe. Ich hoffe auf einen baldigen Fix:

      http://forum.iobroker.net/viewtopic.php?f=22&t=5510

      Script:
      305_hzthst_v100.txt

      View:
      305_view_hzthst.txt

      Dokumentation:
      305_heizungsthermostatsteuerung_10.pdf

      viele Gruesse

      Looxer

      1 Reply Last reply Reply Quote 0
      • C
        csamaggi last edited by

        Muss sagen sieht echt gut aus. Werde es mir auch mal anschauen.

        Gesendet von meinem SM-G900F mit Tapatalk

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

          Hi,

          ist ja klar, dass nicht alles fehlerfrei ist 😮

          es gibt ein kleines Problem bei Räumen mit blanks im Namen. Ist schon gefixt.

          Ich warte aber noch bis ggf noch mehr auffällt und stelle dann eine neue Version ein.

          EDIT: Ich habe Version 0.71 eingestellt. Hatte vergessen ein TestStatement herauszunehmen 😞

          Auch ist der Fix fuer Räume mit blanks im Namen enthalten

          vG Looxer

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

            RESPEKT!!! :shock:

            Asstrein, ich hab noch das Script aus dem homematic Forum auf der CCU laufen. Das ist genau das was ich gesucht habe!!! :mrgreen: Das werde ich am WE direkt mal antesten. Danke dafür!!!

            1 Reply Last reply Reply Quote 0
            • N
              nobse last edited by

              Sieht wirklich gut aus und hat so wie ich das sehe alle Funktionen wie das Script das auf der CCU läuft.

              Habe mal versucht das für einen Raum zu testen.

              Leider passiert garnichts. Es werden keine Variablen angelegt.

              Habe den Debugmodus mal angeschaltet. Im Log steht dann folgendes

              javascript.0	2017-04-13 15:03:23.489	info	script.js.Heizung: registered 0 subscriptions and 1 schedule
              javascript.0	2017-04-13 15:03:23.488	info	script.js.Heizung: schedule(cron=*/5 * * * *)
              javascript.0	2017-04-13 15:03:23.486	warn	State "javascript.0.Heizung.Heizplan.GlobaleParameter.Source_last_Program_Run" not found
              javascript.0	2017-04-13 15:03:23.485	info	script.js.Heizung: Devices initialisiert
              javascript.0	2017-04-13 15:03:23.392	info	script.js.Heizung: getEnums(enumName=rooms) => [{"id":"enum.rooms.Wohnzimmer","members":["hm-rpc.0.LEQ0400973.4","hm-rpc.0.LEQ0400973.1","hm-rpc.0.LEQ0593850.1","hm-rpc.0.LEQ0593850.3","hm-rpc.0.LEQ0
              javascript.0	2017-04-13 15:03:23.385	info	Start javascript script.js.Heizung 
              

              Mehr steht im Logfile nicht. Eventuell kannst du mir sagen wo ich da suchen muss.

              Gruß Norbert

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

                Hi,

                Welche Thermostattypen nutzt du ? (HM-IP ist noch nicht richtig konfiguriert, da ich solche Geräte nicht habe.

                Wenn jemand aber IP hat, dann kann ich das noch hinzufügen (konfigurieren nur)

                bitte überprüfe die folgenden Punkte:

                • es gibt zwei Gewerke in den Einstellungen. Die musst du auf jeden Fall dort hinterlegen

                • Die Geräte aus der CCU müssen dem Gewerk und Raum zugeordnet sei. Bitte in der CCU überprüfen

                • Sind die Räume in den Aufzählungen identisch zu den CCU Räumen ?

                Wenn du keine manuellen Einstellungen bei den Räumen in ioBroker vorgenommen hast, kannst du alle Räume aus den Aufzählungen

                löschen und den RegaAdapter neu starten. Danach ist alles 100% ig Synchron

                Hier ist die Stelle wo die Thermostate rausgefiltert werden:

                $('channel[state.id=*.'+ThermostatTypeTab[x][4]+'] (rooms='+roomName+') (functions='+HeizungGewerk+') ').each(function (id, i) {

                Bedingung 1 = Der Thermostattype muss konfiguriert sein. Diese sind konfiguriert: HM-TC-IT-WM-W-EU, 'HM-CC-TC, HM-CC-RT-DN

                Bedingung 2 = Das Gerät muss einem Raum zugeordnet sein und der Raum muss in den Aufzählungen fehlerfrei enthalten sein

                Bedingung 3 = Das Gerät muss dem Gewerk zugeorndet sein, dass im Programm eingestellt wird:

                Wenn alles korrekt ist, dann muss es funktionieren

                vG Looxer

                1 Reply Last reply Reply Quote 0
                • N
                  nobse last edited by

                  So Problem ist gelöst.

                  Die Gewerke waren auf der CCU richtig angelegt. Im ioBroker aber fehlerhaft Importiert. Hier waren falsche Namen vorhanden. Ist wohl ein alter Fehler den ich bis jetzt nicht korigiert hatte.

                  Nun werden erstmal alle Variablen angelegt.

                  Dann kann ich jetzt weiter testen.

                  1 Reply Last reply Reply Quote 0
                  • N
                    nobse last edited by

                    Das erste Thermostat habe ich nun umgestellt und es funktioniert super.

                    Allgemeine Anmerkungen zum View

                    • Datumsanzeigen im Deutschen Format

                    • Temperatur immer mit Kommer und eine Nachkommerstelle anzeigen

                    Die var VerschlussAbsenkungsGrenze sollte eventuell auch im View eingestellt werden.

                    Die neuen Thermostate erkennen ja einen schnellen Temperaturabfall selber als Fenster offen. Wird da auch die var VerschlussAbsenkungsGrenze benutzt und wie lange ist die dann wirksam?

                    Bei Heizperiode aktiv = aus sollten dann die Thermostate alle auf 100% gefahren werden um dann über den Sommer die Thermostate zu schonen.

                    Bei jeden lauf des Scriptes wird ja immer die Function CreateStates aufgerufen um die Variablen anzulegen. Hier sollte man versuchen dieses nur ein mal zu machen. Ist bestimmt dann auch schneller.

                    Hast da wirklich eine Super Arbeit geleistet. Vielen Dank.

                    Ich teste weiter.

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

                      …freut mich, dass es soweit bei dir klappt.

                      Nun zu deinen Punkten:

                      • Datumsanzeigen im Deutschen Format

                      da gibt es eines - letzter Programmlauf - nehme ich mal auf

                      • Temperatur immer mit Kommer und eine Nachkommerstelle anzeigen

                      das liegt am Widget. Ich habe dieses Widget set gewählt, weil es touch bedienbar ist.

                      • Die var VerschlussAbsenkungsGrenze sollte eventuell auch im View eingestellt werden.

                      ****die ist standardmaessig auf 12 Grad wie auch bei der CCU. Dies sollte über alle Thermostate und dem Script synchronsiert sein. Dann

                      gibt es kein Problem****

                      • Die neuen Thermostate erkennen ja einen schnellen Temperaturabfall selber als Fenster offen. Wird da auch die var VerschlussAbsenkungsGrenze

                      benutzt und wie lange ist die dann wirksam?

                      ich habe das nicht getestet. Sensoren sind auf jeden Fall die bessere Wahl. Wenn das Thermostat auf 12 Grad geht und nach z.B. 15 Minuten wieder auf Normaltemperatur sollte es keine Probleme geben ( die Dauer z.B. 15 kann in der CCu eingestellt werden )

                      • Bei Heizperiode aktiv = aus sollten dann die Thermostate alle auf 100% gefahren werden um dann über den Sommer die Thermostate zu schonen.

                      das kann eingestellt werden und steht auf 30 Grad . 100 geht in ioBroker nicht

                      • Bei jeden lauf des Scriptes wird ja immer die Function CreateStates aufgerufen um die Variablen anzulegen. Hier sollte man versuchen dieses nur ein

                      mal zu machen. Ist bestimmt dann auch schneller.

                      ****das ist nicht so. Die States werden nur einmal ausgelesen und das ist bei Programmstart. Im Schedule werden die States nicht mehr gecheckt.

                      Darum muss auch bei neuen Thermostaten das Programm neu gestartet werden, damit es diese erkennt. Eine merkliche Performance Anforderung ist

                      ohne nur dann vorhanden, wenn neue States angelegt werden müssen****

                      vG Looxer

                      1 Reply Last reply Reply Quote 0
                      • N
                        nobse last edited by

                        ` > - Bei Heizperiode aktiv = aus sollten dann die Thermostate alle auf 100% gefahren werden um dann über den Sommer die Thermostate zu schonen.

                        das kann eingestellt werden und steht auf 30 Grad . 100 geht in ioBroker nicht `

                        Bei Heizperiode aktiv = aus muss die Ventielstellung auf 100 % gesetz werden das sollte 4.valve_state sein.

                        Alles ander tasten wir uns dann mal ran.

                        Wünsche euch ein schönes Osterfest.

                        Gruß Norbert

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

                          @nobse:

                          … Ventielstellung auf 100 % gesetz werden das sollte 4.valve_state sein. `
                          VALVE_STATE ist "read only" !

                          1 Reply Last reply Reply Quote 0
                          • N
                            nobse last edited by

                            OK

                            muss aber gehen.

                            Wenn ich in der CCU Heizperiode auf false setze werden alle Thermostate auf ventilstellung 100% gefahre.

                            Muss mir noch mal das CCU Script ansehen was da genau passiert.

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

                              in der CCU können 0 und 100 gesetzt werden. In ioBoker nicht.

                              es gab auch mal eine Meldung dazu:

                              http://forum.iobroker.net/viewtopic.php … 100#p62099

                              1 Reply Last reply Reply Quote 0
                              • N
                                nobse last edited by

                                Hallo

                                habe bei mir das Feiertagsscript installiert und var UseFeiertagskalender = true; gesetzt.

                                feiertage.0.heute.boolean ist true

                                Es wird aber nicht die Einstellung für Feiertag verwendet sondern die für Freitag.

                                Ist das bei euch auch so?

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

                                  Hast du evt bei feiertag,Sonntag und Samstag im view den tick “wie Vortag“ gesetzt?

                                  Gesendet von meinem HUAWEI RIO-L01 mit Tapatalk

                                  1 Reply Last reply Reply Quote 0
                                  • N
                                    nobse last edited by

                                    Nein habe ich nicht.

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

                                      Hi,

                                      Feiertage wurden nicht erkannt. Fehler ist gefixt.

                                      Wird gleich hochgeladen.

                                      vG Looxer

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

                                        Version 0.72 ist hochgeladen.

                                        Fixes:

                                        // Version 0.72 14.04.2017 - Feiertag wurde nicht korrekt erkannt

                                        // ….......................Datumsformat für die Anzeige "letzter Programmlauf im View" wurde auf DDMMYYYY umgestellt

                                        // ..........................Das Feiertagsflag vom Feiertagsadapter wird synchronisiert mit dem Feiertagsflag der Heizungssteuerung

                                        //...........................Das Anwesenheitsflag von der Anwesenheitsfunktion wird synchronisiert mit dem Feiertagsflag der Heizungssteuerung

                                        vG Looxer

                                        1 Reply Last reply Reply Quote 0
                                        • N
                                          nobse last edited by

                                          Vielen Dank!

                                          Jetzt klappt es Super.

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

                                            @nobse:

                                            So Problem ist gelöst.

                                            Die Gewerke waren auf der CCU richtig angelegt. Im ioBroker aber fehlerhaft Importiert. Hier waren falsche Namen vorhanden. Ist wohl ein alter Fehler den ich bis jetzt nicht korigiert hatte.

                                            Nun werden erstmal alle Variablen angelegt.

                                            Dann kann ich jetzt weiter testen. `

                                            Hallo,

                                            wie hast du diesen Fehler korrigiert?

                                            Bei mir steht immer dieses $-Zeichen davor. Wenn ich es lösche, kommt es nach einer Weile wieder.

                                            Bekomme dann immer eine Fehlermeldung vom Script.

                                            javascript.0 script.js.Haus.Heizungsthermostatsteuerung: TypeError: $(…).each is not a function at getDevices (script.js.Haus.Heizungsthermostatsteuerung:296:114) at script.js.Haus.Heizungsthermostatsteuerung:249:1

                                            Frohe Ostern!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            707
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            34
                                            313
                                            75469
                                            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