NEWS


  • 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

  • Kategorie Mod

    schau mal HIER ob dir das weiterhilft ?


  • 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.


  • @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
       }
    });
    

  • 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


  • @Nordischerjung sagte in Heizung Winter/Sommer Betrieb:

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

    Ja, siehe Doku.


  • 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();
    });
    }
    
    

  • 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.


  • 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?


  • 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;
    
    });
    

Suggested Topics

1.9k
Online

36.9k
Users

42.6k
Topics

590.2k
Posts