Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

[Vorlage] Heizungsthermostatsteuerung 2.1 - Script

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascripttemplateheatingclimate
1.1k Beiträge 115 Kommentatoren 396.8k Aufrufe 61 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • F Offline
    F Offline
    frostnatt
    schrieb am zuletzt editiert von
    #717

    Hi Looxer,

    ich habe die Funktion "Finde Aktives Raumprofil" um die Priorisierung der Globalen Profile erweitert (oder besser gesagt versucht zu erweitern :? )

    Hier die Variable zum Aktivieren der Funktionalität und die Prio-Tabelle.

    var UseEventsGlobalProfilPrio = true;     //Priorisierung der globalen Profile, wenn mehrere gleichzeitig aktiv sind
    var GlobalProfilPrioTab = [];
    GlobalProfilPrioTab[0] = 2;                //höchste Prio
    GlobalProfilPrioTab[1] = 1;
    
    

    Hier die Funktion.

    / Funktion Finde Aktives Raumprofil
    //-----------------------------------------------------------------------------------------------------
    function ActiveProfile (room,Profil) {
        var pathprofile = path + "." + room;
        var ProfilName;
        var ActiveGlobalProfileList = [];	//Liste der aktiven globalen Profile
        var ProfileFoundFlag = false;		//Flag zum Abbrechen der weiteren Profilermittlung
        if (MaxProfile === 1) {
            Profil = 1;
            Source_Profil = 1;
            return Profil;
        }
    
        // Erst Raumprofil checken - prio1
        if (UseEventsRaumProfilSelect === true) {
            for (i = 1; i <= MaxProfile; i++) {
                ProfilName = UseEventR_Profil;
                ProfilName = UseEventR_Profil.replace("<raumname>", room);
                ProfilName = ProfilName.replace("<profilnummer>", i);
                if (getState(ICALPath + "." + ProfilName).val) {
                    setOwnState(pathprofile + ".AktivesEventProfil", i);
                    Source_Profil = i;
                    Source_ICALEvent = ProfilName;
                    return i;
                }
            } // ende for i
        } // ende if globalProfilSelect
    
        // Globales Profil ist prio2
        if (UseEventsGlobalProfilSelect === true) {
            for (i = 1; i <= MaxProfile; i++) {
                ProfilName = UseEventG_Profil;
                ProfilName = UseEventG_Profil.replace("<profilnummer>", i);
                if (getState(ICALPath + "." + ProfilName).val) {
                    if (!UseEventsGlobalProfilPrio){	//Regulärer Fall, Priorisierung nicht aktiv
                        ProfileFoundFlag = true;
                        break;
                    }else {
                        if (i === GlobalProfilPrioTab[0]){	//Priorisierung aktiv, das aktuelle Profil hat höchste Prio
                            ProfileFoundFlag = true;
                            break;
                        }else {
                            ActiveGlobalProfileList.push(i);	//Baue Liste zur späteren Ermittlung des Profils
                        }
                    } 
                }
            } // ende for (i = 1; i <= MaxProfile; i++)
            if (ProfileFoundFlag){		//Ermittlung des Profils ist fertig
                setOwnState(pathprofile+".AktivesEventProfil", i);
                Source_Profil = i;
                Source_ICALEvent = ProfilName;
                return i;
            }else {	//Suche nach dem Profil mit der höchsten Prio in der Liste
                for(var i_prio = 0; i_prio <= GlobalProfilPrioTab.length - 1; i_prio++){
                    for (var i_profile = 0;  i_profile <= ActiveGlobalProfileList.length - 1; i_profile++){
                        if (ActiveGlobalProfileList[i_profile] === GlobalProfilPrioTab[i_prio]){	//Das Profil ist ermittelt!
                            setOwnState(pathprofile+".AktivesEventProfil", ActiveGlobalProfileList[i_profile]);
                            Source_Profil = ActiveGlobalProfileList[i_profile];
                            Source_ICALEvent = UseEventG_Profil.replace("<profilnummer>", ActiveGlobalProfileList[i_profile]);
                            return ActiveGlobalProfileList[i_profile];
                        }//ende if
                    }//ende for i_profile
                }//ende for i_prio
            }//ende else
    
        }// ende if globalProfilSelect
    
        if (getState(pathprofile + ".AktivesEventProfil").val !== 0) {  // falls vorher ein Eventprofil aktiv war jetzt deaktivieren
            setOwnState(pathprofile + ".AktivesEventProfil", 0);
        }
    
        // Wenn kein anderes Profil vorliegt dann gilt das manuell eingstellte Profil
        Profil = getState(pathprofile + ".AktivesRaumProfil").val;
        if (Profil > 9 || Profil < 1) {
            Profil = 1;
        }
        Source_Profil = Profil;
        return Profil;
    }</profilnummer></profilnummer></profilnummer></raumname> 
    

    Die Logik müsste überschaubar sein, auch wenn die Lesbarkeit des Codes nicht die beste ist (ich bin kein ITler).

    Es passiert leider nichts, die Profile werden nicht aktiviert. Ich habe versucht zu debuggen (wie ich halt kann :oops: )und muste feststellen dass AktivesEventProfil-Datenpunkt nicht beschrieben wird.

    Könntest du bei Gelegenheit den Code überfliegen? Vielleich fällt dir irgendwas ein…

    Grüße,

    Max

    1 Antwort Letzte Antwort
    0
    • AxelF1977A Offline
      AxelF1977A Offline
      AxelF1977
      schrieb am zuletzt editiert von
      #718

      @looxer01,

      danke nochmal für Deine Hilfe heute. Das Script läuft nun, wie es soll, wie ich es mir wünsche, und wie Du es erdacht hast. Ich weiß nun auch warum die Datenpunkte leer waren, weil ich sie gelöscht hatte, im View. Ich wollte keine Daten sehen, wenn die Werte vom Vortag übernommen werden, durch den Hacken. Also war es meine Schuld. Ich wollte die cleane Optik. Ich habe jetzt aber einen Weg gefunden, das die Werte ausgeblendet werden, wenn der Hacken bei "wie Vortag" aktiv ist. Ich lasse jetzt einfach Widgets drüber legen, sobald der Hacken aktiv ist.

      Danke nochmal!
      4249_003.jpg
      4249_004.jpg

      ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

      1 Antwort Letzte Antwort
      0
      • K Offline
        K Offline
        Kugelkopf
        schrieb am zuletzt editiert von
        #719

        Kurze Info:

        Das Skript scheint nicht kompatibel zu sein mit der neusten Version von ioBroker Javascript in Verison 4.0.1.

        1 Antwort Letzte Antwort
        0
        • Beliar_666B Offline
          Beliar_666B Offline
          Beliar_666
          schrieb am zuletzt editiert von
          #720

          Wie bekomme ich denn zusätzliche Datenpunkte für ein weiteres Zimmer ins Java? Ich will jetzt quasi einen weiteren Raum hinzufügen, aber die Datenpunkte werden nicht erstellt.

          1 Antwort Letzte Antwort
          0
          • ChaotC Offline
            ChaotC Offline
            Chaot
            schrieb am zuletzt editiert von
            #721

            @Kugelkopf:

            Kurze Info:

            Das Skript scheint nicht kompatibel zu sein mit der neusten Version von ioBroker Javascript in Verison 4.0.1. `

            Wie kommst du darauf oder wie macht sich das bemerkbar?

            Ich habe bisher kein Problem.

            ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

            1 Antwort Letzte Antwort
            0
            • L Offline
              L Offline
              looxer01
              schrieb am zuletzt editiert von
              #722

              @Chaot:

              @Kugelkopf:

              Kurze Info:

              Das Skript scheint nicht kompatibel zu sein mit der neusten Version von ioBroker Javascript in Verison 4.0.1. `

              Wie kommst du darauf oder wie macht sich das bemerkbar?

              Ich habe bisher kein Problem. `

              es gibt ein Problem mit den FS Funktionen. Dazu habe ich ein issue in Github aufgemacht:

              https://github.com/ioBroker/ioBroker.ja … issues/213

              Es gibt 2 workarounds dazu:

              1. Deaktiverung des externen loggings

              2. Auskommentierung des folgenden Codes

              //        if (!fs.existsSync(LogPath)) {
              //            log("Routine writelog: Logfile nicht gefunden - wird angelegt", "info");
              //            var headerLine= "Datum;Uhrzeit;Raum;Geraete-ID;SollTemp gesetzt;Profil;Global-Parameter;Event;Manuelle Temp;Schedule-Point;Bemerkung";
              //            fs.appendFileSync(LogPath, headerLine + "\n");       // Fuege Satz in Datei ein
              //        }
              
              

              vG Looxer

              1 Antwort Letzte Antwort
              0
              • ChaotC Offline
                ChaotC Offline
                Chaot
                schrieb am zuletzt editiert von
                #723

                Ok,

                da ich kein externes logging nutze scheint mich das dann nicht zu betreffen.

                Aber als kleinen Hinweis noch:

                Nach dem JS Update war das System extremst langsam. Nach einem Neustart war es deutlich besser.

                ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                1 Antwort Letzte Antwort
                0
                • AxelF1977A Offline
                  AxelF1977A Offline
                  AxelF1977
                  schrieb am zuletzt editiert von
                  #724

                  @Kugelkopf:

                  Kurze Info:

                  Das Skript scheint nicht kompatibel zu sein mit der neusten Version von ioBroker Javascript in Verison 4.0.1. `

                  Habe den neuen Javascript Adapter auch in Verison 4.0.1. installiert, keine Fehler bisher

                  ASROCK Deskmini Intel I3 8100 16GB mit Proxmox VM ioBroker VM DIYHue| CCU piVCCU + FHEM auf Raspberry | Maria DB mit Grafana und Prometheus auf Tinker Board

                  1 Antwort Letzte Antwort
                  0
                  • K Offline
                    K Offline
                    Kugelkopf
                    schrieb am zuletzt editiert von
                    #725

                    @looxer01:

                    @Chaot:

                    @Kugelkopf:

                    Kurze Info:

                    Das Skript scheint nicht kompatibel zu sein mit der neusten Version von ioBroker Javascript in Verison 4.0.1. `

                    Wie kommst du darauf oder wie macht sich das bemerkbar?

                    Ich habe bisher kein Problem. `

                    es gibt ein Problem mit den FS Funktionen. Dazu habe ich ein issue in Github aufgemacht:

                    https://github.com/ioBroker/ioBroker.ja … issues/213

                    Es gibt 2 workarounds dazu:

                    1. Deaktiverung des externen loggings

                    2. Auskommentierung des folgenden Codes

                    //        if (!fs.existsSync(LogPath)) {
                    //            log("Routine writelog: Logfile nicht gefunden - wird angelegt", "info");
                    //            var headerLine= "Datum;Uhrzeit;Raum;Geraete-ID;SollTemp gesetzt;Profil;Global-Parameter;Event;Manuelle Temp;Schedule-Point;Bemerkung";
                    //            fs.appendFileSync(LogPath, headerLine + "\n");       // Fuege Satz in Datei ein
                    //        }
                    
                    

                    vG Looxer `

                    Jap! Stimmt! Wenn externes Logging ausgeschaltet ist gibt es keine Fehler mehr! Sorry für meinen vorschnellen Post! Ich dachte nur, ich warne euch bevor es möglicherweise bei dem ein oder anderen zu Problemen führt!

                    Danke für die Hilfe!

                    1 Antwort Letzte Antwort
                    0
                    • Beliar_666B Offline
                      Beliar_666B Offline
                      Beliar_666
                      schrieb am zuletzt editiert von
                      #726

                      Dein Post war super. Denn ich hatte die Probleme auch.

                      1 Antwort Letzte Antwort
                      0
                      • L Offline
                        L Offline
                        looxer01
                        schrieb am zuletzt editiert von
                        #727

                        @Kugelkopf:

                        ap! Stimmt! Wenn externes Logging ausgeschaltet ist gibt es keine Fehler mehr! Sorry für meinen vorschnellen Post! Ich dachte nur, ich warne euch bevor es möglicherweise bei dem ein oder anderen zu Problemen führt! `
                        Hi,

                        nun habe ich eine Lösung für das Problem womit das externe Logging auch wieder funktioniert - wie vorher.

                        Folgender Code muss ausgetauscht werden:

                        //        if (!fs.existsSync(LogPath)) {
                        //            log("Routine writelog: Logfile nicht gefunden - wird angelegt", "info");
                        //            var headerLine= "Datum;Uhrzeit;Raum;Geraete-ID;SollTemp gesetzt;Profil;Global-Parameter;Event;Manuelle Temp;Schedule-Point;Bemerkung";
                        //            fs.appendFileSync(LogPath, headerLine + "\n");       // Fuege Satz in Datei ein
                        //        }
                        
                        

                        neuer Code:

                        fs.readFile(LogPath, 'utf8', function(err,data){
                            if (!err){
                                // File existiert
                                fs.appendFileSync(LogPath, logdate + ";" + logtime + ";" + room + ";" + id + ";" + Form_CurrentSollTemp + ";" + Source_Profil + ";" + Source_GlobalParameter + ";" + Source_ICALEvent + ";" + Form_Source_ManualAdjustment + ";" + Source_SchedulePoint + ";" + Text + "\n");  // Fuege Satz in Datei ein
                            }else{
                                log("Routine writelog: Logfile nicht gefunden - wird angelegt", "info");
                                var headerLine= "Datum;Uhrzeit;Raum;Geraete-ID;SollTemp gesetzt;Profil;Global-Parameter;Event;Manuelle Temp;Schedule-Point;Bemerkung";
                                fs.appendFileSync(LogPath, headerLine + "\n");       // Fuege Satz in Datei ein
                            }
                        });
                        
                        

                        Kommt in die nächste Version

                        vG Looxer

                        1 Antwort Letzte Antwort
                        0
                        • L Offline
                          L Offline
                          looxer01
                          schrieb am zuletzt editiert von
                          #728

                          @Beliar_666:

                          Wie bekomme ich denn zusätzliche Datenpunkte für ein weiteres Zimmer ins Java? Ich will jetzt quasi einen weiteren Raum hinzufügen, aber die Datenpunkte werden nicht erstellt. `
                          Hi,

                          gerade gesehen, dass das auch noch offen ist (gibt ja noch einiges)

                          Hast du dein Problem lösen können ? Wenn nicht, dann brauche ich am Besten deine Einstellungen.

                          vG looxer

                          1 Antwort Letzte Antwort
                          0
                          • G Offline
                            G Offline
                            Georgius
                            schrieb am zuletzt editiert von
                            #729

                            Ich habe den Script jetzt nicht durchgelesen (kann ja eigentlich kein JS). Greift die Steuerung direkt auf Ventilöffnung des Heizungsventiles zu oder steuert es nur die Solltemperatur?

                            1 Antwort Letzte Antwort
                            0
                            • L Offline
                              L Offline
                              looxer01
                              schrieb am zuletzt editiert von
                              #730

                              @Georgius:

                              Ich habe den Script jetzt nicht durchgelesen (kann ja eigentlich kein JS). Greift die Steuerung direkt auf Ventilöffnung des Heizungsventiles zu oder steuert es nur die Solltemperatur? `
                              das script steuert nicht die Ventile. Das bleibt der internen Logik der Thermostate überlassen. Das script steuert die SollTemp und soll zur Automatisierung beitragen.

                              Es gibt noch eine Erweiterung von apollon77 für eine vorausschauende Steuerung (wie lange dauert es bis die Zieltemp je Raum erreicht ist)

                              Aber auch hierbei ist die SollTemperatur das Steuerinstrument - mit zeitlichem Vorlauf.

                              vG Looxer

                              1 Antwort Letzte Antwort
                              0
                              • G Offline
                                G Offline
                                Georgius
                                schrieb am zuletzt editiert von
                                #731

                                Danke, dann werd ich mich selbst mal spielen.

                                1 Antwort Letzte Antwort
                                0
                                • smartboartS Offline
                                  smartboartS Offline
                                  smartboart
                                  schrieb am zuletzt editiert von
                                  #732

                                  Hallo, lässt sich mit dem script auch das Wandthermosthat 230V mit Relais HmiP-BWTH steuern, welches nicht in dem Script aufgeführt ist?

                                  1 Antwort Letzte Antwort
                                  0
                                  • L Offline
                                    L Offline
                                    looxer01
                                    schrieb am zuletzt editiert von
                                    #733

                                    @smartboart:

                                    Hallo, lässt sich mit dem script auch das Wandthermosthat 230V mit Relais HmiP-BWTH steuern, welches nicht in dem Script aufgeführt ist? `
                                    Hi,

                                    also, wenn ich das richtig sehe, dann steuert, das HmiP-BWTH über einen Ausgang Fussbodenheizungen.

                                    Die Logik (Traegheit) wird über das Thermostat ermittelt und verwertet (Die Ventile werden vermutlich über EIN/AUS über das Thermostat gesteuert)

                                    Wichtig ist aber, dass das Thermostat über SollTemp Vorgaben eingetellt wird. Damit ist auch das Script verwendbar.

                                    Es ist einfach den Thermostat Type hinzuzufügen. Bringe ich auch gerne selber mit ein.

                                    Ich denke mal folgende Einstellung wäre ok:

                                    ThermostatTypeTab[10]  = ['hm-rpc.1.',   'HmiP-BWTH'     , 'Heizkoerperthermostat(HMIP)','IPWT', '1.SET_POINT_TEMPERATURE',   true,        '1.CONTROL_MODE',           false,                 '1.ACTUAL_TEMPERATURE',      '1.CONTROL_MODE',           12,                                            0];
                                    
                                    

                                    Die Datenpunkte stimmen vermutlich, muesstest du aber überprüfen.

                                    Sag Bescheid, ob das so stimmt, dann erweitere ich die Tabelle für die nächste Version (wobei du nicht warten musst)

                                    vG Looxer

                                    1 Antwort Letzte Antwort
                                    0
                                    • smartboartS Offline
                                      smartboartS Offline
                                      smartboart
                                      schrieb am zuletzt editiert von
                                      #734

                                      Danke fuer die schnelle Rueckmeldung. Habe das Thermostat noch nicht.. Wollte erstmal klären ob es mit dem Script funktioniert bevor ich es kaufe… Kostet immerhin fast 80 Tacken bei elv...

                                      Im moment benutze ich noch ein anderes.. Wenn ich es mir zulege gebe ich bescheid..

                                      Gesendet von meinem CLT-L09 mit Tapatalk

                                      1 Antwort Letzte Antwort
                                      0
                                      • Beliar_666B Offline
                                        Beliar_666B Offline
                                        Beliar_666
                                        schrieb am zuletzt editiert von
                                        #735

                                        @looxer01:

                                        @Beliar_666:

                                        Wie bekomme ich denn zusätzliche Datenpunkte für ein weiteres Zimmer ins Java? Ich will jetzt quasi einen weiteren Raum hinzufügen, aber die Datenpunkte werden nicht erstellt. `
                                        Hi,

                                        gerade gesehen, dass das auch noch offen ist (gibt ja noch einiges)

                                        Hast du dein Problem lösen können ? Wenn nicht, dann brauche ich am Besten deine Einstellungen.

                                        vG looxer `

                                        Nein ist noch nicht gelöst. Welche Einstellungen möchtest Du haben?

                                        Grüssle

                                        1 Antwort Letzte Antwort
                                        0
                                        • L Offline
                                          L Offline
                                          looxer01
                                          schrieb am zuletzt editiert von
                                          #736

                                          @Beliar_666:

                                          Welche Einstellungen möchtest Du haben? `
                                          Die aus dem script. Es kommt halt darauf an ob du HM Geräte hast oder nicht. Mit der RoomList arbeitest oder nicht.

                                          Generell werden die Datenpunkte ja aufgrund der Einstellungen erstellt.

                                          vG Looxer

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          234

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe