Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Heizkreisregelungen - JS

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Heizkreisregelungen - JS

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

      Denn Datenpunkt Heizperiode habe ich auch ins Script der FBH geschrieben

      danach schaut das so aus:

      var Xp = 2;
      var Tn = 3600;
      var pwm = 100; //* PWM Zeit verlängert
      const idHeizen = "javascript.0.Heizperiode"/*Heizperiode*/;
      var xid = "knx.0.Sensoren.Erdgeschoss.Temp-Sensor-Kueche-EG"/*Temp-Sensor-Kueche-EG*/;
      var wid = "javascript.0.Sollwert-Küche-EG"/*Sollwert-Küche-EG*/;
      var yid = "knx.0.Aktoren.Heizung-Technik.Ventil-FBH-Kueche-EG"/*Ventil-FBH-Kueche-EG*/;
      
      var n = 0;  // Intervallzähler
      
      var  PI = require('pi-controller');
      
      var pi = new PI(Xp, Tn); 
      pi.setOutputMax(pwm);   // default: OutputMax = 100
      
      // Abfrage für Sommer/Winter noch einfugen
      
      function control() {
        var x = getState(xid).val;    // Istwert in °C
        var w = getState(wid).val;    // Sollwert in °C
        var y = pi.Control(w - x);    // Stellsignal
        n++;
        if (n >= pwm) n = 0;
         if (n < 8 && y > 0)           // Mindesteinschaltdauer: 8 Intervalle
          {   setState(yid, 1);
      //        setState(pump, 1);
          }
        else if (n >= 8 && y <= n)    // Zwei Ventile werden geschalten
          {   setState(yid, 0);
      //        setState(pump, 0);
          }  
      }
      
      control();  // Script start
      
      setInterval(control, 30000 );  // Intervall: von 1 auf 0,5 Minuten geändert
      
      // Abschaltung
      on(idHeizen, function(dp) {
          heizen = dp.state.val;
          control();
      }); 
      
      

      nach dem Start des Scripts kommen zwei Warn Meldungen:

      (Ausdruck beim Start)

      08:03:46.803 [info] javascript.0 Stop script script.js.Heizung.Küche-EG.FBH-Küche-EG

      08:03:47.528 [info] javascript.0 Start javascript script.js.Heizung.Küche-EG.FBH-Küche-EG

      08:03:47.528 [warn] javascript.0 at control (script.js.Heizung.Küche-EG.FBH-Küche-EG:25:9)

      08:03:47.528 [warn] javascript.0 at script.js.Heizung.Küche-EG.FBH-Küche-EG:34:1

      08:03:47.528 [info] javascript.0 script.js.Heizung.Küche-EG.FBH-Küche-EG: registered 1 subscription and 0 schedules

      ist das so korrekt?

      Bei Script für die Regelung der Temperatur im OG genügt es ja wen die Abschaltung im
      > // 3-Punkt-Ansteuerung aus Stellsignal ist, oder?

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

        Die Warnung kommt, weil die Variable heizen nicht deklariert ist.

        var heizen = getState(idHeizen).val;
        

        Die Auswertung muss in der Funktion control() erfolgen, damit die Ventile zu bleiben.

           if (n < 8 && y > 0 && heizen)     // Mindesteinschaltdauer: 8 Intervalle
        
        

        Beim Übergang Winter zu Sommer ist es besser, die Ventile gleich zu schließen.

        // Abschaltung
        on(idHeizen, function(dp) {
            heizen = dp.state.val;
            if(!heizen) setState(yid, 0);
        });
        
        
        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 last edited by

          @sound31:

          ei Script für die Regelung der Temperatur im OG genügt es ja wen die Abschaltung im

          // 3-Punkt-Ansteuerung aus Stellsignal

          ist, oder? `
          Ja.

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

            Anmerkung: Da die KNX-Datenpunkte zum Schalten (Ventile, Pumpen) mit 0 und 1 anstelle false/true angesteuert werden müssen, sollte der Datenpunkttyp von "boolean" in "number" (Zahl) geändert werden.

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

              Hallo paul53,

              da ich für die Ladung des Boilers und die Fußbodenheizung nur einen Vorlauf

              zur verfügung habe ist dieser mit einem Ventil umschaltbar.

              (Leider ein altes Haus)

              Dazu muss ich allerdings die FBH Pumpe Abschalten.

              Ist das so korrekt wie ichs in das Script eingefügt habe?

              Das Ventil liefert eine "1" wenn es eingeschalten ist.

              // Ansteuerung Pumpe für Fußbodenheizungen
              
              const idHeizen = "javascript.0.Heizperiode"/*Heizperiode*/;
              const idladung = "knx.0.Aktoren.Heizung-Technik.Ventil-Ladung-Boiler"/*Ventil-Ladung-Boiler*/;
              
              var idpump1 = "knx.0.Aktoren.Heizung-Technik.Ventil-FBH-Kueche-EG"/*Ventil-FBH-Kueche-EG*/;
              var idpump2 = "knx.0.Aktoren.Heizung-Technik.Ventil-1-FBH-Flur-EG"/*Ventil-1-FBH-Flur-EG*/;
              var idpump = "knx.0.Aktoren.Heizung-Technik.HK-EG-Pumpe"/*HK-EG-Pumpe*/;
              
              // Initialisierung bei Skriptstart
              var pump1 = getState(idpump1).val;
              var pump2 = getState(idpump2).val;
              var timer = null;
              var heizen = getState(idHeizen).val;
              var ladung = getState(idladung).val;
              
              function control() {
                  if(timer) clearTimeout(timer);
                  if (pump1 || pump2) {
                      timer = setTimeout(function() {
                          setState(idpump, 1);
                      }, 180000);  // 3 Minuten Verzögerung
                  }
                  else {
                      timer = setTimeout(function() {
                          setState(idpump, 0);
                      }, 180000);    
                 }
              }
              
              // Skriptstart
              control();
              
              // Auf Änderung von Pumpe1 reagieren
              on(idpump1, function(dp) {
                  pump1 = dp.state.val;
                  control();
              });
              
              // Auf Änderung von Pumpe 2 reagieren
              on(idpump2, function(dp) {
                  pump2 = dp.state.val;
                  control();
              });
              
              // Abschaltung
              on(idHeizen, function(dp) {
                  heizen = dp.state.val;
                  control();
              }); 
              
              // Abschaltung wegen Boilerladung
              on(idladung, function(dp) {
                  heizen = dp.state.val;
                  control();
              }); 
              
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Die Variable heizen wird im Skript gesetzt aber nicht ausgewertet. Bitte ergänzen:

                    if ((pump1 || pump2) && heizen) {
                
                

                @sound31:

                ist dieser mit einem Ventil umschaltbar….Das Ventil liefert eine "1" wenn es eingeschalten ist. `
                Ist das ein Umschaltventil und was bedeutet "eingeschaltet" ?

                Weshalb soll die Pumpe der FBH bei Speicherladung abschalten ?

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

                  Die Pumpe der FBH ist noch eine "Alte" ohne Elektr.Lastregelung,

                  Das sollte ich lt. dem Installateur so machen damit kein Überdruck im System entsteht

                  da bei der Boilerladung der Vorlauf zur FBH unterbrochen ist.

                  Eingeschaltet heißt das Wasser lüft in Richtung Boiler

                  Ausgeschalten in Richtung FBH.

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

                    @sound31:

                    Eingeschaltet heißt das Wasser lüft in Richtung Boiler `
                    Dann solltest Du es so machen:

                    ...
                        if ((pump1 || pump2) && heizen && !ladung) {
                    ...
                    
                    // Abschaltung wegen Speicherladung
                    on(idladung, function(dp) {
                        ladung = dp.state.val;
                        if(ladung) setState(idpump, 0);  // FBH-Pumpe sofort aus, wenn Speicherladung
                        else control();
                    }); 
                    
                    1 Reply Last reply Reply Quote 0
                    • S
                      sound31 last edited by

                      Vielen Dank,

                      Schönen Abend noch.

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

                        Hallo Paul53,

                        Ich habe noch eine Frage zum Script Pumpen.

                        Bei Schalten der Boilerladung schalter die Pumpe aus aber nach 3 Minuten wider ein

                        obwohl die Ladung noch ein ist.

                        Hier das Script, vielleicht kannst du noch mal ein Auge drauf werfen, Danke.

                        // Ansteuerung Pumpe für Fußbodenheizungen
                        
                        const idHeizen = "javascript.0.Heizperiode"/*Heizperiode*/;
                        const idladung = "knx.0.Aktoren.Heizung-Technik.Ventil-Ladung-Boiler"/*Ventil-Ladung-Boiler*/;
                        
                        var idpump1 = "knx.0.Aktoren.Heizung-Technik.Ventil-FBH-Kueche-EG"/*Ventil-FBH-Kueche-EG*/;
                        var idpump2 = "knx.0.Aktoren.Heizung-Technik.Ventil-1-FBH-Flur-EG"/*Ventil-1-FBH-Flur-EG*/;
                        var idpump = "knx.0.Aktoren.Heizung-Technik.HK-EG-Pumpe"/*HK-EG-Pumpe*/;
                        
                        // Initialisierung bei Skriptstart
                        var pump1 = getState(idpump1).val;
                        var pump2 = getState(idpump2).val;
                        var timer = null;
                        var heizen = getState(idHeizen).val;
                        var ladung = getState(idladung).val;
                        
                        function control() {
                            if(timer) clearTimeout(timer);
                            if ((pump1 || pump2) && heizen && !ladung) {
                                timer = setTimeout(function() {
                                    setState(idpump, 1);
                                }, 300000);  // 3 Minuten Verzögerung
                            }
                            else {
                                timer = setTimeout(function() {
                                    setState(idpump, 0);
                                }, 180000);    
                           }
                        }
                        
                        // Skriptstart
                        control();
                        
                        // Auf Änderung von Pumpe1 reagieren
                        on(idpump1, function(dp) {
                            pump1 = dp.state.val;
                            control();
                        });
                        
                        // Auf Änderung von Pumpe 2 reagieren
                        on(idpump2, function(dp) {
                            pump2 = dp.state.val;
                            control();
                        });
                        
                        // Abschaltung
                        on(idHeizen, function(dp) {
                            heizen = dp.state.val;
                            control();
                        }); 
                        
                        // Abschaltung wegen Speicherladung
                        on(idladung, function(dp) {
                            ladung = dp.state.val;
                            if(ladung) setState(idpump, 0);  // FBH-Pumpe sofort aus, wenn Speicherladung
                            else control();
                        });
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 last edited by

                          @sound31:

                          Bei Schalten der Boilerladung schalter die Pumpe aus aber nach 3 Minuten wider ein obwohl die Ladung noch ein ist. `
                          Das kann laut Skript nicht sein, denn die Pumpe schaltet nur ein, wenn die Ladung nicht aktiv ist.

                              if ((pump1 || pump2) && heizen && !ladung) {
                          

                          Liefert der Datenpunkt idLadung nur einen kurzen Impuls? Bitte prüfen

                          // Abschaltung wegen Speicherladung
                          on(idladung, function(dp) {
                              ladung = dp.state.val;
                              log('Speicherladung: ' + ladung);  // Debug
                              if(ladung) setState(idpump, 0);  // FBH-Pumpe sofort aus, wenn Speicherladung
                              else control();
                          });
                          
                          1 Reply Last reply Reply Quote 0
                          • S
                            sound31 last edited by

                            Das Ventil bleibt Eingeschalten der Datenpunkt vom KNX her ist somit "Ein"

                            Ich habe die Zeilen Eingefügt:
                            ` > Liefert der Datenpunkt idLadung nur einen kurzen Impuls? Bitte prüfen

                            ` > Code:

                            // Abschaltung wegen Speicherladung

                            on(idladung, function(dp) {

                            ladung = dp.state.val;

                            log('Speicherladung: ' + ladung); // Debug

                            if(ladung) setState(idpump, 0); // FBH-Pumpe sofort aus, wenn Speicherladung

                            else control();

                            });
                            und die Einschaltzeit der Boilerrladung geändert,

                            danach standen diese Zeilen im LOG:

                            hm-rpc.2	2018-01-04 11:12:43.295	info	xmlrpc -> 0 devices
                            hm-rpc.2	2018-01-04 11:12:43.287	info	xmlrpc <- listDevices ["hm-rpc.2"]
                            javascript.0	2018-01-04 11:10:46.085	info	script.js.Heizung.Boilerladung.Boilerladung: registered 0 subscriptions and 3 schedules
                            javascript.0	2018-01-04 11:10:46.077	info	Start javascript script.js.Heizung.Boilerladung.Boilerladung
                            javascript.0	2018-01-04 11:10:46.064	info	Stop script script.js.Heizung.Boilerladung.Boilerladung
                            hm-rpc.2	2018-01-04 11:09:13.278	info	xmlrpc -> 0 devices
                            hm-rpc.2	2018-01-04 11:09:13.270	info	xmlrpc <- listDevices ["hm-rpc.2"]
                            hm-rpc.2	2018-01-04 11:05:43.194	info	xmlrpc -> 0 devices
                            hm-rpc.2	2018-01-04 11:05:43.182	info	xmlrpc <- listDevices ["hm-rpc.2"]
                            hm-rpc.2	2018-01-04 11:02:13.148	info	xmlrpc -> 0 devices
                            hm-rpc.2	2018-01-04 11:02:13.135	info	xmlrpc <- listDevices ["hm-rpc.2"]
                            javascript.0	2018-01-04 11:01:45.660	info	script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 1
                            javascript.0	2018-01-04 11:01:00.239	info	script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 0
                            javascript.0	2018-01-04 11:01:00.159	info	script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 1
                            javascript.0	2018-01-04 11:01:00.116	info	script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 0
                            javascript.0	2018-01-04 11:01:00.113	info	script.js.Heizung.Pumpen.FBH-Pumpe: Speicherladung: 1
                            javascript.0	2018-01-04 10:58:47.109	info	script.js.Heizung.Boilerladung.Boilerladung: registered 0 subscriptions and 3 schedules
                            javascript.0	2018-01-04 10:58:47.098	info	Start javascript script.js.Heizung.Boilerladung.Boilerladung
                            javascript.0	2018-01-04 10:58:47.087	info	Stop script script.js.Heizung.Boilerladung.Boilerladung
                            hm-rpc.2	2018-01-04 10:58:43.092	info	xmlrpc -> 0 devices
                            hm-rpc.2	2018-01-04 10:58:43.084	info	xmlrpc <- listDevices ["hm-rpc.2"]
                            web.0	2018-01-04 10:56:30.083	info	2018-01-04T09:56:30.078Z Connected system.user.admin
                            javascript.0	2018-01-04 10:56:08.350	info	script.js.Heizung.Pumpen.FBH-Pumpe: registered 4 subscriptions and 0 schedules
                            javascript.0	2018-01-04 10:56:08.342	info	Start javascript script.js.Heizung.Pumpen.FBH-Pumpe
                            javascript.0	2018-01-04 10:56:08.315	info	Stop script script.js.Heizung.Pumpen.FBH-Pumpe
                            hm-rpc.2	2018-01-04 10:55:13.044	info	xmlrpc -> 0 devices
                            
                            
                            1 Reply Last reply Reply Quote 0
                            • S
                              sound31 last edited by

                              Die Pumpe schaltet aber nach 3 Minuten wider ein.

                              1 Reply Last reply Reply Quote 0
                              • Dutchman
                                Dutchman Developer Most Active Administrators last edited by

                                @sound31:

                                Die Pumpe schaltet aber nach 3 Minuten wider ein. `

                                Und das passiert auch durch den JavaScript adapter oder könnt es irgendwo anders her ?

                                –-----------------------

                                Send from mobile device

                                Das schöne ios hat Auto Korrektur zum k****

                                Wer Schreibfehler findet darf sie behalten oder auf eBay verkaufen, mindest Umsatz 10% für die community

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

                                  @Dutchman:

                                  Und das passiert auch durch den JavaScript adapter oder könnt es irgendwo anders her ? `
                                  Auch das lässt sich durch ein zusätzliches Log feststellen

                                          timer = setTimeout(function() {
                                              setState(idpump, 1);
                                              log('FBH-Pumpe Ein, Typ von Ladung: ' + typeof ladung);
                                          }, 300000);  // 5 Minuten Verzögerung
                                  
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • Dutchman
                                    Dutchman Developer Most Active Administrators last edited by

                                    @paul53:

                                    Auch das lässt sich durch ein zusätzliches Log feststellen `

                                    man sieht es auch am object wen man mit de maus drauf stehen bleibt 🙂
                                    979_aenderung.jpg

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

                                      Aus der Anforderung zur Ladung kommt es nicht obwohl mir dieser Eintrag

                                      etwas verdächtig vorkommt:

                                      Warum hier innerhalb nicht mal einer Sekunde 4x geschalten wird??
                                      4002_screenshot.6.jpg
                                      Ich werde mir mal das Script zur Ladung des Boilers nochmals ansehen

                                      ob es von dort kommt.

                                      1 Reply Last reply Reply Quote 0
                                      • S
                                        SilSchm @paul53 last edited by

                                        @paul53 Hallo Paul 53, ich habe das PI-Regler-Script für die Vorlauftemperatur in Verbindung mit dem 3-Punkt-Mischer-Script getestet. Es funktioniert soweit super. Vielen Dank für die tolle Umsetzung für eine Idee, die ich schon länger hatte aber nicht umzusetzen wusste. Eine Sache habe ich gefunden, wobei meine Javascript Kenntnisse nicht reichen, um den Fehler zu finden. Wenn das Stellsignal vom PI-Regler 100 % beträgt, fährt beim Start des Mischer-Scripts nach der Initialisierungsfahrt der Mischer nicht wieder auf. Das Stellsignal ist 100 und der Mischer fährt nicht mehr. Wenn ich kurz manuell das Stellsignal auf einen Wert unter 100 setze, fährt der Mischer auf und die Regelung funktioniert wieder super. Das tritt jedesmal nach der Initialisierung auf, wenn 100 % als Stellsignal anliegen. Hast du evtl. eine Idee?

                                        MfG Silvio

                                        paul53 1 Reply Last reply Reply Quote 0
                                        • paul53
                                          paul53 @SilSchm last edited by paul53

                                          @SilSchm sagte:

                                          Das Stellsignal ist 100 und der Mischer fährt nicht mehr.

                                          Der Trigger, der die Mischerbewegung anstößt, benötigt eine Wertänderung, die nicht erfolgt, wenn das Stellsignal auf 100 % bleibt. Erweitere bitte den Scriptstart (Zeilen 14 bis 20) um das Fahren in die Sollposition:

                                          // Bei Skriptstart fährt Antrieb auf Position 0 (Zu)
                                          setState(idAuf, false); 
                                          setState(idZu, true);
                                          var timer = setTimeout(function() {
                                              setState(idZu, false);
                                              motor = false;
                                              move(getState(idy).val); // Fahren in Sollposition
                                          }, 1000 * (Laufzeit + 10));
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • First post
                                            Last post

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          521
                                          Online

                                          31.9k
                                          Users

                                          80.1k
                                          Topics

                                          1.3m
                                          Posts

                                          4
                                          47
                                          6240
                                          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