Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Heizung Winter/Sommer Betrieb

    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

    Heizung Winter/Sommer Betrieb

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

      Moin,

      ich komme aus der SPS Programmierung und habe leider noch nicht so die Erfahrung mit Javascript, deshalb hier meine Frage.
      Ich betriebe iOBroker mit diversen Homatic Geräte, und einer SPS (Siemens S7-1200). In der Vis habe ich (aus diesem Forum zusammen geräubert ☺ ✌ , danke dafür) diverse Button (Widges) für die Steuerung der HM Thermostate (HAND/AUTO/BOOST usw). Des weiteren habe ich von hier https://forum.iobroker.net/topic/1087/2-punkt-regler-heizung
      das Script für meine FB zur 2-Punkt Regelung im Wintergarten. Wie kann ich es nun per Script lösen, das ich mir auf der Vis einen Button legen "Sommerbetrieb", ist dieser angewählt werden sämtliche Thermostate auf HAND mit zB 15°C eingestellt, das Script für Pumpe wird umgeschaltet auf einmal täglich 10 min ON gestellt, wird der Sommerbetrieb wieder absgeschaltet wird alles zurück auf AUTO gestellt .
      Könnte mir da jemand helfen? 😎 Danke

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

        schau mal HIER ob dir das weiterhilft ?

        1 Reply Last reply Reply Quote 0
        • N
          Nordischerjung last edited by

          Hmmm,

          das hab ich so ja, per Button umschalten, das Einzige was dor noch gemacht wird ist, dass die Auto Temperatur auf Hand mitgenommen wird.

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

            @Nordischerjung sagte in Heizung Winter/Sommer Betrieb:

            ist dieser angewählt werden sämtliche Thermostate auf HAND mit zB 15°C eingestellt, das Script für Pumpe wird umgeschaltet auf einmal täglich 10 min ON gestellt, wird der Sommerbetrieb wieder absgeschaltet wird alles zurück auf AUTO gestellt .

            Vorschlag:

            const idSommer = '...'; // ID eintragen
            const idPumpe  = '...'; 
            const idsAuto = $('*.AUTO_MODE');
            const idsManu = $('*.MANU_MODE');
            
            var sommer = getState(idSommer).val;
            
            function setManu() {
               idsManu.each(function(id, i) {
                  setState(id, 15); // 15 °C 
               });
            }
            
            function setAuto() {
               idsAuto.each(function(id,i) {
                  setState(id, true); // Auto
               });
            }
            
            on(idSommer, function(dp) {
               sommer = dp.state.val;
               if(sommer) setManu();
               else setAuto();
            });
            
            schedule('0 8 * * *', function() { // täglich 8:00 Uhr
               if(sommer) {
                  setState(idPumpe, true);
                  setStateDelayed(idPumpe, false, 600000); // 10 Minuten
               }
            });
            
            1 Reply Last reply Reply Quote 0
            • N
              Nordischerjung last edited by

              Vielen Dank schon mal,

              Findet das Script die ganzen Thermostate automatisch durch *.AUTO_MODE etc? Oder muss ich da noch etwas anderes eintragen? Genauso wie der Datenpunkt für die Temperatur, die id. Passt das so für die Thermostate? Ich kann es erst morgen testen

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

                @Nordischerjung sagte in Heizung Winter/Sommer Betrieb:

                Findet das Script die ganzen Thermostate automatisch durch *.AUTO_MODE etc?

                Ja, siehe Doku.

                1 Reply Last reply Reply Quote 0
                • N
                  Nordischerjung last edited by Nordischerjung

                  Moin,

                  ich hab jetzt mal versucht auch die beiden HMIP Thermostate einzufügen und habe das Script mit dem 2-Punkt Regelungsscript zusammen gefasst. Kann das so funktionieren? Also das umschalten geht schon mal. Und das mit der Pumpe auch?

                  //createState('javascript.0.Heizen Wintergarten.Sommerbutton', false);
                  const idSommer = 'javascript.0.Heizen Wintergarten.Sommerbutton'; // ID eintragen
                  const idPumpe  = 'hm-rpc.0.XXX.1.STATE'; 
                  const idsAuto = $('*.AUTO_MODE');
                  const idsManu = $('*.MANU_MODE');
                  const idsManuIP = $('hm-rpc.2*.CONTROL_MODE');
                  const idsAutoIP = $('hm-rpc.2*.CONTROL_MODE');
                  var sommer = getState(idSommer).val;
                  
                  function setManu() {
                     idsManu.each(function(id, i) {
                        setState(id, 15); // 15 °C 
                     });
                  }
                  function setManuIP() {
                     idsManuIP.each(function(id, i) {
                        setState(id, 1); // Control_Mode auf 1
                     });
                  }
                  function setAuto() {
                     idsAuto.each(function(id,i) {
                        setState(id, true); // Auto
                     });
                  }
                  function setAutoIP() {
                     idsManuIP.each(function(id, i) {
                        setState(id, 0); // Control_Mode auf 0
                     });
                  }
                  on(idSommer, function(dp) {
                     sommer = dp.state.val;
                     if(sommer){ 
                     setManu();
                     setManuIP();
                     }
                     else {
                     setAuto();
                     setAutoIP();
                     }
                  });
                  
                  schedule('0 8 * * *', function() { // täglich 8:00 Uhr
                     if(sommer) {
                        setState(idPumpe, true);
                        setState(idPumpe, false, 600000); // 10 Minuten
                     }
                  });
                  
                  // 2-Punkt-Regler Raumheizung
                  
                  // halbe Hysterese in K
                  var hh = 0.1;
                  
                  var xid = ("hm-rpc.0.XXXX.2.ACTUAL_TEMPERATURE");
                  var wid = ("hm-rpc.0.XXXX.2.SET_TEMPERATURE");
                  var yid = ("hm-rpc.0.XXXX.1.STATE"); //Pumpe
                  var x = getState(xid).val;  // Istwert in °C 
                  var w = getState(wid).val;  // Sollwert in °C SET_POINT
                  
                  
                  function hys() {
                      if (x <= w - hh) setState(yid, true);
                      else if (x >= w + hh) setState(yid, false);
                  }
                  if(sommer) 
                  //hier nichts, da das Script im Sommer nicht aktiv sein soll
                  ;
                  else{
                  hys();  // Script start
                  
                  on(xid, function(dp) {
                      x = dp.state.val;
                      hys();
                  });
                  
                  on(wid, function(dp) {
                      w = dp.state.val;
                      hys();
                  });
                  }
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 last edited by paul53

                    Die Pumpe muss die komplette ID (mit SN) erhalten.

                    Ich habe zwar keine HMIP-Geräte, aber ich denke, auch bei denen ist CONTROL_MODE "read only" ? Bei Umschaltung in Manu muss auch ein Sollwert gesetzt weden !
                    Zwei gleiche IDs für Auto und Manu machen keinen Sinn.

                    Die Abfrage auf "Sommer" mache besser innerhalb des Reglers.

                    var ventil = getState(yid).val;
                    
                    function hys() {
                       if(sommer) {
                          if(ventil) setState(yid, false);
                       } else {
                          if (x <= w - hh && !ventil) setState(yid, true);
                          else if (x >= w + hh && ventil) setState(yid, false);
                       } 
                    }
                    
                    on(yid, function(dp) {
                       ventil = dp.state.val;
                    });
                    
                    

                    Die zusätzliche Abfrage der Ventilstellung habe ich ergänzt, um nicht den Duty cycle durch unnötiges Senden hochzutreiben.

                    1 Reply Last reply Reply Quote 0
                    • N
                      Nordischerjung last edited by

                      Vielen dank, werde ich so mal testen.
                      Die ID habe ich nur raus ge XXX t
                      Bei den HMIP Geräten ist es so, das CONTROL_MODE = 0 Auto ist und 1 Manu ist. Beim umschalten wird Set_Temperatur intern umgeschaltet und man hat die jeweils letzte Temp Einstellung in dem jeweiligen Modus. D.h. Set_Temperatur wird für beide Mod benutzt. So quasi Multiplex_Var

                      Wie muss die CONROL_MODE Sache denn noch geändert werden, damit ich nicht 2 IDs habe?

                      1 Reply Last reply Reply Quote 0
                      • N
                        Nordischerjung last edited by

                        Wenn ich das so ändere, dann geht die Pumpe nicht aus

                        //createState('javascript.0.Heizen Wintergarten.Sommerbutton', false);
                        const idSommer = 'javascript.0.Heizen Wintergarten.Sommerbutton'; // ID eintragen
                        const idPumpe  = 'hm-rpc.0.xxxx.1.STATE'; 
                        const idsAuto = $('*.AUTO_MODE');
                        const idsManu = $('*.MANU_MODE');
                        const idsManuIP = $('hm-rpc.2*.CONTROL_MODE');
                        const idsAutoIP = $('hm-rpc.2*.CONTROL_MODE');
                        var sommer = getState(idSommer).val;
                        
                        function setManu() {
                           idsManu.each(function(id, i) {
                              setState(id, 15); // 15 °C 
                           });
                        }
                        function setManuIP() {
                           idsManuIP.each(function(id, i) {
                              setState(id, 1); // Control_Mode auf 1
                           });
                        }
                        function setAuto() {
                           idsAuto.each(function(id,i) {
                              setState(id, true); // Auto
                           });
                        }
                        function setAutoIP() {
                           idsManuIP.each(function(id, i) {
                              setState(id, 0); // Control_Mode auf 0
                           });
                        }
                        on(idSommer, function(dp) {
                           sommer = dp.state.val;
                           if(sommer){ 
                           setManu();
                           setManuIP();
                           }
                           else {
                           setAuto();
                           setAutoIP();
                           }
                        });
                        
                        schedule('0 8 * * *', function() { // täglich 8:00 Uhr
                           if(sommer) {
                              setState(idPumpe, true);
                              setState(idPumpe, false, 600000); // 10 Minuten
                           }
                        });
                        // 2-Punkt-Regler Raumheizung
                        
                        // halbe Hysterese in K
                        var hh = 0.1;
                        
                        var xid = ("hm-rpc.0.xxxx.2.ACTUAL_TEMPERATURE");
                        var wid = ("hm-rpc.0.xxxx.2.SET_TEMPERATURE");
                        var yid = ("hm-rpc.0.xxxx.1.STATE");
                        var x = getState(xid).val;  // Istwert in °C 
                        var w = getState(wid).val;  // Sollwert in °C SET_POINT
                        
                        
                        /*function hys() {
                            if (x <= w - hh) setState(yid, true);
                            else if (x >= w + hh) setState(yid, false);
                        }
                        if(sommer)
                        //
                        ;
                        else{
                        hys();  // Script start
                        
                        on(xid, function(dp) {
                            x = dp.state.val;
                            hys();
                        });
                        
                        on(wid, function(dp) {
                            w = dp.state.val;
                            hys();
                        });
                        }*/
                        var ventil = getState(yid).val;
                        
                         
                        
                        function hys() {
                        
                           if(sommer) {
                        
                              if(ventil) setState(yid, false);
                        
                           } else {
                        
                              if (x <= w - hh && !ventil) setState(yid, true);
                        
                              else if (x >= w + hh && ventil) setState(yid, false);
                        
                           } 
                        
                        }
                        
                         
                        
                        on(yid, function(dp) {
                        
                           ventil = dp.state.val;
                        
                        });
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        923
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        javascript
                        3
                        10
                        1041
                        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