Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Eigenverbrauchsoptimierung PV - Anlage - Anfänger

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

Eigenverbrauchsoptimierung PV - Anlage - Anfänger

Scheduled Pinned Locked Moved JavaScript
javascript
10 Posts 3 Posters 543 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Johannes BauerstatterJ Offline
    Johannes BauerstatterJ Offline
    Johannes Bauerstatter
    wrote on last edited by Johannes Bauerstatter
    #1

    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.

    HomoranH 1 Reply Last reply
    0
    • Johannes BauerstatterJ 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.

      HomoranH Do not disturb
      HomoranH Do not disturb
      Homoran
      Global Moderator Administrators
      wrote on last edited by
      #2

      @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

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      Johannes BauerstatterJ 1 Reply Last reply
      0
      • HomoranH Homoran

        @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 BauerstatterJ Offline
        Johannes BauerstatterJ Offline
        Johannes Bauerstatter
        wrote on last edited by
        #3

        @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 ); 
        });
        
        paul53P 1 Reply Last reply
        0
        • Johannes BauerstatterJ Johannes Bauerstatter

          @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 ); 
          });
          
          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #4

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

          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

          Johannes BauerstatterJ 1 Reply Last reply
          0
          • paul53P 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 BauerstatterJ Offline
            Johannes BauerstatterJ Offline
            Johannes Bauerstatter
            wrote on last edited by
            #5

            @paul53 Danke für die Korrekturen.

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

            paul53P 1 Reply Last reply
            0
            • Johannes BauerstatterJ Johannes Bauerstatter

              @paul53 Danke für die Korrekturen.

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

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

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

              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

              Johannes BauerstatterJ 1 Reply Last reply
              0
              • paul53P paul53

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

                Johannes BauerstatterJ Offline
                Johannes BauerstatterJ Offline
                Johannes Bauerstatter
                wrote on last edited by
                #7

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

                paul53P 1 Reply Last reply
                0
                • Johannes BauerstatterJ Johannes Bauerstatter

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

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #8

                  @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;
                              }
                          }
                      }
                  });
                  

                  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

                  Johannes BauerstatterJ 1 Reply Last reply
                  0
                  • paul53P 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 BauerstatterJ Offline
                    Johannes BauerstatterJ Offline
                    Johannes Bauerstatter
                    wrote on last edited by Johannes Bauerstatter
                    #9

                    @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 BauerstatterJ 1 Reply Last reply
                    0
                    • Johannes BauerstatterJ 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 BauerstatterJ Offline
                      Johannes BauerstatterJ Offline
                      Johannes Bauerstatter
                      wrote on last edited by Johannes Bauerstatter
                      #10

                      Läuft noch nicht richtig. In Arbeit.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      857

                      Online

                      32.4k

                      Users

                      81.5k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe