Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.7k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    685

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

2 Punkt Regler

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptheating
6 Beiträge 2 Kommentatoren 639 Aufrufe 1 Beobachtet
  • Ä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: Asus PN 42 / N100 / 8 GB / 500 GB

      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: Asus PN 42 / N100 / 8 GB / 500 GB

            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

              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

              Registrieren Anmelden
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              387

              Online

              32.9k

              Benutzer

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