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 goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [Vorlage] Heizungsthermostatsteuerung - Script

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

      Hallo Looxer, danke für die Hinweise!

      Ich habe mal Screenshots meiner Konfiguration angehängt. Ich sehe die Inkonsistenz nicht. Ist aber vielleicht auch ein "Mann-Kühlschrank-Butter"-Problem, für erhellende Hinweise bin ich sehr dankbar!
      3975_screenshot_20171031_094920.png
      3975_screenshot_20171031_094955.png
      3975_screenshot_20171031_100218.png
      3975_screenshot_20171031_100303.png

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

        Hi,

        um ehrlich zu sein muss ich ein wenig raten. Da ich unterwegs bin, kann ich auch nicht testen.

        Ich hatte mal ein Problem mit den Gewerken/Räumen. Nach löschen aus den ioBroker Aufzählungen und Neuerstellung (stop and start REGA adapter) war das Problem gelöst.

        Dann fällt mir auf, dass du die Gruppierungen dem Gewerk Heizung zugeordnet hast. Nimm mal das Gewerk aus den Gruppierten Thermostaten

        Möglicherweise kommt da was rüber womit das script nix anfangen kann.

        vG Looxer

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

          Es funktioniert jetzt, vielen Dank!

          Das Entfernen des Gewerks aus der Gruppe hat geholfen!

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

            vielen Dank für die Rückmeldung. Ist auch gut zu wissen.

            Ich denke, dass das ein Punkt für die ioBroker Entwicklung ist.

            Der Fehler hätte eigentlich nicht hochkommen sollen.

            vG Looxer

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

              Jetzt ist der Fehler wieder da. :x

              Er tritt offensichtlich auf bei folgendem Aufruf:````
              rooms = getEnums('rooms');

              
              Der Fehler lässt sich mit folgendem Test-Skript reproduzieren:
              

              var xx = getEnums('rooms');
              console.log("debug");

              
              Selbst wenn ich alle Einträge aus Rooms lösche und einen Dummy Einfüge, tritt der Fehler auf.
              
              Wenn ich aber wiederum ein Dummy-Enum anlege und das an getEnums() übergebe, dann lüft das Test-Skript durch.
              
              Der Fehler tritt auf in folgender Zeile (2035 von javascript.js):
              
                                      members: (objects[enums[i]].common) ? objects[enums[i]].common.members : [],
              
              
              Woran könnte das liegen?
              
              Edit: Übrigens kann ich das enum.rooms auch nicht löschen.
              
              Fehlermeldung:
                ` > Cannot delete "enum.rooms" because not allowed `  
              
              Der Fehler tritt auch dann auf, wenn enum.rooms komplett leer ist :?
              
              Edit2: Jetzt geht es wieder. Neustart von iobroker hat das Problem (vorerst) gelöst…
              1 Reply Last reply Reply Quote 0
              • L
                looxer01 last edited by

                @cstauch:

                Jetzt ist der Fehler wieder da. `

                Das Script läuft normalerweise mit rooms = getEnums('rooms') durch und füllt die rooms-tabelle

                Deine enum.rooms Definition sieht normal aus.

                Daher der Vorschlag die Räume aus den Gruppierungen zu nehmen. Ist vermutlich das gleiche Problem.

                vG Looxer

                Edit

                aaah - ich habe gerade erst dein Edit2 gesehen.

                hmmm. Warum sollte ein Neustart -ohne Aenderung- etwas aendern.

                Ich schlage trotzdem vor die Raumzuordnung aus den Gruppierungen zu entfernen und neu zu starten.

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

                  Hallo zusammen,

                  ich melde mich nach längerer Zeit mal wieder. Der Job hat Vorrang vor der Bastelei.

                  Zunächst Dank an Torsten für diesen Tip:
                  ` > Hallo tobetobe,

                  wenn du Ubuntu nutzt kann ich dir "Kate" als Editor empfehlen mit allen anderen hat es bei mir auch nicht funktioniert. Seitdem ich diesen nutze habe ich keine Probleme mehr. `
                  Kate ist eindeutig der bessere Editor und hat das copy/paste-Problem nicht.

                  Dann an Looxer: Danke für den Hinweis, den Fehler im Code konnte ich manuell korrigieren - war der einzige. Nach intensivem Lesen des gesamten Forumbeitrags habe ich das Skript zum Laufen bekommen. Die Fehlermeldungen hatten mit Räumen und Gewerken, die mit $func beginnen, zu tun. Den Anweisungen folgend, habe ich diese Aufzählungen gelöscht und Rega neu gestartet. Die $func tauchen aber immer wieder auf, selbst für Räume, die eindeutig bezeichnet sind (zB gibt es zum Wohnzimmer noch eine $func… livingRoom). Gleiches bei Gewerken. Nachdem ich einfach mal akzeptiert habe, dass diese Dinger immer wieder erscheinen, läuft das Skript. Müssig zu fragen, warum. Wenn ich das richtig verstanden habe, kann man Warnungen ignorieren- korrekt?

                  Ich taste mich jetzt mal an das Befüllen der Raumparameter in den verschiedenen vis. Kurze Frage dazu: Müssen Uhrzeit und Temperatur auch dann manuell für einen Tag eingetragen werden, wenn der Haken "wie Vortag" gesetzt ist? Und: Können nicht benötigte Zeiträume leer gelassen werden? Darf das also so aussehen, wie in dem Bild?

                  Beste Grüße und euch morgen noch einen schönen Feiertag,

                  tobetobe
                  3875_bildschirmfoto_vom_2017-10-31_19-45-17.png

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

                    Hi

                    @tobetobe:

                    Die $func tauchen aber immer wieder auf, selbst für Räume, die eindeutig bezeichnet sind (zB gibt es zum Wohnzimmer noch eine $func… livingRoom). Gleiches bei Gewerken. `

                    dazu kann ich gar nichts sagen. Das habe ich bei mir auch nie beobachtet

                    Also mal in die Runde gefragt - Kennt jemand die Ursache ?

                    @tobetobe:

                    Kurze Frage dazu: Müssen Uhrzeit und Temperatur auch dann manuell für einen Tag eingetragen werden, wenn der Haken "wie Vortag" gesetzt ist? `

                    Nein, die Funktion dient zur vereinfachten Pflege.

                    Beispiel: alle "Wie Vortag" Flags wurden gesetzt. Dann muss nur die erste Zeile (Montag) gepflegt werden. Alle anderen werden ignoriert

                    @tobetobe:

                    Und: Können nicht benötigte Zeiträume leer gelassen werden? Darf das also so aussehen, wie in dem Bild? `

                    Ja und Nein. Der letzte Eintrag einer Zeile muss 00:00:00 enthalten. Alle anderen danach kommend werden ignoriert

                    Beispiel: Erste Spalte am Montag wird auf 20 Grad und bis Uhrzeit auf 00:00:00 gesetzt. Dann gibt es nur eine Temperatur für den Montag 24h.

                    Beide Beispiele zusammen genommen: Alles auf "wie Vortag" und erste Spalte mit Temperatur und bis Uhrzeit "00:00:00" würde bedeuten, dass es generell nur eine Temperatur gibt für jeden Tag der Woche und Feiertags.

                    Allerdings würden noch zusätzlich die Parameter die Temperatur beeinflussen. (z.B. Abwesenheitsabsenkung), falls so eingestellt.

                    Viele Gruesse

                    Looxer

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

                      Hallo,

                      bevor ich mich mit dem Thema etwas tiefer beschäftige, möchte ich etwas Fragen:

                      Kann ich das Script nutzen?

                      Meine eingesetzten Geräte:

                      1x HmIP-FAL230-C6 - Fussbodenheizung im 1OG

                      1x HmIP-FAL230-C10 - Fußbodenheizung EG

                      8x HmIP-WTH-2 - Raumthermostat

                      2x HMIP-eTRV - Für die Handtuchhalter

                      Nach durchschauen des Code habe ich nur die HMIP-eTRV gefunden. Die HmIP-WTH-2 sind nicht als Typ definiert.

                      Daher meine Frage.

                      VG Dirk

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

                        Hi Dirk,

                        @Dirk:

                        nach durchschauen des Code habe ich nur die HMIP-eTRV gefunden. Die HmIP-WTH-2 sind nicht als Typ definiert. `

                        Die Typen lassen sich generell einrichten. Ob es funktioniert muss getestet werden. Vielleicht braucht es noch Anpassungen.

                        Beispielsweise musste ich bei den alten Thermostaten nach Rückstellung von der Absenktemperatur auf geplante Temperatur einen Delay einbauen.

                        Also; im Prinzip sollte es funktionieren. Ich habe es aber für die IP Geräte selber noch nicht getestet.

                        Bei der Fussbodenheizung ist dir sicher selber klar, dass kurzfristige Temperatur-Aenderungen (z.B. Fenster öffnet oder bei Abwesenheit) eher nicht dienlich sind. (kann aber ja auch über die Raumparameter gesteuert werden)

                        Wenn du Geduld mitbringst, dann helfe ich gerne.

                        vG Looxer

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

                          Hallo Looxer,

                          WoW danke für die schnelle Antwort.

                          Danke für das Angebot der Hilfe, dass nehme ich gerne an.

                          Daher möchte ich gerne etwas zu meiner Motivation schreiben, damit es keine Missverständnisse gibt.

                          Unser Haus ist 6 Monate alt. Verbaut ist meistens Wire bis auf die Thermostate und 3x ein 6fach Taster.

                          Meine Motivation ist die Automatisierung daher habe ich auch VIS nicht installiert.

                          Durch die moderne Bauweise ist die Fussbodenheizung doch recht schnell - zumindest beim Heizen, das abkühlen dauert halt.

                          Nach meinen ersten Test benötigt die Heizung für eine "Wohl fühl - Temperatur" ca. 30 Minuten.

                          Mir geht es also darum, das das Haus automatisch auf Ereignisse reagiert.

                          Derzeit löse ich das mit den Wochenprogrammen der Thermostate. In Abhängigkeit der Parameter - Ist es in den nächsten 3 Tagen kalt (weatherunderground adapter) schalte die Heizperiode ein und ist eine bestimmte Person (Kind1, Kind2. Mann, Frau - Tr-064 adapter) zu Hause - schalte die entsprechenden Wochenprogramme 1-6.

                          Auch den Feiertag-adapter habe ich eingebunden.

                          Das funktioniert auch ganz gut, ist aber etwas Starr.

                          Möchte ich etwas ändern, dann fasse ich alle Wochenprogramme (8x) an. Das ist auch der HomeMatic WebUi echt nicht gut gelöst und macht keinen Spaß. Wenn jemand die Temperatur per Hand ändert wird dies nicht zurückgestellt (erst wenn im Wochenprogramm eine neue Zeit beginnt) usw. usw.

                          Da ich das alles etwas einfacher gestalten möchte und die Steuerung aus der CCU heraus nehmen möchte. Habe ich nach Lösungen gesucht.

                          Dabei bin ich auf Dein Script gestoßen, was einiges an meinen Anforderungen abdeckt. Eine sehr Gute Arbeit mit viel Mühe - großen Respekt.

                          Da ich mir die Arbeit ersparen möchte, das alles nochmal zu Coden oder in Blocky nachzubauen.

                          Ja ich hätte die Geduld und auch die Lust. Passt das Script den zu meiner Motivation oder ist Deine Empfehlung eher - es neu anzugehen und es selber umzusetzen.

                          vG Dirk

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

                            Hi Dirk,

                            @Dirk:

                            Passt das Script den zu meiner Motivation oder ist Deine Empfehlung eher - es neu anzugehen und es selber umzusetzen. `

                            Du hast dir ja sicher die Feature angesehen. Gerade die Reaktion auf Events ist eine Stärke, also

                            Feiertage, An/Abwesenheit, Urlaub, Party, Schichtarbeit etc. Wenn gewünscht über den google Kalender was sehr einfach geht und somit auch über das Handy ausserhalb des Netzwerkes.

                            Vermutlich ist es weniger Arbeit, deine Geräte hinzuzufügen. Im idealfall ist es wirklich nur ein Eintrag in der Liste. - mal sehen.

                            vG Looxer

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

                              Hi Dirk,

                              Ich empfehle folgende Vorgehensweise.

                              Nutze zunächst die Raumliste und fange mit dem Handtuchhalter in einem Raum an.

                              Dazu brauchst du ja nicht einmal die View installieren. Somit kannst du innerhalb weniger Minuten einen ersten Test machen.

                              Verstellen kannst du ja über die Objektliste. Wenn du merkst, dass es im Prinzip klappt kannst du ja den ersten View installieren.

                              Manchmal gibt es Probleme mit den Aufzahlungen. Heizgruppen sollten nicht im Heizungsgewerk aufgenommen werden und auch nicht die Räume. (bringt ja auch i.d.R. nix)

                              vG Looxer

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

                                OK ich habe das mal Probiert.

                                Einige kleine Änderungen musste ich mache - dazu gleich mehr, das Programm hat aber Warnungen:

                                javascript.0 2017-11-01 12:05:00.299 warn at Object. (script.js.Heizungssteuerung.P_Thermostatsteuerung:305:1)

                                javascript.0 2017-11-01 12:05:00.299 warn at LoopRooms (script.js.Heizungssteuerung.P_Thermostatsteuerung:530:1)

                                javascript.0 2017-11-01 12:05:00.299 warn State "javascript.0.Heizung.Heizplan.GlobaleParameter.Source_last_Program_Run" not found

                                javascript.0 2017-11-01 12:03:48.285 info script.js.Heizungssteuerung.P_Thermostatsteuerung: registered 0 subscriptions and 1 schedule

                                javascript.0 2017-11-01 12:03:48.285 info script.js.Heizungssteuerung.P_Thermostatsteuerung: Devices initialisiert

                                javascript.0 2017-11-01 12:03:42.528 info Start javascript script.js.Heizungssteuerung.P_Thermostatsteuerung

                                Die Variablen wurden auch nicht angelegt, also keine der neuen Variablen wurden angelegt. Somit stimmt die Meldung.

                                Hier nun meine Anpassungen:

                                Zeile 66 – var SensorGewerk = "Verschl"; Ich habe noch HM-IP Tür-/Fenstersensoren (HMIP-SWDO) - damit die nicht gefunden werden hier Quatsch eingegeben.

                                Zeile 75 -- var UseRoomList = true; //Wenn testmodus werden nur die Angegebenen Raeume abgearbeitet

                                Zeile 76 -- var RoomList = [];

                                Zeile 77 -- RoomList[0] = ['Elternbad']; // Liste der Raeume die gesteuert werden soll zum Testen

                                Zeile 78 – // RoomList[1] = ['Elternbad'];

                                Zeile 79 – // RoomList[2] = ['Wohnzimmer']; usw. alle anderen Auskommentiert.

                                Zeile 99 – var debug = true;

                                Zeile 112 -- var UseEventsGlobalParameter = false;

                                In Zeile 174 - 177 das hm-rpc.0. auf hm-rpc.1. geändert - da die Thermostate da sind.

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

                                  Hi Dirk

                                  @Dirk:

                                  javascript.0 2017-11-01 12:05:00.299 warn State "javascript.0.Heizung.Heizplan.GlobaleParameter.Source_last_Program_Run" not found `

                                  Evt gibt es ein asynchron, also zeitliches Problem. Das kann beim erstmaligen Lauf des Programmes passieren.

                                  Der Parameter sollte angelegt sein. Mach nochmal einen Refresh der Objektliste und schau nach.

                                  der CreateState steht hier

                                  State = Gparameterpath + ".Source_last_Program_Run"; 
                                  createState(State, "init",  {read: true, write: true, type: 'string', name: 'Datum/Zeit des letzten Programmlaufes' , desc: 'Datum/Zeit des letzten Programmlaufes'});
                                  
                                  

                                  Ansonsten kannst du ggf noch

                                  var VerwendungSelectValue   = true; 
                                  
                                  

                                  auf false setzen. Dann kannst du im VIS nicht mit der Auswahlliste arbeiten, hast aber in der Objektliste die wirklichen Temperaturen stehen.

                                  Allerdings dürfte die Umstellung bei angelegten States dazu führen, dass der Heizplan initial mit temperaturen von 0 - 17 oder so angelegt ist.

                                  Das Gewerk ist im standard "Heizung" (ggf anpassen) und muss den Thermostaten in der CCU zugeorndet sein.

                                  Läuft das Programm denn ansonsten durch ?

                                  vG Looxer

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

                                    Hallo Looxer,

                                    also das Programm läuft weiter. Die Warnung kommt alle 5 Minuten, also scheint es gemäß Cron alle 5 Minuten durch zu laufen.

                                    Da ich ja VIS nicht installiert habe, versuche ich mal das "var VerwendungSelectValue = true; ".

                                    Und OH - da schaue ich noch mal.

                                    Es ist dem Gewerk "Heizung" und "Thermostat" zugeordnet. Das werde ich mal auf nur "Heizung" ändern.

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

                                      Hi Dirk,

                                      var VerwendungSelectValue = true; kannst du auf false setzen.

                                      Wie gesagt, dann kannst du lesbare Temperaturen in die Objektliste setzen.

                                      Allerdings kann VIS das viel übersichtlicher. Aber du willst ja möglichst wenig eingreifen.

                                      Von daher kann das auch ok sein.

                                      @Dirk:

                                      also scheint es gemäß Cron alle 5 Minuten durch zu laufen. `
                                      werden denn bei dem HMIP-eTRV Temperaturen gesetzt ?

                                      Wenn das funktionieren sollte, dann kannst du die Liste einfach um ein HmIP-WTH-2 erweitern.

                                      ThermostatTypeTab[4]  = ['hm-rpc.1.',  'HmIP-WTH-2'      , 'Heizkoerperthermostat(HMIP)','HT',   '4.SET_POINT_TEMPERATURE',   10,      '2.MANU_MODE',    	 true,                 '4.ACTUAL_TEMPERATURE',       '4.CONTROL_MODE',         30];
                                      
                                      

                                      vG Looxer

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

                                        Hallo Looxer,

                                        da scheint doch einiges andere im Argen zu liegen. Was nix mit dem Programm zu tun hat.

                                        Also kurz was habe ich gemacht:

                                        Da es ja die Warnung mit der fehlenden Variablen gab, habe ich kurz ein kleines Programm zusammen kopiert, was die Variable anlegt.

                                        ! var JSPath = "javascript.0."; // JS- Pfad
                                        ! var path = JSPath +'Heizung.Heizplan'; // Pfad fuer create states
                                        ! var Gparameterpath = path + ".GlobaleParameter"; // Pfad in die Globalen Parameter
                                        ! State = Gparameterpath + ".Source_last_Program_Run";
                                        ! createState(State, "init", {read: true, write: true, type: 'string', name: 'Datum/Zeit des letzten Programmlaufes' , desc: 'Datum/Zeit des letzten Programmlaufes'});

                                        Das hat auch funktioniert und die Variable wurde angelegt.

                                        Anschl. gab es auch keine Fehlermeldungen im Programm, sondern Dein Programm lief durch und hat auch brav Datum und Uhrzeit in die Variable geschrieben.
                                        1187_letzter_programmlauf.jpg
                                        Mehr aber auch nicht. Also keine weiteren Variablen.

                                        Aber auch keine Warnungen mehr im Log.

                                        Dann habe ich das Heizungsthermostat in der CCU geändert - nur noch Gewerk "Heizung".

                                        Anschl. zur Sicherheit das Heizungsthermostat in ioBroker unter Objekte gelöscht und die Adapter neu gestartet.

                                        Ergebnis:
                                        1187_ergebnis.jpg

                                        Was ist anders bzw. neu.

                                        Jetzt gibt es richtige Icons, was es z.B. bei "Wandheizung Kinderbad" nicht gibt.

                                        Bei Funktion steht jetzt 2x Heizung.

                                        Ich glaube fast - ich habe ein Sync -Problem was ich erst mal lösen muss.

                                        Dirk

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

                                          Hi Dirk,

                                          es sieht so aus, dass die Thermostate nicht eingelesen werden. Daher werden auch die States nicht angelegt.

                                          Aendere bitte mal

                                          4.SET_POINT_TEMPERATURE' in 1.SET_POINT_TEMPERATURE'

                                          2.MANU_MODE den habe ich gar nicht gefunden - liegt aber vielleicht in einem anderen Kanal?

                                          4.ACTUAL_TEMPERATURE in 1.ACTUAL_TEMPERATURE

                                          4.CONTROL_MODE' in 1.CONTROL_MODE'

                                          Die Datenpunkte scheinen von Kanal 4 auf Kanal 1 gelegt worden zu sein.

                                          vG Looxer

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

                                            Hallo Looxer,

                                            danke jetzt sind Datenpunkte da.

                                            Ich musste aber die Länge noch von 10 auf 14 ändern, da es folgende Fehlermeldung gab:

                                            javascript.0	2017-11-01 14:44:09.674	error	at script.js.Heizungssteuerung.P_Thermostatsteuerung:424:43
                                            javascript.0	2017-11-01 14:44:09.674	error	script.js.Heizungssteuerung.P_Thermostatsteuerung: TypeError: Cannot read property 'native' of null
                                            javascript.0	2017-11-01 14:44:09.659	warn	Object "hm-rpc.1.000A97098A" does not exist
                                            
                                            

                                            Jetzt läuft es und ich schaue mal ob sich auch die Werte verändern.

                                            Dirk

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            972
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

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