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

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

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

      Wie versprochen gestern umgestellt und läuft ohne Probleme. Meine Frau hat sich heute früh auch schon beschwert das es im Bad kalt war (Zeiten vom neuen View im Bad nicht angepasst [emoji23])

      Gesendet von meinem Redmi Note 4 mit Tapatalk

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

        Habe es auch von einer v0.8x umgestellt (gestern), aber meine alten Views behalten (sind alle an mein Tablet angepasst).

        Bisher hat alles sauber funktioniert. Die vorhandenen Daten (Profil, Zeiten und Temperaturen, usw.) haben alle überlebt und die Heizung tut bisher, was sie soll.

        Scheint also alles gut zu funktionieren.

        Gruß,

        Eric

        Von unterwegs getippert

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

          super, danke euch.

          Dann ist mal die erste Hürde genommen.

          Ich nehme mal an, dass ihr mit CRON = 0 arbeitet. Das ist eine groessere Umstellung.

          Meine Tests bezogen sich auch überwiegend darauf.

          vG Looxer

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

            Hallo, danke an looxer und apollon77 für die neue Version, enthält wirklich ein paar tolle Neuerungen, auch das neue Design der VIS find ich klasse.

            Nur noch ne kurze Anmerkung zu den HMIP Geräten.Weiß jetzt nicht welche relevanz der Datenpunkt Check Manu-Mode im Script genau hat aber er ist hier nicht ganz korrekt.

            Hier müßte der Datenpunkt Set_Point_Mode hinkommen,

            //                      0.RPC-Pfad       1.GeraeteType      2\. Beschreibung,           3\. Type   4.DP-SollTemp        5.nicht verwendet  ID 6.DP MANU/AUTO Schaltung    7.Steuerung DV       8\. IstTemp                  9-Check-MANU-Mode       10-Ventilstellung wenn nicht Heizperiode    11\. Delay nach Verschluss zu
            ThermostatTypeTab[0]  = ['hm-rpc.0.',  'HM-TC-IT-WM-W-EU', 'Wandthermostat (neu)'       ,'WT',   '2.SET_TEMPERATURE'      ,   false,        '2.MANU_MODE',              true,                  '1.TEMPERATURE',             '2.CONTROL_MODE',           12,                                            0];
            ThermostatTypeTab[1]  = ['hm-rpc.0.',  'HM-CC-TC'        , 'Wandthermostat (alt)'       ,'WT',   '2.SETPOINT'             ,   false,        false,                      false,                 '1.TEMPERATURE',              false,                     12,                                            0];
            ThermostatTypeTab[2]  = ['hm-rpc.0.',  'HM-CC-RT-DN'     , 'Heizkoerperthermostat(neu)' ,'HT',   '4.SET_TEMPERATURE'      ,   false,        '4.MANU_MODE',              true,                  '4.ACTUAL_TEMPERATURE',      '4.CONTROL_MODE',           12,                                            0];
            ThermostatTypeTab[3]  = ['hm-rpc.1.',  'HmIP-eTRV'       , 'Heizkoerperthermostat(HMIP)','IPHT', '1.SET_POINT_TEMPERATURE',   false,        '1.CONTROL_MODE',           false,                 '1.ACTUAL_TEMPERATURE',      '1.SET_POINT_MODE',           12,                                            0];
            ThermostatTypeTab[4]  = ['hm-rpc.1.',  'HmIP-eTRV-2'     , 'Heizkoerperthermostat(HMIP)','IPHT', '1.SET_POINT_TEMPERATURE',   false,        '1.CONTROL_MODE',           false,                 '1.ACTUAL_TEMPERATURE',      '1.SET_POINT_MODE',           12,                                            0];
            ThermostatTypeTab[5]  = ['hm-rpc.1.',  'HmIP-WTH'        , 'Wandthermostat(HMIP)'       ,'IPWT', '1.SET_POINT_TEMPERATURE',   false,        '1.CONTROL_MODE',           true,                '1.ACTUAL_TEMPERATURE',        '1.SET_POINT_MODE',           12,                                            0];
            ThermostatTypeTab[6]  = ['hm-rpc.1.',  'HmIP-WTH-2'      , 'Wandthermostat(HMIP)'       ,'IPWT', '1.SET_POINT_TEMPERATURE',   false,        '1.CONTROL_MODE',           true,                '1.ACTUAL_TEMPERATURE',       '1.SET_POINT_MODE',           12,                                            0];
            ThermostatTypeTab[7]  = ['hm-rpc.1.',  'HmIP-STH'        , 'Wandthermostat(HMIP)'       ,'IPWT', '1.SET_POINT_TEMPERATURE',   false,        '1.CONTROL_MODE',           true,                 '1.ACTUAL_TEMPERATURE',       '1.SET_POINT_MODE',           12,                                            0];
            ThermostatTypeTab[8]  = ['hm-rpc.1.',  'HmIP-STHD'       , 'Wandthermostat(HMIP)'       ,'IPWT', '1.SET_POINT_TEMPERATURE',   false,        '1.CONTROL_MODE',           true,                 '1.ACTUAL_TEMPERATURE',       '1.SET_POINT_MODE',           12,                                            0];
            

            Und dann habe ich noch ein kleines Problem mit der Anwesenheitssteuerung. Die Abwesenheit wird anscheint korrekt erkannt und die Temperatur entsprechend abgesenkt. Allerdings gibts dann Probleme beim zurück kommen. Hier wird zwar in den Datenpunkten der Anwesenheitsteuerung und auch in den Globalparametern der Heizungsteuerung auf true umgestellt. Es zeigt auch dementsprechend in der VIS Anwesend an. Allerdings steht in den Source_Global_Parameter der Räume immer noch die Abwesenheit als Faktor an und die Temperatur bleibt weiterhin abgesenkt. Hast du eine Idee woher das kommen kann??

            Gruss Phil

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

              Hi Phil,

              vielen Dank fürs Feedback. Habs mir angesehen.

              1. Manu Mode HM-IP Geräte. Also ich habe das mit einem Wandthermostat getestet und gerade verifiziert.

              Es geht NUR über ControlMode. Andere Geräte habe ich aber nicht getestet. Der Datenpunkt CHECK_MANU_MODE ist der Datenpunkt der ein update erhält um auf den MANU mode zu stellen. Ist also wichtig.

              2. Anwesen-/Abwesenheit.

              Konnte ich nachvollziehen. Da gibt es noch ein Problem bei den Subscriptions. Ich weiss schon was gemacht werden muss.

              vG Looxer

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

                @Sylabil:

                Allerdings steht in den Source_Global_Parameter der Räume immer noch die Abwesenheit als Faktor an und die Temperatur bleibt weiterhin abgesenkt. Hast du eine Idee woher das kommen kann?? `

                Hi Phil,

                könntest du folgenden Fix testen ? Wäre super.

                wie gesagt zum Thema ControlMode. Das kann ich nicht bestätigen. Hast du das entsprechend getestet ?

                vG Looxer

                    // Anwesenheitsflag synchronisieren
                    if (UseAnwesenheitserkennung)  {
                        if (getState(StateAnwesenheitFunction).val !== getState(StateAnwesenheit).val ) {  // Feiertagsflag setzen
                //            setOwnState(StateAnwesenheit, getState(StateAnwesenheitFunction).val);
                            setState(StateAnwesenheit, getState(StateAnwesenheitFunction).val);
                            globalChange = true;
                        }
                    }
                
                
                1 Reply Last reply Reply Quote 0
                • S
                  Sylabil last edited by

                  Zu Punkt 1.

                  Ok dann habe ich den Datenpunkt falsch interpretiert. Ich dachte hier wird überprüft auf was für einem Modus (Auto/Manu) das Gerät gerade läuft.

                  Das zeigt er bei mir nämlich nur über den Set_Point_Mode an.

                  Das ist mir bei der Visu aufgefallen, als ich hier die Verknüpfung zum Anzeigen des aktuellen Modus auf Control_Mode gestellt habe hat er mir hier immer Auto angezeigt obwohl das Gerät im Manu war. Der Control_Mode ist wohl nur zum schreiben einer Änderung, zeigt aber nicht immer den aktuellen Status an.

                  Punkt 2

                  Hab die Änderung gerade getestet und sie funktioniert, danke für den schnellen Fix.

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

                    Interessanter Ansatz und eine schöne Lösung.

                    Da ich ein Freund von im Notfall autark laufenden Systemen bin: wäre es nicht in einer zukünftigen version ein Ansatz, die Daten, welche für den Thermostaten eingestellt sind, via putParamset direkt in den Thermostaten zu schreiben. bzw dann auch via getParamset aus dem Thermostaten auszulesen

                    gruss, Black

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

                      Hi,

                      muss ich mir mal ansehen.

                      Duty Cycle maessig kann man da nicht viele Uebertragungen machen.

                      Und würde auch nur bei HM gehen. Es gibt also ein paar "Aber" dabei

                      Hast du den JS Code zur Übertragung ?

                      vG Looxer

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

                        geht über das xmlrpc object, ersatzweise über tcl.

                        wobei wenn du mehrere paramater im mastersatz umschreiben willst nehm ich das tcl script.

                        ein einzelner wert im Master Satz mache ich so:

                        // Konstanten für CCU Push
                        var http = require('http'); 
                        var path = "/blabla.exe";
                        
                        function setCCUscript (sDevice,wochenprog) {
                            var data = 'object o1= devices.Get("' + sDevice + '");';
                            data +='string s2="";';
                            data +='if (o1) {';
                            data += 'xmlrpc.PutParamset (o1.Interface(), o1.Address(), "MASTER", "WEEK_PROGRAM_POINTER", '+ wochenprog.toString () +'); s2="SET";';
                            data += '} else { s2 = "NO DEVICE"; }';   
                            return data
                        }
                        
                        function setPushVar (data) {
                            var options = {
                            host: getObject('system.adapter.hm-rpc.0').native.homematicAddress,
                            port: 8181,
                            path: path,
                            method: 'POST',
                            headers: {
                                'User-Agent' : 'Mozilla/5.0',
                                'Content-Type': 'text/plain',
                                'Content-Length': data.length,
                            }
                            };
                            return options;
                        }
                        
                        function httpPost (options,data) {
                            var req = http.request(options, function(res) {
                                var body='';
                                res.on('data', function(d) { body += d.toString (); });
                                res.on('end', function() {   });      
                            });
                            req.on('error', function(e) { log('ERROR: ' + e.message,"warn"); });
                            (data ? req.write(data) : log("Daten: keine Daten angegeben"));
                            req.end();
                        }
                        
                        // Bei Änderung von Wochenprogramm Küche Push senden an CCU2
                        on ({id: "javascript.0.WEEKPROG.KUECHE", change: 'ne'}, function(obj) {
                            var script = setCCUscript ("AI_KUECHE_TH",obj.state.val);
                            httpPost (setPushVar (script),script);
                            log ("Ändern Küche Wochenprog auf Programm " + obj.state.val);
                        });
                        

                        mit mehren parametern zugleich kennich nur die möglichkeit über die tcl api. ich benutz da ein etwas modifiziertes script:

                        `#!/bin/tclsh
                        #
                        # Aufruf für ein putParamset
                        # Abgewandelte Form: ein oder mehrere parameter Möglich
                        # =====================================================
                        # Black in November 2016
                        #
                        # tclsh setparam <addresse> <paramset> <struct parameter="">
                        # z.B.
                        # tclsh setparam GEQ004711 MASTER "{MODE_TEMPERATUR_REGULATOR {int 2}}"
                        # adresse IMMER die Device Addy angeben, nie ein Channel, sonst tuts nicht
                        # Der Parameter MUSS in dieser version ein STRUCT sein
                        # heist "{par1 {Datatyp1 value1}{par2 {Datatyp2 value2}"... par3 bis parn in logischer folge
                        # Datatyp bool, int , float, string
                        
                        load tclrpc.so
                        set cmd [lindex $argv 2]
                        puts $cmd
                        #set cmd "{BACKLIGHT_ON_TIME {int 10}} {ENDTIME_SATURDAY_1 {int 440}}"
                        xmlrpc http://127.0.0.1:2001/ putParamset ] ] </struct></paramset></addresse>`
                        
                        gruss, Black
                        
                        1 Reply Last reply Reply Quote 0
                        • apollon77
                          apollon77 last edited by

                          Zuerst einmal gibt es beim hm-rpc Adapter schon ein issue das grundsätzlich einzubauen, von daher würde ich da jetzt keine sonderlösungen bauen.

                          Weiterhin wäre das einige was vllt gibt wäre den grundplan zu übertragen. Ob hm aber so viele schaltzeiten kann weiß ich nicht. Und ja Duty Cycle könnte bei einer Änderungs-Session interessant werden. Und es macht auch nur Sinn wenn alle aktoren bzw stellventile direktverknüpft sind … hm ...

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

                            @Blackmike:

                            Da ich ein Freund von im Notfall autark laufenden Systemen bin: wäre es nicht in einer zukünftigen version ein Ansatz, die Daten, welche für den Thermostaten eingestellt sind, via putParamset direkt in den Thermostaten zu schreiben. bzw dann auch via getParamset aus dem Thermostaten auszulesen `

                            Hi,

                            ich habe mich zwischenzeitlich intensiver mit dem Thema befasst.

                            Deine vorgeschlagene Lösung der Anforderung passt meiner Meinung nach nicht zum Konzept des Scriptes. Das Script soll helfen zu automatisieren, z.B. durch Kalendereintragungen, Abwesenheit/Anwesenheit Temperaturen, automatisierte Profilumschaltungen (Schichtarbeit), Feiertage.

                            All dies wird nicht oder nur ansatzweise von den HM Profilen unterstützt. Wie schon in der ersten Antwort geschrieben würde auch eine ständige Anpassung der Profile der Thermostate zu Problemen mit dem DC führen.

                            Um es kurz zu sagen. Das Script ersetzt nicht die GUI der Homematic sondern folgt einer erweiterten Logik

                            ABER

                            es gibt einen Ansatzpunkt und der beruht darauf, die Thermostate im Automatik Modus laufen zu lassen. Demnach würden sie für den Fall eines Systemproblems ihr Programm abspulen.

                            Hierfür muss zunächst für die Räume wo es relevant ist "erzwinge manuell Mode" ausgeschaltet werden (Raumprofil).

                            1. Gültigkeit in Minuten

                            Wenn die Gültigkeit in Minuten auf einen negativen Wert gesetzt ist (z.B. -1), dann werden alle manuellen Aenderungen (inkl des Thermostates sofort zurückgesetzt) Mit anderen Worten: Das Thermostat schaltet im Auto modus zum definierten Schaltpunkt und wird dann sofort wieder auf die momentan geplante SollTemp des Scriptes zurückgesetzt.

                            Nachteile: keine Manuellen Aenderungen am Thermostat möglich. Das kann aber durch andere Elemente Wettgemacht werden.

                            Es gibt hierbei auch etwas erhöhten Funkverkehr, weil ja das Script auf jeden Schaltpunkt des Thermostates reagiert.

                            ACHTUNG: beim Testen dieser Lösung ist mir noch ein Fehler aufgefallen, den ich für die nächste Version gefixt haben.

                            Ich kann aber bei Bedarf eine Zwischenversion per PN senden.

                            2. Nur zwei Homematic Schaltpunkte pro Tag und synch mit Script Schaltpunkten

                            Beispiel:

                            • Homematic Schaltpunkt Morgens 6:00 auf 20 Grad und Abends 22:00 auf 18 Grad

                            • Script Schaltpunkt Morgens 06:01 erster Synch Schaltpunkt und Abends 22:01 letzter Synch Schaltpunkt

                            Wenn die Einstellungen so gemacht werden, kann zu allen anderen Zeit beliebig geplant oder manuell geändert werdn.

                            Im Falle eines SystemDowns würde Morgens auf Tagestemp und Nachts auf AbsenkTemp geschaltet werden

                            Nachteil: Wenn innerhalb des Zeitraumes ein systemDown passiert wird die letzte Temperatur bis zum nächsten Auto Schaltpunkt gehalten

                            Ich sehe die Anpassungen für den Fallback auf der Homematic Seite eher als manuellen Aufwand, weil das ja nur einmalig passieren muss.

                            vG Looxer

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

                              Bzgl. Ausfall ioBroker, usw. habe ich bei mir zwei zusätzliche Schienen eingebaut:

                              Alle Heizungsprogramme (Notbetrieb) liegen noch auf der CCU und sind deaktiviert.

                              Im Fall der Fälle kann ich die Programme (2 pro Raum) aktivieren und habe einen halbwegs brauchbaren Betrieb (ohne den Komfort des Scriptes).

                              Und ich habe ein abgespecktes Notprogramm in den Geräten selber liegen, welches ja dann greift, wenn der Modus auf "Auto" geändert wird.

                              Das wäre dann pro Raum auch nur noch ein kleiner Eingriff.

                              Beides sind Notvarianten, die einen Standard-Tagesablauf abdecken.

                              Gruß,

                              Eric

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

                                Hi,
                                @eric2905:

                                Im Fall der Fälle kann ich die Programme (2 pro Raum) aktivieren `

                                Ich glaube Black ging es um den den Betrieb nach Ausfall ohne manuellen Eingriff.

                                (oder ich habe zu viel interpretiert)

                                Daher ist der beschriebene Ansatz so gewählt. Thermostate sind dann IMMER auf Auto-Modus womit der Fallback greift sobald die Situation eintrifft.

                                Habe ich auch getestet ….funktionierte (mit den Einschränkungen)

                                EDIT: damit ist auch ein Ausfall der CCU abgedeckt.

                                vG Looxer

                                1 Reply Last reply Reply Quote 1
                                • eric2905
                                  eric2905 last edited by

                                  Ist mir schon klar.

                                  Habe mir nur ein 3-stufiges System aufgebaut:

                                  1. Alles ok = Steuerung hat ioBroker

                                  2. ioBroker fällt aus = Steuerung übernimmt die CCU (Scripte aktivieren)

                                  3. CCU fällt auch aus = Im Gerät hinterlegte Steuerung zieht (Auto-Modus aktiv)

                                  Gruß,

                                  Eric

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

                                    Ich hätte da noch eine andere Frage. Ich Komme aus dem MSR Bereich und arbeite sehr gern mit Komfort und Eco Betrieb. Komfort ist ja schön für jeden Raum einstellbar, wäre es ein großer Aufwand die Absenkung auf einen einheitlichen wert zu bringen? Also nicht Absenkung um 2 Grad sonder zb auf 18 Grad?

                                    Gruß Robert

                                    Gesendet von meinem Redmi Note 4 mit Tapatalk

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

                                      @contex22:

                                      Habe mir nur ein 3-stufiges System aufgebaut: `

                                      Jap, dann ist es eine dritte Variante.

                                      Nachteil: manueller Eingriff (bei Situationen, die einen Fallback erfordern) notwendig

                                      Vorteil: Script ist vollumfänglich nutzbar

                                      und ich halte fest, dass es zahrleiche Möglichkeien gibt, einen oder mehrere Fallbacks einzubauen.

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

                                        yap, das war meine intension, bei ausfall das ganze system trotzdem lebensfähig zu halten.

                                        aber wenn sich etwas mit dem rpc adapter in der richtung tut, das er bei hm und hmip auch die mastersätze beherrscht, ist das glaub ich nicht nötig, in einem script nachzubilden.

                                        Gruss, Black

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

                                          @contex22:

                                          wäre es ein großer Aufwand die Absenkung auf einen einheitlichen wert zu bringen? Also nicht Absenkung um 2 Grad sonder zb auf 18 Grad? `

                                          Im Grunde kannst du es so einstellen, Die Minimaltemperatur ist dann die ECO Temperatur.

                                          beispiel:

                                          Eco Temp = Miniltemp 18 Grad

                                          geplante Raumtemp = 21 Grad

                                          Absenkung bei Abwesenheit 5 Grad

                                          Absenkung bei Urlaub 5 Grad

                                          jetzt zieht immer die Minimaltemp von 18 Grad.

                                          oder spricht da was dagegen ?

                                          vG Looxer

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

                                            Nein, von der Seite nicht. Kenn nur meine Frau, die friert so leicht und bei eingestellten 24 greift dann die 18 nicht mehr. Aber dann Stelle ich die Absenkung größer den die Absenkung geht ja nicht tiefer als die mindest Temperatur, oder?

                                            Gesendet von meinem Redmi Note 4 mit Tapatalk

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            920
                                            Online

                                            31.6k
                                            Users

                                            79.4k
                                            Topics

                                            1.3m
                                            Posts

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