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.
    • 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
                    • L
                      looxer01 last edited by

                      @Dirk:

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

                      hm-rpc.1.000A97098A" was ist das denn ? Da muesste die seriennummer stehen z.B. LEQ….. oder sieht das so bei HM-IP aus ?

                      vG Looxer

                      edit ´: tatsächlich steht ja im screenprint von dir. dann sind es wohl 14 Stellen bei HM_IP.

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

                        Hallo Looxer,

                        noch eine Info:

                        ThermostatTypeTab[3]  = ['hm-rpc.1.',  'HMIP-eTRV'       , 'Heizkoerperthermostat(HMIP)','HT',   '1.SET_POINT_TEMPERATURE',   14,      '1.SET_POINT_MODE',   false,                 '1.ACTUAL_TEMPERATURE',       '1.CONTROL_MODE',         30];
                        
                        

                        So sieht der Eintrag jetzt bei mir aus. Geändert habe ich noch 4.Manu_Mode in 1.SET_POINT_MODE wobei 0 = Auto und 1 = Manu ist.

                        Dein Programm scheint aber den Eintrag auf 3 zu setzten. ?

                        VIS habe ich jetzt auch mal installiert - das sieht gut aus. Muss mich aber noch mehr beschäftigen damit.

                        Dirk

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

                          Der manuelle mode wird hier gesetzt:

                                 // Setzen des Thermostates in den manuellen Modus - wenn moeglich / eingestellt
                                  if(ControlTab[x][7] !== false && getState(path + "." + ControlTab[x][0] + "." + "RaumParameter_ManuellModeForce").val === true ) {   // Geraet laesst sich auf MANU Schalten - im raumparameter steht auch, dass geschaltet werden soll
                                      ThermMode = getState(idExtract + "." + ControlTab[x][10]).val;
                                      if(ThermMode === 0 || ThermMode === 2) {                                                                                        // Pruefen ob der manuelle Modus oder Party Mode eingeschaltet ist
                                        log("Geraet " + idExtract +" Raum: " + roomName + "  in den Manuellen Modus gesetzt ","info");                                                      
                                        setState(idExtract + "." + ControlTab[x][7], getState(id).val);                                                                // setzen auf manuell - native boost und party werden nicht beachtet
                                        writelog(roomName,id,"Thermostat in den manuellen Modus versetzt")    
                                       } // endeif automode war eingeschaltet
                                  } // endif pruefe ob das Geraet in den manuellen Modus geschickt werden kann und soll
                          
                          

                          Eine 3 wird da nicht explizit gesetzt. Ich habe leider kein System im Zugriff (gehöre zu den wenigen die arbeiten )

                          Ich bin mir gar nicht sicher was zu diesem Zeitpunkt aus dem getstate erhalte. Muss ich zuhause mal testen.

                          Aber das erzwingen des Manuellen Modes ist ja auch irgendwie Kür, solange der Rest läuft.

                          Edit: noch zur Ergänzung: Der ManuMode wird gesetzt in dem die Solltemperatur im Datenpunkt "Manu_Mode" eingetragen wird.

                          Bleibt zu checken, ob das bei den IP Thermostaten auch so funktioniert

                          vG Looxer

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

                            Ja die Stelle hatte ich gefunden. Da scheint das Programm auch ohne Probleme durch zu laufen.

                            LOG:

                            javascript.0	2017-11-01 17:35:00.564	info	script.js.Heizungssteuerung.P_Thermostatsteuerung: Ende Abarbeitung fuer Raum Elternbad
                            javascript.0	2017-11-01 17:35:00.564	info	script.js.Heizungssteuerung.P_Thermostatsteuerung: Geraet hm-rpc.1.000393C99A1FE2 Raum: Elternbad in den Manuellen Modus gesetzt
                            javascript.0	2017-11-01 17:30:00.551	info	script.js.Heizungssteuerung.P_Thermostatsteuerung: Ende Abarbeitung fuer Raum Elternbad
                            javascript.0	2017-11-01 17:30:00.550	info	script.js.Heizungssteuerung.P_Thermostatsteuerung: Geraet hm-rpc.1.000393C99A1FE2 Raum: Elternbad in den Manuellen Modus gesetzt
                            
                            

                            Das hat aber was mit dem VIS zu tun - glaube ich?

                            Auch weil es diesen Logeintrag für das Kinderbad nicht gibt. Das Gerät hat das Programm aber erkannt und auch alle Datenpunkte angelegt.

                            Im Kinderbad habe ich über die CCU aber noch nicht auf Manuel gestellt, sondern das Gerät steht noch auf Auto.

                            Auch habe ich für das Kinderbad noch keine VIS - View angelegt.

                            Ich stelle das mal um - schauen was passiert.

                            Dirk

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

                              ich schätze, dass das setzen des manuellen Modus bei IP Geräten anders funktionert.

                              siehe meinen letzten post unter "edit"

                              schalten den Manuellen Mode mal aus. Damit wir nicht zu viele mögliche Fehlerquellen haben.

                              @Dirk:

                              uch weil es diesen Logeintrag für das Kinderbad nicht gibt. Das Gerät hat das Programm aber erkannt und auch alle Datenpunkte angelegt.

                              Im Kinderbad habe ich über die CCU aber noch nicht auf Manuel gestellt, sondern das Gerät steht noch auf Auto. `

                              Hast du das Logging im Script auf true gesetzt ?

                              Beim starten des Programmes (also nicht beim schedule) werden alle Räume und Thermostate/Sensoren gelistet. Das ist hilfreich zu sehen, ob die Geräte überhaupt teilnehmen.

                              vG Looxer

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

                                Logging hatte ich wieder aus gestellt da ich ja jetzt weiß das die 2 Geräte Teilnehmen.

                                Es gibt auch eine direkte Reaktion:

                                javascript.0	2017-11-01 17:48:59.797	warn	at Object. (script.js.Heizungssteuerung.P_Thermostatsteuerung:429:25)
                                javascript.0	2017-11-01 17:48:59.797	warn	at ThermostatChange (script.js.Heizungssteuerung.P_Thermostatsteuerung:683:18)
                                javascript.0	2017-11-01 17:48:59.797	warn	at ManAdjustments (script.js.Heizungssteuerung.P_Thermostatsteuerung:862:5)
                                javascript.0	2017-11-01 17:48:59.797	warn	Wrong type of javascript.0.Heizung.Heizplan.Kinderbad.View_Manually_Adjusted: "number". Please fix, while deprecated and will not work in next versions.
                                javascript.0	2017-11-01 17:48:59.797	info	script.js.Heizungssteuerung.P_Thermostatsteuerung: Routine ThermostatChange: Thermostat hm-rpc.1.000393C99A2020.1.SET_POINT_TEMPERATURE Raum undefined Thermostat Solltemperatur-Aenderung erkannt
                                
                                

                                Das steht im LOG wenn ich das Heizungsthermostat auf Manuel stelle.

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

                                  Hi Dirk,

                                  ok die Warnung: Wrong type of javascript.0.Heizung.Heizplan.Kinderbad.View_Manually_Adjusted: "number".

                                  createState(State, 0,  {read: true, write: true, type: 'number', name: 'Datum und Zeit der letzten Tempanpassung'  , desc: 'Zeitstempel'});
                                      State =  RoomPath  + "View_Manually_Adjusted";   
                                  
                                  

                                  kannst du so im code korrigieren. Danach den Datenpunkt löschen und neuanlegen lassen. oder manuell im Datenpunkt ändern.

                                  Ändert aber nix an Funktion.

                                  Der Eintrag: "Thermostat Solltemperatur-Aenderung erkannt" heisst, dass das Programm davon ausgeht, dass am Thermostat abweichend eingestellt worden ist. Das kann ja initial sein. Stell das Thermostat mal auf Solltemperatur nach Heizplan oder stelle die Länge der manuellen Temperaturverstellung auf 0

                                  Ansonsten sieht es aber so aus, dass es funktioniert. (laut log)

                                  vG Looxer

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

                                    Hi Looxer,

                                    erst mal meine Hochachtung für die Arbeit! Genau so ein Script könnte ich später mal brauchen für die Steuerung meiner FHT80b und einiger HM-Thermostate.

                                    Leider bin ich noch nicht so weit da ich Einsteiger bin und die FHT80b nicht angebunden bekomme.

                                    Ist hier vielleicht jemand der die alten FHT80b die mal ELV verkauft hat mit einem Busware USB-Cul verbunden hat?

                                    LG

                                    Wolfgang

                                    1 Reply Last reply Reply Quote 0
                                    • W
                                      Wildbill last edited by

                                      Hi,

                                      ich habe FHT80b (und diverse andere Dinge aus der FHT/FS20-Ära) in iobroker laufen, auch in diesem Skript. Allerdings hängt der CUL (ein NanoCUL, in etwa funktionsgleich mit dem von Busware) nicht direkt in iobroker, sondern die Geräte werden mittels FHEM über den CUL angesprochen und iobroker steuert FHEM via FHEM-Adapter. Läuft einwandfrei. Ich meine auch irgendwo mal gelesen zu haben, dass iobroker nur FS20 via CUL kan, aber keine FHT. Bei mir wurde nicht einmal der CUL im iobroker erkannt, deshalb der Umweg über FHEM.

                                      Wie ich das im Heizungsskript verwende siehst Du ein paar Seiten weiter vorne, da ist mein Skript drin, aber eben mit FHEM-Datenpunkten im iobroker.

                                      Da FHEM aber nicht wirklich viel Power und Speicher frisst, wäre das evtl. eine Überlegung wert bei Dir?

                                      Gruss, Jürgen

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

                                        @Wildbill:

                                        Hi,

                                        ich habe FHT80b (und diverse andere Dinge aus der FHT/FS20-Ära) in iobroker laufen, auch in diesem Skript. Allerdings hängt der CUL (ein NanoCUL, in etwa funktionsgleich mit dem von Busware) nicht direkt in iobroker, sondern die Geräte werden mittels FHEM über den CUL angesprochen und iobroker steuert FHEM via FHEM-Adapter. Läuft einwandfrei. Ich meine auch irgendwo mal gelesen zu haben, dass iobroker nur FS20 via CUL kan, aber keine FHT. Bei mir wurde nicht einmal der CUL im iobroker erkannt, deshalb der Umweg über FHEM.

                                        Wie ich das im Heizungsskript verwende siehst Du ein paar Seiten weiter vorne, da ist mein Skript drin, aber eben mit FHEM-Datenpunkten im iobroker.

                                        Da FHEM aber nicht wirklich viel Power und Speicher frisst, wäre das evtl. eine Überlegung wert bei Dir?

                                        Gruss, Jürgen `
                                        Hallo Jürgen,

                                        erst mal vielen Dank für deine Antwort!

                                        In fhem habe ich alle FHTs und HMs eingebunden. Das läuft sehr gut.

                                        Du nutzt dann ioBroker nur als komfortable Oberfläche für die Visualisierung?

                                        Das wäre natürlich auch eine Möglickeit wobei ich mir im Augenblick noch nicht vorstellen kann wie fhem + ioBroker gleichzeitig auf dem PI installiert werden können!

                                        LG

                                        Wolfgang

                                        1 Reply Last reply Reply Quote 0
                                        • W
                                          Wildbill last edited by

                                          Hi,

                                          doch sollte reichen, wenn es nicht gerade ein Pi erster Generation ist. Mit einem GB Ram läuft beides parallel auf einem Raspi2 oder 3, wenn sich das ganze in Grenzen hält, wobei da eher iobroker der limitierende Faktor ist, da es je nach Anzahl aktiver Adapter ein Vielfaches an Ressourcen gegenüber FHEM braucht.

                                          Aber, so habe ich auch angefangen, ging zwischendurch auf einen Celeron-Rechner mit 2GB, der noch rumstand und stehe nun vor einem weiteren Umzug auf einen NUC7i3BNK mit 16GB, der dann mit mehreren virtuellen Maschinen (virtualbox unter debian) FHEM, iobroker (mit diversen anderen Adaptern), Twonky media server, Seafile, Nextcloud und Weewx (Wettersoftware) beherbergen soll. Somit gehe ich von inzwischen 3 Banana Pi, einem Raspi 2 und dem Celeron-Server zurück zu einem zentralen Gerät, das dann auch noch weniger Strom verbraucht. Je nach Ambitionen kommt das auch noch auf Dich zu. :lol:

                                          Aber zurück zum Thema. Ja, versuche FHEM und iobroker parallel, wenn 1GB Ram oder mehr vorhanden ist. Iobroker dann als komfotable Bedienoberfläche und Visualisierung und vielleicht noch der eine oder andere zusätzliche Adapter. Sollte klappen, viel Erfolg!

                                          Gruss, Jürgen

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

                                            Ist es auch möglich fhem auf dem Pi laufen zu lassen und das dann über das iobroker auf einem PC unter win steuern zu lassen???

                                            LG

                                            Wolfgang

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            663
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

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