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. JavaScript
  5. 2 Punkt Regler

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    699

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

2 Punkt Regler

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptheating
6 Beiträge 2 Kommentatoren 549 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.
  • M Offline
    M Offline
    Matze1708
    schrieb am zuletzt editiert von
    #1

    Re: 2-Punkt-Regler (Heizung)

    Guten Morgen,
    ich habe mich hier an dieses Skript gehalten. https://forum.iobroker.net/topic/1087/2-punkt-regler-heizung?loggedin=true

    Ich habe kein HM sondern die Option die Temp über Netatmo zu bekommen und über einen Shelly das Relais zu steuern.

    Mein Versuch ist dieser hier:

    // 2-Punkt-Regler Raumheizung
     
    // Variablen erstellen
    createState('Heizung.MeinZimmer_2Punkt_HZ', {
        name: 'MeinZimmer_2Punkt_HZ'
    });
    setState('Heizung.MeinZimmer_2Punkt_HZ', false);
    
    createState('Heizung.MeinZimmer_Sollwert_HZ', {
        name: 'MeinZimmer_Sollwert_HZ'
    });
    setState('Heizung.MeinZimmer_Sollwert_HZ', 23.0);
    
    // halbe Hysterese in K
    var hh = 0.1;
    
    var xid = getIdByName('netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/);
    var wid = getIdByName('javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/);
    var yid = getIdByName("javascript.0.Heizung.MeinZimmer_2Punkt_HZ");
    var x = getState(xid).val;  // Istwert in °C
    var w = getState(wid).val;  // Sollwert in °C
     
    console.log(x);
    
    
    function hys() {
        if (x <= w - hh) setState(yid, true);
        else if (x >= w + hh) setState(yid, false);
    }
     
    hys();  // Script start
     
    on(xid, function(dp) {
        x = dp.state.val;
        hys();
    });
     
    on(wid, function(dp) {
        w = dp.state.val;
        hys();
    });
    

    Als erstes erstelle ich mir die beiden States Sollwert und Heizen 2 Punkt. Wobei der nur zum Test ist. Im Final kann ich eigentlich direkt den Shelly State schalte.

    Ist mein Skript soweit ok?
    Ich bekomme im Log warnungen.

    
    javascript.0	2021-02-15 11:06:17.729	info	(1101) script.js.Skripte.Heizung_MeinZimmer: registered 2 subscriptions and 0 schedules
    javascript.0	2021-02-15 11:06:17.727	info	(1101) script.js.Skripte.Heizung_MeinZimmer: null
    javascript.0	2021-02-15 11:06:17.727	warn	(1101) at script.js.Skripte.Heizung_MeinZimmer:21:9
    javascript.0	2021-02-15 11:06:17.725	warn	(1101) getState "undefined" not found (3)
    javascript.0	2021-02-15 11:06:17.724	warn	(1101) at script.js.Skripte.Heizung_MeinZimmer:20:9
    javascript.0	2021-02-15 11:06:17.721	warn	(1101) getState "undefined" not found (3)
    javascript.0	2021-02-15 11:06:17.701	info	(1101) Start javascript script.js.Skripte.Heizung_MeinZimmer
    

    Ich habe zu beginn einfach mal die States nach erstellung definiert, damit die nicht NULL sind.

    Danke schön.

    paul53P 1 Antwort Letzte Antwort
    0
    • M Matze1708

      Re: 2-Punkt-Regler (Heizung)

      Guten Morgen,
      ich habe mich hier an dieses Skript gehalten. https://forum.iobroker.net/topic/1087/2-punkt-regler-heizung?loggedin=true

      Ich habe kein HM sondern die Option die Temp über Netatmo zu bekommen und über einen Shelly das Relais zu steuern.

      Mein Versuch ist dieser hier:

      // 2-Punkt-Regler Raumheizung
       
      // Variablen erstellen
      createState('Heizung.MeinZimmer_2Punkt_HZ', {
          name: 'MeinZimmer_2Punkt_HZ'
      });
      setState('Heizung.MeinZimmer_2Punkt_HZ', false);
      
      createState('Heizung.MeinZimmer_Sollwert_HZ', {
          name: 'MeinZimmer_Sollwert_HZ'
      });
      setState('Heizung.MeinZimmer_Sollwert_HZ', 23.0);
      
      // halbe Hysterese in K
      var hh = 0.1;
      
      var xid = getIdByName('netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/);
      var wid = getIdByName('javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/);
      var yid = getIdByName("javascript.0.Heizung.MeinZimmer_2Punkt_HZ");
      var x = getState(xid).val;  // Istwert in °C
      var w = getState(wid).val;  // Sollwert in °C
       
      console.log(x);
      
      
      function hys() {
          if (x <= w - hh) setState(yid, true);
          else if (x >= w + hh) setState(yid, false);
      }
       
      hys();  // Script start
       
      on(xid, function(dp) {
          x = dp.state.val;
          hys();
      });
       
      on(wid, function(dp) {
          w = dp.state.val;
          hys();
      });
      

      Als erstes erstelle ich mir die beiden States Sollwert und Heizen 2 Punkt. Wobei der nur zum Test ist. Im Final kann ich eigentlich direkt den Shelly State schalte.

      Ist mein Skript soweit ok?
      Ich bekomme im Log warnungen.

      
      javascript.0	2021-02-15 11:06:17.729	info	(1101) script.js.Skripte.Heizung_MeinZimmer: registered 2 subscriptions and 0 schedules
      javascript.0	2021-02-15 11:06:17.727	info	(1101) script.js.Skripte.Heizung_MeinZimmer: null
      javascript.0	2021-02-15 11:06:17.727	warn	(1101) at script.js.Skripte.Heizung_MeinZimmer:21:9
      javascript.0	2021-02-15 11:06:17.725	warn	(1101) getState "undefined" not found (3)
      javascript.0	2021-02-15 11:06:17.724	warn	(1101) at script.js.Skripte.Heizung_MeinZimmer:20:9
      javascript.0	2021-02-15 11:06:17.721	warn	(1101) getState "undefined" not found (3)
      javascript.0	2021-02-15 11:06:17.701	info	(1101) Start javascript script.js.Skripte.Heizung_MeinZimmer
      

      Ich habe zu beginn einfach mal die States nach erstellung definiert, damit die nicht NULL sind.

      Danke schön.

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @matze1708 sagte:

      var xid = getIdByName('netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/);
      var wid = getIdByName('javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/); 
      var yid = getIdByName("javascript.0.Heizung.MeinZimmer_2Punkt_HZ");
      

      Wenn die Datenpunkt-IDs angegeben werden, darf nicht getIdByName(name) verwendet werden. Richtig:

      var xid = 'netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/;
      var wid = 'javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/;
      var yid = "javascript.0.Heizung.MeinZimmer_2Punkt_HZ";
      

      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

      M 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @matze1708 sagte:

        var xid = getIdByName('netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/);
        var wid = getIdByName('javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/); 
        var yid = getIdByName("javascript.0.Heizung.MeinZimmer_2Punkt_HZ");
        

        Wenn die Datenpunkt-IDs angegeben werden, darf nicht getIdByName(name) verwendet werden. Richtig:

        var xid = 'netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/;
        var wid = 'javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/;
        var yid = "javascript.0.Heizung.MeinZimmer_2Punkt_HZ";
        
        M Offline
        M Offline
        Matze1708
        schrieb am zuletzt editiert von
        #3

        @paul53

        Danke, was gelernt! Ging dann scheinbar auf anhieb.

        Muss es jetzt noch in den Yahka rein setzten.

        Danke.

        M 1 Antwort Letzte Antwort
        0
        • M Matze1708

          @paul53

          Danke, was gelernt! Ging dann scheinbar auf anhieb.

          Muss es jetzt noch in den Yahka rein setzten.

          Danke.

          M Offline
          M Offline
          Matze1708
          schrieb am zuletzt editiert von
          #4

          @paul53

          Hallo, nochmal eine Ergänzung.

          Wenn ich noch einbauen möchte, dass ich die Heizung abstellen mag.

          Sagen wir bei 1 oder 3 darf sie laufen. sonst nicht.

          Wie baue ich das ein?!

          Habe ergänzt um

          createState('Heizung.MeinZimmer_HeatingState', {
              name: 'MeinZimmer__HeatingState'
          });
          setState('Heizung.MeinZimmer_HeatingState', 1);
          
          // 2-Punkt-Regler Raumheizung
           
          // Variablen erstellen
          createState('Heizung.MeinZimmer_2Punkt_HZ', {
              name: 'MeinZimmer_2Punkt_HZ'
          });
          setState('Heizung.MeinZimmer_2Punkt_HZ', false);
          
          createState('Heizung.MeinZimmer_HeatingState', {
              name: 'MeinZimmer__HeatingState'
          });
          setState('Heizung.MeinZimmer_HeatingState', 1);
          
          createState('Heizung.MeinZimmer_Sollwert_HZ', {
              name: 'MeinZimmer_Sollwert_HZ'
          });
          setState('Heizung.MeinZimmer_Sollwert_HZ', 23.0);
          
          // halbe Hysterese in K
          var hh = 0.1;
          
          var xid = 'netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/;
          var wid = 'javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/;
          var yid = "javascript.0.Heizung.MeinZimmer_2Punkt_HZ";
          var hsid = "javascript.0.Heizung.MeinZimmer_HeatingState";
          var x = getState(xid).val;  // Istwert in °C
          var w = getState(wid).val;  // Sollwert in °C
          var hs = getState(hsid).val; // Heating State
          
          
          
          function hys() {
              if (x <= w - hh) setState(yid, true);
              else if (x >= w + hh) setState(yid, false);
                  
          }
          
          
          hys();  // Script start
          
          
          on(xid, function(dp) {
              x = dp.state.val;
              hys();
          });
          
          on(wid, function(dp) {
              w = dp.state.val;
              hys();
          });
          
          

          Aber wo lasse ich das am besten laufen, dass mein Skript das auch mitbekommt, wann auf einen anderen Status gestellt wird und der setState vom 2 Punkt auf false gehen soll?!

          Danke.

          paul53P 1 Antwort Letzte Antwort
          0
          • M Matze1708

            @paul53

            Hallo, nochmal eine Ergänzung.

            Wenn ich noch einbauen möchte, dass ich die Heizung abstellen mag.

            Sagen wir bei 1 oder 3 darf sie laufen. sonst nicht.

            Wie baue ich das ein?!

            Habe ergänzt um

            createState('Heizung.MeinZimmer_HeatingState', {
                name: 'MeinZimmer__HeatingState'
            });
            setState('Heizung.MeinZimmer_HeatingState', 1);
            
            // 2-Punkt-Regler Raumheizung
             
            // Variablen erstellen
            createState('Heizung.MeinZimmer_2Punkt_HZ', {
                name: 'MeinZimmer_2Punkt_HZ'
            });
            setState('Heizung.MeinZimmer_2Punkt_HZ', false);
            
            createState('Heizung.MeinZimmer_HeatingState', {
                name: 'MeinZimmer__HeatingState'
            });
            setState('Heizung.MeinZimmer_HeatingState', 1);
            
            createState('Heizung.MeinZimmer_Sollwert_HZ', {
                name: 'MeinZimmer_Sollwert_HZ'
            });
            setState('Heizung.MeinZimmer_Sollwert_HZ', 23.0);
            
            // halbe Hysterese in K
            var hh = 0.1;
            
            var xid = 'netatmo.0.Dijonstraße.MeinZimmer.Temperature.Temperature'/*Temperature*/;
            var wid = 'javascript.0.Heizung.MeinZimmer_Sollwert_HZ'/*MeinZimmer Sollwert HZ*/;
            var yid = "javascript.0.Heizung.MeinZimmer_2Punkt_HZ";
            var hsid = "javascript.0.Heizung.MeinZimmer_HeatingState";
            var x = getState(xid).val;  // Istwert in °C
            var w = getState(wid).val;  // Sollwert in °C
            var hs = getState(hsid).val; // Heating State
            
            
            
            function hys() {
                if (x <= w - hh) setState(yid, true);
                else if (x >= w + hh) setState(yid, false);
                    
            }
            
            
            hys();  // Script start
            
            
            on(xid, function(dp) {
                x = dp.state.val;
                hys();
            });
            
            on(wid, function(dp) {
                w = dp.state.val;
                hys();
            });
            
            

            Aber wo lasse ich das am besten laufen, dass mein Skript das auch mitbekommt, wann auf einen anderen Status gestellt wird und der setState vom 2 Punkt auf false gehen soll?!

            Danke.

            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #5

            @matze1708 sagte: bei 1 oder 3 darf sie laufen. sonst nicht.

            function hys() {
                if (x <= w - hh && (hs == 1 || hs == 3)) setState(yid, true);
                else if (x >= w + hh) setState(yid, false);
            }
            

            und den zusätzlichen Trigger:

            on(hsid, function(dp) {
                hs = dp.state.val;
                if(hs != 1 && hs != 3) setState(yid, false);
            });
            

            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

            M 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @matze1708 sagte: bei 1 oder 3 darf sie laufen. sonst nicht.

              function hys() {
                  if (x <= w - hh && (hs == 1 || hs == 3)) setState(yid, true);
                  else if (x >= w + hh) setState(yid, false);
              }
              

              und den zusätzlichen Trigger:

              on(hsid, function(dp) {
                  hs = dp.state.val;
                  if(hs != 1 && hs != 3) setState(yid, false);
              });
              
              M Offline
              M Offline
              Matze1708
              schrieb am zuletzt editiert von
              #6

              @paul53 said in 2 Punkt Regler:

              on(hsid, function(dp) { hs = dp.state.val; if(hs == 1 || hs == 3) hys(); else setState(yid, false); });

              DANKE !!

              So hatte ich es fast in der Function nur das ich die 2 Bedingung nicht in Klammern gesetzt habe, was mir aber jetzt logisch erscheint.

              Das ich denn unten aber nochmal abfeuern muss, da bin ich nicht drauf gekommen. Aber auch klar.

              Danke schön.

              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

              795

              Online

              32.6k

              Benutzer

              82.0k

              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