Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. PV Vario Heizer 0,5 - 3,5kW Blocky Script

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    PV Vario Heizer 0,5 - 3,5kW Blocky Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @MarkusM last edited by Homoran

      @markus-möller such mal im Forum.
      Da gibt es schon so was

      https://forum.iobroker.net/search?term=heizstab stufen&in=titlesposts

      1 Reply Last reply Reply Quote 1
      • paul53
        paul53 @MarkusM last edited by paul53

        @markusm sagte: sowas schon umgesetzt hat

        Dieses Beispiel lässt sich leicht auf 7 Stufen erweitern.

        Blockly_temp.JPG

        MarkusM 1 Reply Last reply Reply Quote 1
        • MarkusM
          MarkusM @paul53 last edited by

          @paul53 Danke fürs raus suchen.
          Seit Tagen hab ich sowas gesucht aber nicht gefunden.
          Hab das mal folgendermaßen angepasst

          var Stufe, delayon, delayoff;
          
          // Beschreibe diese Funktion …
          async function Warmwasser() {
           setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, (Stufe == 1 || Stufe == 3 || Stufe == 7));
           setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, (Stufe == 2 || Stufe == 6 || Stufe == 7));
           setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, (Stufe == 4 || Stufe == 5 || Stufe == 6 || Stufe == 7));
           await wait(3000);
          }
          
          
          Stufe = (getState('0_userdata.0.Datenpunkte.Relais_500W').val ? 1 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_1000W').val ? 2 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_2000W').val ? 4 : 0);
          on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
           let value = obj.state.val;
           let oldValue = obj.oldState.val;
           if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 600) {
             (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
           } else if (!delayon) {
             delayon = setTimeout(async () => {
               delayon = null;
               if (Stufe < 7) {
                 Stufe = (typeof Stufe === 'number' ? Stufe : 0) + 1;
                 await Warmwasser();
                 (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
               }
             }, 5000);
           }
           if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 10) {
             (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
           } else if (!delayoff) {
             delayoff = setTimeout(async () => {
               delayoff = null;
               if (Stufe < 0) {
                 Stufe = (typeof Stufe === 'number' ? Stufe : 0) + -1;
                 await Warmwasser();
                 (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
               }
             }, 5000);
           }
          });
          
          Stufe == 7;
          

          Kann ich das jetzt irgendwie testen, da aktuell ja keine Einspeisung stattfindet?

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

            @markusm sagte: Hab das mal folgendermaßen angepasst

            Das passt so nicht richtig mit den 7 Stufen (Zeilen 5, 6).
            Zeile 42 ist kontraproduktiv, da sie die Berechnung in Zeile 12 überschreibt.
            5 s sind zu kurz, um kleine Wolken bzw. Wolkenlücken zu überbrücken.
            Der Vergleich in Zeile 33 ist falsch herum.

            @markusm sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

            Kann ich das jetzt irgendwie testen, da aktuell ja keine Einspeisung stattfindet?

            Nicht wirklich, da es vernünftig nur mit der tatsächlichen Rückwirkung des Heizstabes auf die Einspeisung zu testen ist.

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

              @paul53 Zeile 42 habe ich entfernt, die lag da ausversehen noch rum.

              Die 5 Sekunden hatte ich eingestellt, da ich selbst über Datenpunkte die aktuelle Einspeisung simulieren wollte. Nur schalten die "Schalter Datenpunkte" nicht mehr ab.

              Hier noch mal in korrigiert:

              var Stufe, delayon, delayoff;
              
              // Beschreibe diese Funktion …
              async function Warmwasser() {
               setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, (Stufe == 1 || Stufe == 3 || Stufe == 7));
               setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, (Stufe == 2 || Stufe == 6 || Stufe == 7));
               setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, (Stufe == 4 || Stufe == 5 || Stufe == 6 || Stufe == 7));
               await wait(10000);
              }
              
              
              Stufe = (getState('0_userdata.0.Datenpunkte.Relais_500W').val ? 1 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_1000W').val ? 2 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_2000W').val ? 4 : 0);
              on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
               let value = obj.state.val;
               let oldValue = obj.oldState.val;
               if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 600) {
                 (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
               } else if (!delayon) {
                 delayon = setTimeout(async () => {
                   delayon = null;
                   if (Stufe < 7) {
                     Stufe = (typeof Stufe === 'number' ? Stufe : 0) + 1;
                     await Warmwasser();
                     (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
                   }
                 }, 120000);
               }
               if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 10) {
                 (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
               } else if (!delayoff) {
                 delayoff = setTimeout(async () => {
                   delayoff = null;
                   if (Stufe > 0) {
                     Stufe = (typeof Stufe === 'number' ? Stufe : 0) + -1;
                     await Warmwasser();
                     (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
                   }
                 }, 120000);
               }
              });
              

              Als Blocky:


              Screenshot 2023-11-13 175552.png

              Danke auf jeden fall für deine Hilfe. Ich setze das Projekt dann in Zukunft mal um und werde berichten.

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

                @markusm sagte: Als Blocky:

                Die Vergleiche mit dem Einspeisewert sind falsch herum.
                Bei 500 W fehlt Stufe 5.
                Bei 1000 W fehlt Stufe 3.
                Ganz unten (links) wird der falsche Timer gestoppt.

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

                  @paul53

                  var Stufe, delayon, delayoff;
                  
                  // Beschreibe diese Funktion …
                  async function Warmwasser() {
                   setState('0_userdata.0.Datenpunkte.Relais_500W' /* Relais 500W */, (Stufe == 1 || Stufe == 3 || Stufe == 5 || Stufe == 7));
                   setState('0_userdata.0.Datenpunkte.Relais_1000W' /* Relais 1000W */, (Stufe == 2 || Stufe == 3 || Stufe == 6 || Stufe == 7));
                   setState('0_userdata.0.Datenpunkte.Relais_2000W' /* Relais 2000W */, (Stufe == 4 || Stufe == 5 || Stufe == 6 || Stufe == 7));
                   await wait(10000);
                  }
                  
                  
                  Stufe = (getState('0_userdata.0.Datenpunkte.Relais_500W').val ? 1 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_1000W').val ? 2 : 0) + (getState('0_userdata.0.Datenpunkte.Relais_2000W').val ? 4 : 0);
                  on({ id: [].concat(['0_userdata.0.Datenpunkte.Einspeisung']), change: 'ne' }, async (obj) => {
                   let value = obj.state.val;
                   let oldValue = obj.oldState.val;
                   if (getState('0_userdata.0.Datenpunkte.Einspeisung').val > 600) {
                     (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
                   } else if (!delayon) {
                     delayon = setTimeout(async () => {
                       delayon = null;
                       if (Stufe < 7) {
                         Stufe = (typeof Stufe === 'number' ? Stufe : 0) + 1;
                         await Warmwasser();
                         (() => { if (delayon) { clearTimeout(delayon); delayon = null; }})();
                       }
                     }, 120000);
                   }
                   if (getState('0_userdata.0.Datenpunkte.Einspeisung').val < 10) {
                     (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
                   } else if (!delayoff) {
                     delayoff = setTimeout(async () => {
                       delayoff = null;
                       if (Stufe > 0) {
                         Stufe = (typeof Stufe === 'number' ? Stufe : 0) + -1;
                         await Warmwasser();
                         (() => { if (delayoff) { clearTimeout(delayoff); delayoff = null; }})();
                       }
                     }, 120000);
                   }
                  });
                  

                  Habe die Stufen ergänzt.
                  Die Einspeisung ist bei mir positiv, da Netzbezug negativ.
                  Oder meinst du damit was anders ?
                  Timer hab ich auch schon entdeckt.

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

                    @markusm sagte: Die Einspeisung ist bei mir positiv

                    Ja, deshalb ist der Vergleich falsch herum: Bei Einspeisung >= Grenzwert muss der sonst-Zweig ausgeführt werden (bei < Grenzwert wird nur der Timer gestoppt).

                    Blockly_temp.JPG

                    1 Reply Last reply Reply Quote 0
                    • P
                      Petrelke last edited by

                      Hallo zusammen,
                      ich bin Blockly anfänger und habe dieses Blockly nachgebaut, es regelt aber nur einmal rauf und nicht in Abhängigkeit der Einspeisung. Gibt es schon ein lauffähiges Blockly ?

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @Petrelke last edited by

                        @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                        habe dieses Blockly nachgebaut,

                        welches?
                        zeigen!

                        @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                        Gibt es schon ein lauffähiges Blockly ?

                        ja!
                        Deswegen die Frage was du daraus gemacht hast

                        P 1 Reply Last reply Reply Quote 1
                        • P
                          Petrelke @Homoran last edited by

                          @homoran said in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                          @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                          habe dieses Blockly nachgebaut,

                          welches?
                          zeigen!

                          @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                          Gibt es schon ein lauffähiges Blockly ?

                          ja!
                          Deswegen die Frage was du daraus gemacht hast

                          e5ea0350-787c-4906-b486-33114abc1862-grafik.png

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

                            @petrelke
                            3 mal Name "Schalter", die sich nicht unterscheiden lassen. Was steuern die Aktoren?
                            Was enthält der DP "Power"?
                            Die Vergleiche mit "Power" sind falsch herum!

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

                              @paul53 Schalter sind 3 unterschiedliche Variablen 500W 1000W 2000W von Shellys.
                              Power ist die Einspeiseleistung aber als positiver Wert.
                              Was meinst du damit, die Vergleiche mit Power sind falsch herum?

                              Homoran paul53 3 Replies Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @Petrelke last edited by

                                @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                                Schalter sind 3 unterschiedliche Variablen 500W 1000W 2000W von Shellys.

                                das sind doch States, keine Variablen.

                                Gib den States doch eindeutige Namen, damit man die Zuordnung prüfen kann.

                                P 1 Reply Last reply Reply Quote 0
                                • P
                                  Petrelke @Homoran last edited by

                                  @homoran die 3 Stufen 500/1000/2000W sind Variablen des Tys State.
                                  Für eindeutige Namen müsste ich Alias Namen anlegen, oder gibt es eine andere Möglichkeit.

                                  Homoran 1 Reply Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @Petrelke last edited by

                                    @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                                    die 3 Stufen 500/1000/2000W sind Variablen des Tys State.

                                    Also Datenpunkte, keine Variablen.

                                    @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                                    Für eindeutige Namen müsste ich Alias Namen anlegen, oder gibt es eine andere Möglichkeit.

                                    Natürlich!
                                    du sollst ja nicht die ID, sondern nur den Namen ändern.

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

                                      @petrelke sagte: 500W 1000W 2000W von Shellys.

                                      Dann hat eine Stufe 500 W Leistung. Dafür ist die Hysterese zu gering. Erhöhe den Einschaltgrenzwert auf 600.

                                      @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                                      Power ist die Einspeiseleistung aber als positiver Wert.

                                      Wie verhält sich der DP-Wert, wenn nichts eingespeist wird?

                                      @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                                      Was meinst du damit, die Vergleiche mit Power sind falsch herum?

                                      Wenn die Einspeiseleistung größer als der Einschaltgrenzwert ist, muss der sonst-Zweig ausgeführt werden.

                                      1 Reply Last reply Reply Quote 0
                                      • P
                                        Petrelke @Homoran last edited by

                                        @homoran 1cbefd7a-822e-488e-8904-3896f1d303f5-grafik.png
                                        Habe es ein wenig angepasst zum besseren Verständnis.
                                        Power ist zum testen ein Heizlüfter. Es geht aber immer noch nicht.
                                        Wenn Power 0W dann kommt Stufe 500W.
                                        Wenn Power 1000W dann geht Stufe 500W aus.

                                        paul53 1 Reply Last reply Reply Quote 0
                                        • Homoran
                                          Homoran Global Moderator Administrators @Petrelke last edited by

                                          sind denn nicht immer noch

                                          @petrelke sagte in PV Vario Heizer 0,5 - 3,5kW Blocky Script:

                                          die Vergleiche mit Power sind falsch herum?

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

                                            @petrelke sagte: Habe es ein wenig angepasst zum besseren Verständnis.

                                            Die Vergleiche sind immer noch falsch herum und die Hysterese ist zu klein.

                                            Blockly_temp.JPG

                                            P 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            976
                                            Online

                                            31.6k
                                            Users

                                            79.6k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            33
                                            976
                                            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