Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Eigenverbrauchsoptimierung PV - Anlage - Anfänger

    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

    Eigenverbrauchsoptimierung PV - Anlage - Anfänger

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

      Hallo, bräuchte bitte wieder mal Eure Hilfe.

      folgendes Script berechnet mir ob ich momentan Einspeise bzw. wieviel Energie ich gerade beziehe:

      const Gesamt = [
      '0_userdata.0.Verbräuche.Strom_1OG',
      '0_userdata.0.Verbräuche.Strom_EG',
      '0_userdata.0.Verbräuche.Photovoltaik',
      '0_userdata.0.Verbräuche.Strom_Heizung',
      '0_userdata.0.Verbräuche.Strom_Garage_Keller'
      
      ];
        
      on(Gesamt, function (obj) 
      {
          setState('0_userdata.0.Verbräuche.Gesamtverbrauch', 
          ( getState('0_userdata.0.Verbräuche.Strom_1OG').val
          + getState('0_userdata.0.Verbräuche.Strom_EG').val
          + getState('0_userdata.0.Verbräuche.Strom_Heizung').val
          + getState('0_userdata.0.Verbräuche.Strom_Garage_Keller').val         
          - getState('0_userdata.0.Verbräuche.Photovoltaik').val
          ));
      })
      

      In meinem Puffer steckt ein Heizstab den ich mittels Schalter einschalten kann:
      21b4ca09-e144-492d-a8a5-9033a8507b43-image.png

      Jetzt soll ein Script die Phasen der Heizstäbe einschalten sobald jeweils 700W über sind.

      Einspeisung >700W -> P1 ein -> Einspeisung fällt auf 100W (da Heizstab ca. 600W) verbraucht -> P1 würde ausschalten -> Einspeisung steigt wieder auf 700W -> Heizstab wieder ein -> .... wie kann ich das verhindern bzw. wie schalte ich dann P2. P2 müsste einschalten wenn P1 + Einspeisung >700W ist.

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

        @johannes-bauerstatter sagte in Eigenverbrauchsoptimierung PV - Anlage - Anfänger:

        wie kann ich das verhindern

        indem du mit einer Variablen arbeitest und diese ja nach bereits laufenden Phasen neu berechnest:

        @johannes-bauerstatter sagte in Eigenverbrauchsoptimierung PV - Anlage - Anfänger:

        wenn P1 + Einspeisung >700W

        Johannes Bauerstatter 1 Reply Last reply Reply Quote 0
        • Johannes Bauerstatter
          Johannes Bauerstatter @Homoran last edited by

          @homoran
          Würde das dann so funktionieren?:

          const Gesamt = [
          '0_userdata.0.Verbräuche.Strom_1OG',
          '0_userdata.0.Verbräuche.Strom_EG',
          '0_userdata.0.Verbräuche.Photovoltaik',
          '0_userdata.0.Verbräuche.Strom_Heizung',
          '0_userdata.0.Verbräuche.Strom_Garage_Keller'
          ];
            
          on(Gesamt, function (obj) 
          {
              setState('0_userdata.0.Verbräuche.Gesamtverbrauch', 
              ( getState('0_userdata.0.Verbräuche.Strom_1OG').val
              + getState('0_userdata.0.Verbräuche.Strom_EG').val
              + getState('0_userdata.0.Verbräuche.Strom_Heizung').val
              + getState('0_userdata.0.Verbräuche.Strom_Garage_Keller').val         
              - getState('0_userdata.0.Verbräuche.Photovoltaik').val
              ));
          })
          
          
          const Verbrauch = ['0_userdata.0.Verbräuche.Gesamtverbrauch'];
          var P1 = 0;
          var P2 = 0;
          
          on (Verbrauch, function (obj) 
          {
          if (getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val < -700 && P1 == 0) 
              {var P1 = 1;
              setTimeout(function() {setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', true );}, 900000); 
              } 
          else    setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', false );
                  var P1 = 0;
          
          
          if (getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val < -700 && P1 == 1) 
              {var P2 = 1;
              setTimeout(function() {setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', true ); }, 900000);    
              } 
          else    setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', false );
                  var P2 = 0;
          
          
          if (getState('0_userdata.0.Verbräuche.Gesamtverbrauch').val < -700 && P2 == 1) 
              {
              setTimeout(function() {setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', true );}, 900000);
              } 
          else    setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', false ); 
          });
          
          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @Johannes Bauerstatter last edited by paul53

            @johannes-bauerstatter sagte: Würde das dann so funktionieren?:

            Ohne die Funktionalität zu beurteilen, sollten einige Korrekturen erfolgen:

            const idVerbrauch = '0_userdata.0.Verbräuche.Gesamtverbrauch';
            var P1 = 0;
            var P2 = 0;
             
            on (idVerbrauch, function (dp) {
               let verbrauch = dp.state.val;
               if (verbrauch < -700 && P1 == 0) {
                  P1 = 1;
                  setTimeout(function() {
                     setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', true);
                  }, 900000); 
               } else {
                  setState('esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1', false );
                  P1 = 0;
               }
             
               if (verbrauch < -700 && P1 == 1) {
                  P2 = 1;
                  setTimeout(function() {
                     setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', true ); 
                  }, 900000);    
               } else {
                  setState('esphome.0.246F287C8DA4.Switch.2875680689.heizstab_relais_2', false );
                  P2 = 0;
               }
             
               if (verbrauch < -700 && P2 == 1) {
                  setTimeout(function() { 
                     setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', true ); 
                  }, 900000);
               } else {
                  setState('esphome.0.246F287C8DA4.Switch.2875680688.heizstab_relais_3', false ); 
               }
            });
            

            Was schalten relais1...3?

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

              @paul53 Danke für die Korrekturen.

              Ich habe einen 3phasigen Heizstab und die Relais schalten jeweils eine Phase.

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

                @johannes-bauerstatter
                Was sollen die Timeout von 15 Minuten bewirken?

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

                  @paul53 Schwankungen von seitens der PV - Anlage abfangen, damit nicht zu viele Schaltvorgänge auf den Relais passieren.

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

                    @johannes-bauerstatter
                    Du möchtest nacheinander jeweils eine Phase zuschalten, wenn der resultierende Überschuss 15 Minuten lang über 700 W beträgt?
                    Dann versuche es mal so:

                    const idVerbrauch = '0_userdata.0.Verbräuche.Gesamtverbrauch';
                    const idR1 = 'esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_1';
                    const idR2 = 'esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_2';
                    const idR3 = 'esphome.0.246F287C8DA4.Switch.2875680690.heizstab_relais_3';
                    
                    var p1, p2, p3 = false;
                    var delay = null;
                    
                    on(idVerbrauch, function(dp) {
                        if(dp.state.val < -700) {
                            if(!delay) {
                                delay = setTimeout(function() {
                                    if(!p1) { 
                                        setState(idR1, true);
                                        p1 = true;
                                    } else if(!p2) {
                                        setState(idR2, true);
                                        p2 = true;
                                    } else if(!p3) {
                                        setState(idR3, true);
                                        p3 = true;
                                    }
                                    delay = null;
                                }, 900000);
                            }
                        } else {
                            if(delay) clearTimeout(delay);
                            delay = null;
                            if(dp.state.val > -50) {
                                if(p3) {
                                    setState(idR3, false);
                                    p3 = false;
                                } else if(p2) {
                                    setState(idR2, false);
                                    p2 = false;
                                } else if(p1) {
                                    setState(idR1, false);
                                    p1 = false;
                                }
                            }
                        }
                    });
                    
                    Johannes Bauerstatter 1 Reply Last reply Reply Quote 0
                    • Johannes Bauerstatter
                      Johannes Bauerstatter @paul53 last edited by Johannes Bauerstatter

                      @paul53 Danke für deinen Code.

                      Habe mich leider schlecht ausgedrückt:

                      Ziel:
                      wenn idVerbrauch <-700W dann Relais1 ein; sollte es kurzzeitig auf -680W und innerhalb von 15min wieder über <-700W steigen, dann soll das Relais 1 nicht ausschalten -> 15min in denen der idVerbrauch kurz unter -<700W fallen darf.

                      Ablauf:

                      idVerbrauch >-700
                      -> Relais1 ein
                      -> durch Relais1 ein fällt der idVerbrauch auf ca. -100W
                      -> sobald wieder >-700W erreicht sind und Relais1 noch ein ist
                      -> soll Relais2 einschalten
                      -> durch Relais1 und Relais 2 ein fällt der idVerbrauch wieder auf ca. -100W
                      -> sobald wieder >-700W erreicht sind und Relais1 und Relais2 noch ein ist
                      -> soll Relais3 einschalten

                      Ausschalten in umgekehrter Reihenfolge -> zuerst Relais3 dann Relais2 dann Relais1

                      Der erste von dir korrigierte Code sollte dies bereits leisten denk ich? Bin leider erst wieder am WE zu Hause zum testen.

                      Johannes Bauerstatter 1 Reply Last reply Reply Quote 0
                      • Johannes Bauerstatter
                        Johannes Bauerstatter @Johannes Bauerstatter last edited by Johannes Bauerstatter

                        Läuft noch nicht richtig. In Arbeit.

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        456
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

                        javascript
                        3
                        10
                        391
                        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