Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
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

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

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

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

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 3 Kommentatoren 795 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H Offline
    H Offline
    highline
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      0
      • T Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
        0
        • H Offline
          H Offline
          highline
          schrieb am zuletzt editiert von
          #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 Antwort Letzte Antwort
          0
          • T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            0
            • H Offline
              H Offline
              highline
              schrieb am zuletzt editiert von
              #8

              ich beobachte mal das Verhalten, vielen Dank!

              T 1 Antwort Letzte Antwort
              0
              • H highline

                ich beobachte mal das Verhalten, vielen Dank!

                T Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von highline
                  #10

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

                  1 Antwort Letzte Antwort
                  0
                  • T Nicht stören
                    T Nicht stören
                    ticaki
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    0
                    • H Offline
                      H Offline
                      highline
                      schrieb am zuletzt editiert von
                      #12

                      ok danke dir

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      482

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe