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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    [Vorlage] Heizungsthermostatsteuerung 2.1 - Script

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

      Hi,

      die neue Funktion läuft ohne Probleme, sofern der Raum überhaupt „angesprungen“ wurde.

      Mittels Pushover habe ich Verschiebungen gesehen, aber es fehlten ab und an halt wieder mal Räume.

      Da ich über 40 Scripte auf der einen JS-Instanz laufen habe (die nimmt sich über 150 MB RAM), denke ich eher an ein Problem in Richtung „zu viel Subscriptions“, o.ä.

      Mal sehen, wie es sich jetzt verhält.

      Gruß,

      Eric

      1 Reply Last reply Reply Quote 0
      • P
        passuff last edited by

        @passuff:

        führt bei mir zu folgenden Fehlermeldungen:

        13:15:49.049 [error] javascript.0 at ManAdjustments (script.js.common.Heizungssteuerung:1034:68)

        13:15:49.049 [error] javascript.0 at LoopDevices (script.js.common.Heizungssteuerung:863:18)

        13:15:49.049 [error] javascript.0 at LoopRooms (script.js.common.Heizungssteuerung:763:13)

        13:15:49.050 [error] javascript.0 at Object. (script.js.common.Heizungssteuerung:419:9) `

        Sorry, war ein copy & paste Fehler. Das Skript funktioniert.

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

          Hi looxer01,

          es wurde wieder ein Raum "ausgelassen".

          Wie, nach welcher Logik, werden die Räume abgearbeitet?

          Ich habe die Räume jetzt mal fest eingetragen und die Raumliste aktiviert.

          Morgen früh mal sehen, ob jetzt alles geschaltet wird, wie es soll.

          Gruß,

          Eric

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

            @eric2905:

            Wie, nach welcher Logik, werden die Räume abgearbeitet? `
            Hi Eric,

            Wenn ein Sensor geöffnet ist oder eine manuelle Temperatur eingestellt ist, dann wir der schedule nicht ausgeführt.

            VG locxer

            Von unterwegs

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

              Hi Looxer,

              ich meinte, wenn die Zeiten quasi identisch sind (z.B. 05:00 Uhr), und immer wieder zwei Räume auffällig sind (einer, „Schlafzimmer“, öfter und „Bad“ seltener). Alle anderen sieben Räume laufen ohne Probleme.

              Keine manuelle Änderung - das funktioniert problemlos.

              Gruß,

              Eric

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

                @eric2905:

                ich meinte, wenn die Zeiten quasi identisch sind (z.B. 05:00 Uhr `
                Hi Eric,

                Moeglichweise reichen die 2 Sek bei dir nicht.

                Werde mal eine Variante machen. Wie viel Räume hast du ?

                Vg looxer

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

                  @looxer01:

                  Werde mal eine Variante machen. Wie viel Räume hast du ? `
                  Ich habe 9 Räume drin.

                  Gib mir die Codestelle, die ich ändern muss, dann mache ich das.

                  Gruß,

                  Eric

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

                    @eric2905:

                    Ich habe 9 Räume drin.

                    Gib mir die Codestelle, die ich ändern muss, dann mache ich das. `

                    Trag hier:

                    delaysek = z * 2;

                    Statt 2 einfach 6 ein.

                    Das ist das Max. Ich muss dann mal auch Minuten einbeziehen. Ist aber aufwendiger

                    Vg looxer

                    1 Reply Last reply Reply Quote 0
                    • Q
                      quorle last edited by

                      Guten Morgen liebe Gemeinde,

                      ich hätte wieder einmal ein kleines Anliegen bzw. Problemchen.

                      Und zwar wollte ich heute einen Raum umstellen auf einen 3-Punkt-Regler. Der 3-Punkt-Regler ist ein eigenes Script was die aktuell gemessene Raumtemperatur ( hm-rpc.1.CUX1200001.1.TEMPERATURE ) nimmt und den aktuell vorgegebenen Solltemperaturwert vom Heizungsscript mit dazu nimmt und dann einen neuen Teperaturwert liefert, der in eine Variable ( javascript.0.Ausgabe_neuesScript_Sollwert_Temp_an_Regler ) geschrieben wird. Dies funktioniert auch soweit ganz gut, jedoch wie bekomme ich die neue Vorgabe in das Heizungsscript, sodass dieses dann an die Regler schickt? Oder wäre dies zu umständlich und ich sollte den neuen Wert einfach aus dem Script des 3-Punkt-Reglers an die einzelnen Regler senden?

                      Ausserdem stellt das Heizungsscript leider die Regler nicht mehr automatisch in den manuellen Modus, den man ja eigentlich benötigt, oder?

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

                        @quorle:

                        edoch wie bekomme ich die neue Vorgabe in das Heizungsscript, sodass dieses dann an die Regler schickt? Oder wäre dies zu umständlich und ich sollte den neuen Wert einfach aus dem Script des 3-Punkt-Reglers an die einzelnen Regler senden? `

                        Hi,

                        bin zur Zeit unterwegs. Daher habe ich nicht alle details parat.

                        Diese Anforderung ist im Script realsiert. Dazu gibt es einen Datenpunkt, den du füllen kannst. Das Script stellt dann die Temp ein.

                        Dies Temp wird als manuelle Temp interpretiert. Dazu muss dann die Dauer der manuellen Temp entsprechend festgelegt werden. (je nachdem wie häufig du die Aktualisierung machst)

                        Schau mal dazu in das Fussbodenheizungsscript von apollon77. Das macht es genau so.

                        @quorle:

                        Ausserdem stellt das Heizungsscript leider die Regler nicht mehr automatisch in den manuellen Modus, den man ja eigentlich benötigt, oder? `
                        Das muss ich mir beizeiten ansehen. Kann aber etwas dauern.

                        vG Looxer

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

                          Hi looxer,

                          @looxer01:

                          Trag hier:

                          delaysek = z * 2;

                          Statt 2 einfach 6 ein.

                          Das ist das Max. Ich muss dann mal auch Minuten einbeziehen. Ist aber aufwendiger `
                          wo soll denn das "delaysec" stehen?

                          Weder im Original-Script noch in Deiner Erweiterung (https://forum.iobroker.net/viewtopic.php?f=21&t=10096&start=300#p130210) finde ich das.

                          Edit / Nachztrag:

                          Ich finde diese Zeile:

                          var ZufallSek = Math.floor(Math.random() * (30 - 1 + 1)) + 1; 
                          

                          Meinst Du diese?

                          Gruß,

                          Eric

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

                            Hi,
                            @eric2905:

                            wo soll denn das "delaysec" stehen?

                            Weder im Original-Script noch in Deiner Erweiterung (hier) finde ich das. `

                            steht in der letzten Erweiterung:

                            ! for (var roomCheck in rooms) { // loop ueber all Raeume roomCheck = roomCheck.replace(/\s/g, "_"); // Blanks durch unterstrich ersetzen if ( roomCheck === roomName) { delaysek = z * 2; // es werden alle 2 Sekunden ein schedule geplant also 2,4,6.... if (delaysek > 58) { // jetzt sind 58 Sekunden erreicht delaysek = (delaysek - 59) * 2 - 1 ; // also mit 1,3,5... Sekunden weiter planen } if ( z > 59) { // mehr als 59 Räume mit Thermostaten? wohl kaum delaysek = 0; } break; } z = z + 1 }//endfor roomcheck !

                            1 Reply Last reply Reply Quote 0
                            • Q
                              quorle last edited by

                              Hey, erst einmal Danke für deine Antwort und Hilfe.

                              Kein Thema, ich kenne das mit der Arbeit zu gut 😉

                              Also du meinst wohl den State: javascript.0.Heizung.Heizplan.Schlafzimmer.View_Manually_Adjusted (Im View manuell eingestellte Temperatur - 0=reset ) auf diesen habe ich einmal Testweise den neuen Wert geschickt im Intervall von 5 Minuten und die Gültigkeit auf 4 Minuten gestellt. Aber anstatt 16 °C stellt er 20°C ein und wenn die Zeit abgelaufen ist nimmt er den neuen Wert im Anschluss nicht mehr an.

                              Ich werde mir das Script von Apollon77 genauer ansehen, aber im ersten Moment zielt es eher auf Stellventile, als auf Heizthermostate.

                              Mein PI-Regler sieht momentan so aus ( Funktion zu 100 % gegeben ), stammt von Paul53, der mir auch bei den Abänderungen geholfen hat.

                              // PI-Regler Raumheizung für Kaskade Raumsensor - HKT-Temperatur
                              
                              // P-Band in K, Nachstellzeit in s
                              const Xp = 4;
                              const Tn = 1200; // 40 Minuten 1200 // 120 --> 30 Sekunden
                              
                              const xid = 'hm-rpc.1.CUX1200001.1.TEMPERATURE';
                              const wid = 'javascript.0.Heizung.Heizplan.Schlafzimmer.Source_Last_Temp';
                              const yid = 'javascript.0.Heizung.Heizplan.Schlafzimmer.View_Manually_Adjusted';
                              
                              const  PI = require('pi-controller');
                              
                              var pi = new PI(Xp, Tn);
                              pi.setOutputMax(5.0);   // default: OutputMax = 100
                              
                              function control() {
                                var x = getState(xid).val;  // Istwert in °C
                                var w = getState(wid).val;  // Sollwert in °C
                                var y = pi.Control(w - x) - 2;  // +3 / -2 Grad
                                y = Math.round(2 * (w + y)) / 2;  // Auflösung 0,5 Grad (Thermostat)
                                setState(yid, y);
                              }
                              
                              control();  // Script start
                              // on() auskommentiert, denn es soll nur alle 10 Minuten an Thermostat gesendet werden
                              // on(xid, control);
                              // on(wid, control);
                              
                              var timer = null;
                              if (Tn) {
                                 timer = setInterval(control, 250 * Tn );
                              }
                              else {
                                 if (timer) {
                                    clearInterval(timer);
                                    timer = null;
                                 }
                              }
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • eric2905
                                eric2905 last edited by

                                Hi,

                                @looxer01:

                                steht in der letzten Erweiterung: `
                                shit, habe ich völlig überlesen .. und natürlich auch noch nicht eingebaut … wird sofort nachgeholt.

                                Gruß,

                                Eric

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

                                  Hi,

                                  erstmal muss ich sagen, dass das Script einfach wunderbar läuft, vielen Dank dafür. Da ich mir ab und an die Logs von ioBroker anschaue, ist mir nun aber aufgefallen, dass ich regelmäßig eine Meldung bekomme, die ich mir nicht erklären kann:

                                  javascript.0	2018-03-16 01:52:22.389	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist false fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                  javascript.0	2018-03-16 01:50:33.954	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist true fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                  javascript.0	2018-03-16 05:05:16.233	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist false fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                  javascript.0	2018-03-16 05:05:11.735	info	script.js.common.Heizungssteuerung: Routine SensorStatCalc: Sensorstatus ist true fuer devtype = HM-Sec-SCo und id hm-rpc.0.OEQ0422727.1.STATE
                                  

                                  Das ganze wiederholt sich täglich einmal um 1:50 Uhr und einmal um 5:05 Uhr. Das komische ist, die Meldung kommt immer nur für diesen einen Sensor, und bei dem handelt es sich um einen optischen Tür-Fensterkontakt. Wüsste also nicht, was der mit Calc (=Entkalungsfahrt?) zu tun haben könnte. Die Zeiten sind nun auch nicht gerade Zeiten, bei denen irgendwo für die Heizung oder gar ioBroker besondere Events geplant wären…

                                  Woher kommt es, dass dieser Sensor zu dieser Meldung führt und was könnte ich dagegen tun?

                                  Gruss, Jürgen

                                  1 Reply Last reply Reply Quote 0
                                  • A
                                    Adnim last edited by

                                    Huhu ,

                                    mal so aus der Laien Sicht würde ich behaupten der Sensor öffnet um diese Zeiten einmal für 2min und dann um 5Uhr für 5s.

                                    hat evtl jemand die Tür/Fenster oder was geöffnet?

                                    oder kann es sein das die Verbindung zum Sensor nicht so dolle ist und deswegen Fehlmeldungen…

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

                                      Hmm, also wenn jemand um diese Zeiten das fenster öffnen würde, tät ich das mitbekommen. Ich liege da ca. 1m daneben. :lol: Zudem tritt es wirklich täglich um diese Zeiten auf

                                      Auch dass der Empfang schlecht wäre denke ich eher nicht. Er liegt beim RSSI bei -42dBm und ist einer der besten. Der schlechteste hat -60dBm und zeigt hier überhaupt keine Auffälligkeiten.

                                      Denkst Du, der Sensor sendet hier irgendeinen Blödsinn (was hat auch der Fensterkontakt mit dem Entkalken zu tun) oder ist es das Skript/ioBroker/piVCCU, das hier irgendwas falsch interpretiert?

                                      Im Prinzip ist es auch nur ein kosmetisches Problem im Log. Es läuft eigentlich alles vorbildlich, offene Fenster werden erkannt und der Heizkörper demetnsprechend abgesenkt, Dein Skript steuert die Automatiken einwandfrei inkl Anwesenheitserkennung per Unifi-Adapter. Nur irrgendwie stört es mich halt, wenn ich sowas hab und nicht weiss woher. :mrgreen:

                                      Ich habe aber eben mal per SSH ältere Logs angeschaut. Ich bekomme die Meldung doch nicht nur von diesem Sensor, sondern auch der andere optische Kontakt bringt die ab und an. Und anscheinend ist es doch nicht jeden Tag um die gleiche Zeit, denn an anderen tagen waren auch mal Uhrzeiten wie 11:00 Uhr oder mal nachts um 3 drin. Also irgendwie merkwürdig. Und warum reagiert das Skript bei einem Fensterkontakt mit einer Meldung die in Richtung Entkalkung geht? :? :?

                                      KURZES EDIT: Die Logs seit 10.3., die ich nun mal abgesucht habe zeigen aber dennoch, dass der o.g. Sensor für mehr als 90% der derartigen Meldungen verantwortlich ist. Der andere Sensor tauchte nur an zwei Tage überhaupt mit auf. Der liegt vom Empfang her überigens bei -45dBm, also auch sehr gut.

                                      Gruss, Jürgen

                                      1 Reply Last reply Reply Quote 0
                                      • A
                                        Adnim last edited by

                                        @Wildbill:

                                        Routine SensorStatCalc: `

                                        Hi,

                                        wenn ich dich richtig verstehe denkst du deswegen das es etwas mit entkalken zutun hat?

                                        So heißt aber nur der Teil des Programmes der für die Verarbeitung der Sensoren zuständig ist hat nix mit Entkalkfahrt zu tun?

                                        Merkwürdig trotzdem irgendetwas muss sich ja ändern am Kontakt oder irgendwo ne Falschmeldung entstehen, meine laufen Sensoren laufen eigentlich ruhig…

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

                                          Hi,

                                          ja, Calc = Entkalkung war die ganze Zeit mein Gedanke. :shock: Hätte ich mal besser gleich im Skript geschaut, ob es nicht Calculation heisst. 😛

                                          Ich bin grad nochmal in mich gegangen und jetzt wird es mir fast peinlich. Es sind wohl doch die jeweiligen Zeiten, wenn ich Türe oder Fenster öffne. Heute Nacht um irgendwas nach 1 wollte der Hund unbedingt kurz raus. Und morgens um kurz nach 5 lasse ich ihn auch raus, weil ich da gerade aufstehe. Und dass dieser Sensor viel öfter kommt, liegt daran, dass das die Terrassentüre im Schlazimmer ist. Das Fenster danaben wird bei den momentanen Temperaturen eher selten bewegt.

                                          Mann Mann Mann, hätte ich mich bei Calc nicht gleich so auf Entkalkung eingeschossen wäre ich wohl gleich selber drauf gekommen. Aber dennoch Danke für den Stupps in die richtige Richtung und die Lösung des Mysteriums. :lol: 8-)

                                          Wochenende verdient!

                                          Gruss, Jürgen

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            axel last edited by

                                            Hallo Zusammen,

                                            Das Script gefällt mir sehr gut. Ich ziehe meine Hut vor so viel Engagement!

                                            Wo finde ich denn die aktuelle Version in Github?

                                            LG Axel

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            724
                                            Online

                                            31.6k
                                            Users

                                            79.5k
                                            Topics

                                            1.3m
                                            Posts

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