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. Berechnung Netzeinspeisung / if NL < 0 dann NE = PV – HV

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    402

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.4k

Berechnung Netzeinspeisung / if NL < 0 dann NE = PV – HV

Scheduled Pinned Locked Moved JavaScript
12 Posts 3 Posters 965 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.
  • H Offline
    H Offline
    highline
    wrote on last edited by highline
    #1

    Hallo Leute, ich habe keine Ahnung von javascript, trotzdem habe ich versucht eine Berechnung für die Netzeinspeisung abzubilden:
    Wenn Netzleistung kleiner 0 dann Netzeinspeisung = PV-Leistung – Hausverbrauch
    Es soll also zuerst geprüft werden ob die Netzleistung einen negativen Wert zeigt und dann soll gerechnet werden, wenn Netzleistung positiv, dann sollen die Werte ignoriert werden.

    Komme unten bei der Berechnung nicht weiter, wie bekomme ich den Hausverbrauch noch rein, könnt ihr bitte helfen?

    // Objekt erstellen
    createState('PV_Anlage.Netzeinspeisung',0, {
        name: 'PV-Anlage: Netzeinspeisung',
        desc: 'Netzeinspeisung = PV-Leistung – Hausverbrauch',
        read: true,
        write: true,
        type: 'number',
        unit: 'kWh'
    });
     
    var idPVLeistung = 'modbus.0.holdingRegisters.40068_PV_Leistung',
          idHausverbrauch = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung',
          idNetzleistung = 'modbus.0.holdingRegisters.40074_Netz_Leistung',
          idNetzeinspeisung = 'PV_Anlage.Netzeinspeisung';
     
    // Berechnung mit aktuellen Daten, wenn Netzleistung <0
    on({
        id: idNetzleistung,
        change: 'ne',
        valLt: 0
    }, function (data) {
        var pvleistung = getState(idPVLeistung).val,
    
            netzeinspeisung;          // zu errechnen
        netzeinspeisung = data.newState.val - hausverbrauch;
        setState(idNetzeinspeisung, netzeinspeisung);
    });
    1 Reply Last reply
    0
    • T Do not disturb
      T Do not disturb
      ticaki
      wrote on last edited by ticaki
      #2

      Meinst du das:

      on({
          id: idNetzleistung,
          change: 'ne',
          valLt: 0
      }, function (data) {
          setState(idNetzeinspeisung, getState(idPVLeistung).val - getState(idHausverbrauch).val);
      });
      

      EDIT: wobei ich das so lösen würde, damit Netzeinspeisung auch 0 wird.

      var nNetzeinspeisung = 1;
      on({
          id: idNetzleistung,
          change: 'ne',
      }, function (data) {
      if (data.state.val < 0 ) {
          nNetzeinspeisung = getState(idPVLeistung).val - getState(idHausverbrauch).val;
          setState(idNetzeinspeisung, nNetzeinspeisung);
      else if( nNetzeinspeisung != 0) { 
          nNetzeinspeisung = 0;
          setState(idNetzeinspeisung, nNetzeinspeisung);
      });
      

      Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

      Spenden

      1 Reply Last reply
      0
      • H Offline
        H Offline
        highline
        wrote on last edited by highline
        #3

        Danke für deine Unterstützung, leider läuft das Script nicht, kannst du bitte nochmal prüfen:

        //Objekt erstellen
        
        createState('PV_Anlage.Netzeinspeisung',0, {
        
            name: 'PV-Anlage: Netzeinspeisung',
        
            desc: 'Netzeinspeisung = PV-Leistung – Hausverbrauch',
        
            read: true,
        
            write: true,
        
            type: 'number',
        
            unit: 'kWh'
        
        });
        
         
        
        var idPVLeistung = 'modbus.0.holdingRegisters.40068_PV_Leistung',
            idHausverbrauch = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung',
            idNetzleistung = 'modbus.0.holdingRegisters.40074_Netz_Leistung',
            idNetzeinspeisung = 'PV_Anlage.Netzeinspeisung';
              
             
             
        // Berechnung mit aktuellen Daten, wenn Netzleistung <0     
        
        var nNetzeinspeisung = 1;
        
        on({
        
        id: idNetzleistung,
        
        change: 'ne',
        
        }, function (data) {
        
        if (data.state.val < 0 ) {
        
        nNetzeinspeisung = getState(idPVLeistung).val - getState(idHausverbrauch).val;
        
        setState(idNetzeinspeisung, nNetzeinspeisung);
        
        // else if( nNetzeinspeisung != 0) { 
        
        // nNetzeinspeisung = 0;
        
        // setState(idNetzeinspeisung, nNetzeinspeisung);
        });
        

        Meldung ist: javascript.0 (6481) script.js.common.Netzeinspeisung compile failed: at script.js.common.Netzeinspeisung:51
        Zeile 46 - 50 habe ich auskommentiert, da ich dich Fragen wollte welche Auswirkungen das hat, bzw was da gemacht wird.
        Letzte Frage: Was wird in Zeile 30 gemacht?

        paul53P 1 Reply Last reply
        0
        • H highline

          Danke für deine Unterstützung, leider läuft das Script nicht, kannst du bitte nochmal prüfen:

          //Objekt erstellen
          
          createState('PV_Anlage.Netzeinspeisung',0, {
          
              name: 'PV-Anlage: Netzeinspeisung',
          
              desc: 'Netzeinspeisung = PV-Leistung – Hausverbrauch',
          
              read: true,
          
              write: true,
          
              type: 'number',
          
              unit: 'kWh'
          
          });
          
           
          
          var idPVLeistung = 'modbus.0.holdingRegisters.40068_PV_Leistung',
              idHausverbrauch = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung',
              idNetzleistung = 'modbus.0.holdingRegisters.40074_Netz_Leistung',
              idNetzeinspeisung = 'PV_Anlage.Netzeinspeisung';
                
               
               
          // Berechnung mit aktuellen Daten, wenn Netzleistung <0     
          
          var nNetzeinspeisung = 1;
          
          on({
          
          id: idNetzleistung,
          
          change: 'ne',
          
          }, function (data) {
          
          if (data.state.val < 0 ) {
          
          nNetzeinspeisung = getState(idPVLeistung).val - getState(idHausverbrauch).val;
          
          setState(idNetzeinspeisung, nNetzeinspeisung);
          
          // else if( nNetzeinspeisung != 0) { 
          
          // nNetzeinspeisung = 0;
          
          // setState(idNetzeinspeisung, nNetzeinspeisung);
          });
          

          Meldung ist: javascript.0 (6481) script.js.common.Netzeinspeisung compile failed: at script.js.common.Netzeinspeisung:51
          Zeile 46 - 50 habe ich auskommentiert, da ich dich Fragen wollte welche Auswirkungen das hat, bzw was da gemacht wird.
          Letzte Frage: Was wird in Zeile 30 gemacht?

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

          @highline sagte:

          compile failed

          Es fehlt die schließende geschweifte Klammer in Zeile 45 bzw. 46 für

          if (data.state.val < 0 ) {
          

          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

          1 Reply Last reply
          0
          • T Do not disturb
            T Do not disturb
            ticaki
            wrote on last edited by ticaki
            #5

            @paul53 Danke, sind 2 schließende klammern

            var nNetzeinspeisung = 1;
            on({
                id: idNetzleistung,
                change: 'ne',
            }, function (data) {
              if (data.state.val < 0 ) {
                  nNetzeinspeisung = getState(idPVLeistung).val - getState(idHausverbrauch).val;
                  setState(idNetzeinspeisung, nNetzeinspeisung);
              } else if( nNetzeinspeisung != 0) { 
                nNetzeinspeisung = 0;
                setState(idNetzeinspeisung, nNetzeinspeisung);
              }
            });
            

            In 46-50 wird idNetzeinspeisung auf 0 gesetzt. In deinem vorigen Script war das nie 0.
            In 30 wird dafür gesorgt das beim ersten Durchlauf nach Scriptstart idNetzeinspeisung auf jeden Fall gesetzt wird. Und das die Kontrollvariable global ist und ihren Wert nicht verliert.

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            1 Reply Last reply
            0
            • H Offline
              H Offline
              highline
              wrote on last edited by
              #6

              Das Script läuft nun. Vielen, vielen Dank an euch!!!
              Ich habe noch die Ladung des Speichers bei der Berechnung abgezogen, dann passt auch das Ergebnis.
              Frage: Warum muss ich die idNetzeinspeisung auf 0 setzen bzw. was passiert mit der Berechnung wenn ich das nicht mache?

              //Objekt erstellen
              
              createState('PV_Anlage.Netzeinspeisung',0, {
              
                  name: 'PV-Anlage: Netzeinspeisung',
              
                  desc: 'Netzeinspeisung = PV-Leistung – Hausverbrauch - Akku',
              
                  read: true,
              
                  write: true,
              
                  type: 'number',
              
                  unit: 'W'
              
              });
              
               
              var idPVLeistung = 'modbus.0.holdingRegisters.40068_PV_Leistung',
                  idHausverbrauch = 'modbus.0.holdingRegisters.40072_Hausverbrauch_Leistung',
                  idNetzleistung = 'modbus.0.holdingRegisters.40074_Netz_Leistung',
                  idAkku = 'modbus.0.holdingRegisters.40070_Batterie_Leistung',
                  idNetzeinspeisung = 'PV_Anlage.Netzeinspeisung';
                    
                    
              // Berechnung mit aktuellen Daten, wenn Netzleistung <0     
              
              var nNetzeinspeisung = 1;
              
              on({
              
              id: idNetzleistung,
              
              change: 'ne',
              
              }, function (data) {
              
              if (data.state.val < 0 ) {
              
              nNetzeinspeisung = getState(idPVLeistung).val - getState(idHausverbrauch).val - getState(idAkku).val;
              
              setState(idNetzeinspeisung, nNetzeinspeisung);
              }
              // else if( nNetzeinspeisung != 0) { 
              
              // nNetzeinspeisung = 0;
              
              // setState(idNetzeinspeisung, nNetzeinspeisung);
              });
              
              1 Reply Last reply
              0
              • T Do not disturb
                T Do not disturb
                ticaki
                wrote on last edited by ticaki
                #7

                Ohne dass wird dir immer eine Netzeinspeisung angezeigt, Weil der Wert nie auf null geht. Kann aber auch sein das ich was falsch verstanden habe.

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                1 Reply Last reply
                0
                • H Offline
                  H Offline
                  highline
                  wrote on last edited by
                  #8

                  ich beobachte mal das Verhalten, vielen Dank!

                  T 1 Reply Last reply
                  0
                  • H highline

                    ich beobachte mal das Verhalten, vielen Dank!

                    T Do not disturb
                    T Do not disturb
                    ticaki
                    wrote on last edited by
                    #9

                    @highline
                    In deinem ursprünglichen Script hast du 0 und positive Werte von idNetzleistung ausgeschlossen. Ich bin deshalb davon ausgegangen ,das es dort positive Werte oder 0 gibt. Um idNetzeinspeisung nicht in einem undefinierten Zustand zu haben, setzt meine Script den Wert in dem Fall auf 0 und ignoriert alle weiteren Werte größer gleich 0

                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                    Spenden

                    H 1 Reply Last reply
                    0
                    • T ticaki

                      @highline
                      In deinem ursprünglichen Script hast du 0 und positive Werte von idNetzleistung ausgeschlossen. Ich bin deshalb davon ausgegangen ,das es dort positive Werte oder 0 gibt. Um idNetzeinspeisung nicht in einem undefinierten Zustand zu haben, setzt meine Script den Wert in dem Fall auf 0 und ignoriert alle weiteren Werte größer gleich 0

                      H Offline
                      H Offline
                      highline
                      wrote on last edited by highline
                      #10

                      @ticaki
                      müsste es dann nicht statt: else if( nNetzeinspeisung != 0)
                      so heißen: else if( nNetzeinspeisung >= 0)

                      1 Reply Last reply
                      0
                      • T Do not disturb
                        T Do not disturb
                        ticaki
                        wrote on last edited by
                        #11

                        Nope.

                        if (data.state.val < 0 ) {
                        

                        behandele übergebene Werte unterhalb von 0

                        nNetzeinspeisung = getState(idPVLeistung).val - getState(idHausverbrauch).val - getState(idAkku).val;
                        

                        Setzte die Variable mit dem berechneten Wert

                        } else if( nNetzeinspeisung != 0) {
                        

                        Bedingung 1. war unwahr und der zuletzt gesetzte Wert war nicht 0

                        nNetzeinspeisung = 0;
                        

                        setzte Variable auf 0

                        setState(idNetzeinspeisung, nNetzeinspeisung);
                        

                        setzte State auf Wert der Variable.

                        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                        Spenden

                        1 Reply Last reply
                        0
                        • H Offline
                          H Offline
                          highline
                          wrote on last edited by
                          #12

                          ok danke dir

                          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

                          315

                          Online

                          32.7k

                          Users

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