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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Heizkreisregelungen - JS

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    343

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

Heizkreisregelungen - JS

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
47 Beiträge 4 Kommentatoren 8.0k Aufrufe 1 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.
  • S Offline
    S Offline
    sound31
    schrieb am zuletzt editiert von
    #6

    Hallo,

    Danke für die viele Hilfe.

    Leider muss ich kurz Unterbrechen und erst versuchen die KNX Kommunikation

    korrekt zum laufen zu bringen.

    Es werden nicht alle Sensoren richtig angezeigt!

    Grüße, Andy

    1 Antwort Letzte Antwort
    0
    • S Offline
      S Offline
      sound31
      schrieb am zuletzt editiert von
      #7

      Hallo paul53,

      ich hoffe das ich mit dem Datenpunkt Vorlauftemperatur richtig liege..

      hier habe ich den Fühler genommen der nach dem Mischer im Heizkreis OG liegt.

      Beim Mischer handelt es sich ja bei mir um einen 230V Motorantrieb wobei

      die Drehrichtungen Öffnen,Schließen mit zwei getrennten Wicklungen funktionieren.

      Diese kann ich über KNX getrennt ansprechen.

      (Sind Mechanisch verriegelt)

      Grüße, Andy

      1 Antwort Letzte Antwort
      0
      • paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #8

        @sound31:

        ch hoffe das ich mit dem Datenpunkt Vorlauftemperatur richtig liege..

        hier habe ich den Fühler genommen der nach dem Mischer im Heizkreis OG liegt. `
        Ja, der Fühler hinter dem Mischer muss die Vorlauftemperatur des Mischkreises messen.

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #9

          Hier noch ein Skript (nicht getestet) zur Ansteuerung des 3-Punkt-Antriebs (Mischer)

          // 3-Punkt-Ansteuerung aus Stellsignal
          
          const Laufzeit = 150;  // Laufzeit des Stellantriebs in s
          const Stellmax = 100;  // max. Stellsignal (%)
          const minMove = 2;     // mindest Positionsänderung des Antriebs (in %)
          const idy = 'javascript.0...';  // Datenpunkt-ID Stellsignal
          const idAuf = '...';  // Datenpunkt-ID Antrieb Richtung Auf
          const idZu = '...';   // Datenpunkt-ID Antrieb Richtung Zu
          
          var faktor = 1000 * Laufzeit / Stellmax;  // Faktor ms/%
          var lastPos = 0;   // letzte Position (Stellsignal)
          var motor = true;  // Indikator: Antrieb in Bewegung
          
          function move(pos) {
          	if(!motor) {
          		if(pos - lastPos > minMove) {
          			setState(idAuf, true);
          			motor = true;
          			if(timer) clearTimeout(timer);
          			timer = setTimeout(function() {
          				setState(idAuf, false);
          				motor = false;
          			}, faktor * (pos - lastPos));
          			lastPos = pos;
          		}
          		else if(lastPos - pos > minMove) {
          			setState(idZu, true);
          			motor = true;
          			var deltaPos = lastPos - pos;
          			if(pos === 0) deltaPos = deltaPos + 10;  // Synchronistation "Zu"
          			if(timer) clearTimeout(timer);
          			timer = setTimeout(function() {
          				setState(idZu, false);
          				motor = false;
          			}, faktor * deltaPos);
          			lastPos = pos;
          		}	
          	}
          }
          
          on(idy, function(dp) {
          	move(dp.state.val);
          });
          
          // Bei Skriptstart fährt Antrieb erst 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));
          

          EDIT: Skriptstart erweitert auf Fahren in Sollposition

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          S 1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            sound31
            schrieb am zuletzt editiert von
            #10

            Hallo Paul53,

            Vorab einmal Herzlichen Dank für deine Hilfe das ist echt der Wahnsinn, Danke.

            Die beiden Heizkreise der Fußbodenheizung die fertig sind (Flur und Küche im EG)

            habe ich jetzt von der bestehenden Steuerung getrennt und mit dem Java-Protokoll in Betrieb genommen.

            Jeweils in Unterordnern einzeln, auch das Script zur Berechnung der Heizkurve läuft bereits.

            Mit den eingestellten Sollwerten bekomme ich einen Rückwert von dz. 47,2°C

            (wie im Bild dargestellt)
            4002_screenshot.13.jpg
            Ich hoffe das ist so richtig.

            Da die Ist-Temperatur in der Küche (infolge vom Kochen usw.) immer etwas höher liegt habe

            ich zum Testen die Solltemperatur höher gestellt um zu sehen ob das so Funktioniert, das tut es!

            Stimmt der Datenpunkt zum Stellsignal so? (Bild 2)
            4002_screenshot.16.jpg

            Grüße, Andy

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #11

              Du hast die Datenpunkte unter javascript.0.scriptEnabled erstellt. Das solltest Du ändern !

              Erstelle die Datenpunkte direkt unter javascript.0. Beispiel: Name "Heizung.Stellsignal-HK-OG" entspricht ID "javascript.0.Heizung.Stellsignal-HK-OG".

              > Stimmt der Datenpunkt zum Stellsignal so? (Bild 2)
              Nein, der Datenpunkt muss vom Typ "Zahl" mit min: 0, max: 100 und unit: "%" sein.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • S Offline
                S Offline
                sound31
                schrieb am zuletzt editiert von
                #12

                In den Script's für die Fußbodenheizung habe ich jetzt jeweils eine Variable

                für die Anforderung der Pumpe gesetzt:

                var pump = "javascript.0.FBH-Pumpe-1"/*FBH-Pumpe-1*/;
                
                

                diese wird mit den Ventilen eingeschalten.

                Danach ein Script für die Pumpeneinschaltung:

                // Ansteuerung Pumpe
                // für Fußbodenheizungen
                
                var pump1 = "javascript.0.FBH-Pumpe-1"/*FBH-Pumpe-1*/;
                var pump2 = "javascript.0.FBH-Pumpe-2"/*FBH-Pumpe-2*/;
                var pump = "knx.0.Aktoren.Heizung-Technik.HK-Verteiler_EG_-_Relais_1"/*HK-EG-Pumpe*/;
                
                function control() {
                    if (pump1 == 1 || pump2 == 1)
                    {
                        setState(pump, 1);
                    }
                    else if (pump1 === 0 && pump2 === 0)
                    {
                        setState(pump, 0);
                    }
                } 
                
                

                Ich hoffe das ist so korrekt.

                Die Datenpunkte habe ich so angelegt:
                4002_screenshot.20.jpg
                4002_screenshot.21.jpg

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #13

                  @sound31:

                  Ich hoffe das ist so korrekt. `
                  Leider nicht. Die Pumpen-Datenpunkte sollten vom Typ "boolean" (Logikwert oder Schalter) sein. Das Skript funktioniert so nicht.

                  // Ansteuerung Pumpe
                  // für Fußbodenheizungen
                  
                  var idpump1 = "javascript.0.FBH-Pumpe-1"/*FBH-Pumpe-1*/;
                  var idpump2 = "javascript.0.FBH-Pumpe-2"/*FBH-Pumpe-2*/;
                  var idpump = "knx.0.Aktoren.Heizung-Technik.HK-Verteiler_EG_-_Relais_1"/*HK-EG-Pumpe*/;
                  
                  // Initialisierung bei Skriptstart
                  var pump1 = getState(idpump1).val;
                  var pump2 = getState(idpump2).val;
                  
                  function control() {
                      if (pump1 || pump2)
                      {
                          setState(idpump, true);
                      }
                      else
                      {
                          setState(idpump, false);
                      }
                  }
                  
                  // 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();
                  });
                  
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #14

                    Anmerkung: Die Trägheit der thermoelektrischen Stellantriebe (brauchen ca. 5 Minuten für gesamten Hub) sollte beachtet werden. Die Pumpe sollte also mit ca. 3 Minuten Verzögerung gaschaltet werden.

                    var timer = null;
                    
                    function control() {
                        if(timer) clearTimeout(timer);
                        if (pump1 || pump2) {
                            timer = setTimeout(function() {
                                setState(idpump, true);
                            }, 180000);  // 3 Minuten Verzögerung
                        }
                        else {
                            timer = setTimeout(function() {
                                setState(idpump, false);
                            }, 180000);    
                       }
                    }
                    

                    Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                    Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                    1 Antwort Letzte Antwort
                    0
                    • S Offline
                      S Offline
                      sound31
                      schrieb am zuletzt editiert von
                      #15

                      Stimmt die Schaltung im Script FBH so?

                      // PI-Regler Fussbodenheizung mit PWM-Ansteuerung
                      // für FBH Flur EG
                      // P-Band in K, Nachstellzeit in s, PWM-Periode in Intervallen (Minuten)
                      var Xp = 2;
                      var Tn = 3600;
                      var pwm = 100; //* PWM Zeit verlängert
                      
                      var xid = "knx.0.Sensoren.Erdgeschoss.Temp-Sensor_Küche_EG"/*Temp-Sensor Küche EG*/;
                      var wid = "javascript.0.Sollwert-Küche-EG"/*Sollwert-Küche-EG*/;
                      var yid = "knx.0.Aktoren.Heizung-Technik.HK-Verteiler_EG_-_Solid_Stade_Relais_1"/*SSR-Küche-EG*/;
                      var pump = "javascript.0.FBH-Pumpe-2"/*FBH-Pumpe-2*/;
                      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);		// Pumpe Einschalten
                          }
                        else if (n >= 8 && y <= n)    // Zwei Ventile werden geschalten
                          {   setState(yid, 0);
                              setState(pump, 0);		// Pumpe Ausschalten
                          }  
                      }
                      
                      control();  // Script start
                      
                      setInterval(control, 60000 );  // Intervall: 1 Minute
                      
                      
                      1 Antwort Letzte Antwort
                      0
                      • paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #16

                        Die Intervall-Zeit solltest Du auf die Hälfte verringern.

                        setInterval(control, 30000 );  // Intervall: 0,5 Minuten
                        

                        Die Datenpunkte zur Pumpenanforderung werden nicht benötigt, denn im Pumpenskript können die Ventildatenpunkte direkt ausgewertet werden (schalten identisch).

                        Sind die KNX-Schalt-Datenpunkte vom Typ "boolean" mit den Werten false/true oder sind sie vom Typ Zahl mit den Werten 0/1 ?

                        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                        1 Antwort Letzte Antwort
                        0
                        • S Offline
                          S Offline
                          sound31
                          schrieb am zuletzt editiert von
                          #17

                          Die Datenpunkte sind Logikwert, switch so wurden sie eingelesen vom

                          KNX Adapter.
                          4002_screenshot.13.jpg
                          deswegen habe ich die Ursprünglichen Werte true/false auf 0/1 geändert.

                          Am WE möchte ich nochmal alle Datenpunkte von der KNX-seite prüfen um

                          sicher zu gehen das auch alle richtig angezeigt werden.

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            sound31
                            schrieb am zuletzt editiert von
                            #18

                            > Die Datenpunkte zur Pumpenanforderung werden nicht benötigt, denn im Pumpenskript können die Ventildatenpunkte direkt ausgewertet werden (schalten identisch).
                            müsste ich dann im Pumpenscript nicht die ID's der Ventile bei den Variablen einfügen

                            var idpump1 = "javascript.0.FBH-Pumpe-1"/*FBH-Pumpe-1*/;
                            var idpump2 = "javascript.0.FBH-Pumpe-2"/*FBH-Pumpe-2*/;
                            
                            
                            1 Antwort Letzte Antwort
                            0
                            • paul53P Offline
                              paul53P Offline
                              paul53
                              schrieb am zuletzt editiert von
                              #19

                              @sound31:

                              Die Datenpunkte sind Logikwert, switch so wurden sie eingelesen vom KNX Adapter. `
                              Logikwert und min: 0, max: 1 sind ein Widerspruch. Diesbezüglich wurde der Adapter schlampig programmiert. Dann kommt es darauf an, auf welche Werte reagiert wird.
                              @sound31:

                              müsste ich dann im Pumpenscript nicht die ID's der Ventile bei den Variablen einfügen `
                              Richtig.

                              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                              1 Antwort Letzte Antwort
                              0
                              • S Offline
                                S Offline
                                sound31
                                schrieb am zuletzt editiert von
                                #20

                                > Logikwert und min: 0, max: 1 sind ein Widerspruch. Diesbezüglich wurde der Adapter schlampig programmiert. Dann kommt es darauf an, auf welche Werte reagiert wird.
                                Sollte ich das in den Einstellungen ändern, Die Ventile und auch die Pumpen werden richtig geschalten.

                                Dann kann ich im FBH-Script die Declaration der Variablen und auch das Ein und Ausschalten dieser entfernen.

                                1 Antwort Letzte Antwort
                                0
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #21

                                  @sound31:

                                  Sollte ich das in den Einstellungen ändern, `
                                  Nein - auch wenn es nicht korrekt ist - die Datenpunkteigenschaften werden vom Adapter erzeugt.
                                  @sound31:

                                  Die Ventile und auch die Pumpen werden richtig geschalten. `
                                  Mit 0/1 ?

                                  @sound31:

                                  Dann kann ich im FBH-Script die Declaration der Variablen und auch das Ein und Ausschalten dieser entfernen. `
                                  Ja.

                                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                  1 Antwort Letzte Antwort
                                  0
                                  • S Offline
                                    S Offline
                                    sound31
                                    schrieb am zuletzt editiert von
                                    #22

                                    Hallo Paul53,

                                    gibt es eine einfache Möglichkeit in die Scripte eine Stop Funktion einzufügen bei

                                    zB. Service?

                                    Aktuell hatte es mit die Heizkreispumpe am Donnerstag zerlegt um am Samstag

                                    in der früh das Heizregister der Gastherme.

                                    Das Script für den Mischermotor tut auch bereits Ihren Dienst.

                                    Allerdings sind manchmal beide Ausgänge angesprochen.

                                    Grüße, Andy.

                                    1 Antwort Letzte Antwort
                                    0
                                    • paul53P Offline
                                      paul53P Offline
                                      paul53
                                      schrieb am zuletzt editiert von
                                      #23

                                      @sound31:

                                      gibt es eine einfache Möglichkeit in die Scripte eine Stop Funktion einzufügen bei zB. Service? `
                                      Was soll erreicht werden ?

                                      Was meinst Du mit Service ?

                                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        sound31
                                        schrieb am zuletzt editiert von
                                        #24

                                        Heute bekomme ich das neue Register für die Gastherme.

                                        zum einbauen muss ich das Wasser zum Teil aus dem Heizkreis entfernen.

                                        Dazu muss ich die Pumpe auch ausschalten das geht jetzt nur über

                                        das ausschalten des Scrips oder Stromlos machen.

                                        1 Antwort Letzte Antwort
                                        0
                                        • paul53P Offline
                                          paul53P Offline
                                          paul53
                                          schrieb am zuletzt editiert von
                                          #25

                                          @sound31:

                                          Dazu muss ich die Pumpe auch ausschalten das geht jetzt nur über das ausschalten des Scrips oder Stromlos machen. `
                                          Stromlos machen ist keine schlechte Lösung. Jedes Skript lässt sich auch im Reiter "Javascript" deaktivieren und nach dem Deaktivieren des Skripts kann man den Datenpunkt für die Pumpe im Reiter "Objekte" auf "Aus" ändern.

                                          Du solltest noch einen Datenpunkt "Heizperiode" oder "Jahreszeit" (Winter = true) vom Typ "Schalter" unter javascript.0 anlegen und darüber die Mischeransteuerung und die Pumpenansteuerung beeinflussen.

                                          const idHeizen = 'javascript.0.Heizperiode';
                                          
                                          ...
                                          var heizen = getState(idHeizen).val;
                                          
                                          function control() {
                                              if(timer) clearTimeout(timer);
                                              if ((pump1 || pump2) && heizen) {
                                                 ...
                                          }
                                          
                                          // am Ende zusätzlich
                                          on(idHeizen, function(dp) {
                                              heizen = dp.state.val;
                                              control();
                                          });    
                                          
                                          

                                          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                          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

                                          745

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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