Navigation

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

    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

    2 Punkt Regler

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

      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.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @Matze1708 last edited by 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 1 Reply Last reply Reply Quote 0
        • M
          Matze1708 @paul53 last edited by

          @paul53

          Danke, was gelernt! Ging dann scheinbar auf anhieb.

          Muss es jetzt noch in den Yahka rein setzten.

          Danke.

          M 1 Reply Last reply Reply Quote 0
          • M
            Matze1708 @Matze1708 last edited by

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

            paul53 1 Reply Last reply Reply Quote 0
            • paul53
              paul53 @Matze1708 last edited by 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 1 Reply Last reply Reply Quote 0
              • M
                Matze1708 @paul53 last edited by

                @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 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                428
                Online

                31.8k
                Users

                80.0k
                Topics

                1.3m
                Posts

                heating javascript
                2
                6
                395
                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