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. gelöst: Vorzeichen ändern beim Strombezug Smartmeter

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

gelöst: Vorzeichen ändern beim Strombezug Smartmeter

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 3 Kommentatoren 519 Aufrufe 1 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.
  • T txixmxo

    Hallo zusammen,

    ich habe ein Script geschrieben, um mir den Strombezug im Haus anzeigen zu lassen. Das Smartmeter gibt Minus und Pluswerte aus (Minus für Bezug, Plus für Einspeisung), weswegen ich eine Bedingung mit min. 0 eingefügt habe.

    Nun bekomme ich den Wert ausgegeben, wenn ich Strom beziehe, was auch richtig ist. Nur hat der Bezug ein negatives Vorzeichen, welches ich nicht haben möchte.
    Habe schon versucht in Zeile 10 * -1 einzufügen was aber dazu führt, dass ich die Einspeisung angezeigt bekomme.

    Der rot umrandete Wert soll als Pluswert angezeigt werden:

    Unbenannt.png

    const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
    const idBezug = 'javascript.0.Solar.Bezug'; 
     
    var Realpower = getState(idRealPower).val;
    
     
    if(!existsState(idBezug)) createState(idBezug, Realpower, {type: 'number', unit: 'W', min: 0}); 
     
    function summe() {
        setState(idBezug, RealPower, true);
    }
     
    on(idRealPower, function(dp) {
       RealPower = dp.state.val;
       summe();
    });
    
    
    

    Vielen Dank schonmal !!

    Viele Grüße
    Timo

    paul53P Offline
    paul53P Offline
    paul53
    schrieb am zuletzt editiert von paul53
    #3

    @txixmxo
    Zeile 14:

       RealPower = -dp.state.val;
    

    und Zeile 4:

    var Realpower = -getState(idRealPower).val;
    

    Oder enthält "javascript.0.Solar.Wechselrichter.ACTotalRealPower" einen negativen Wert bei Bezug und einen positiven Wert bei Einspeisung? Dann muss man testen.

    function summe() {
        let bezug = 0;
        let einspeisung = RealPower;
        if(RealPower < 0) {
            bezug = -RealPower;
            einspeisung = 0;
        } 
        setState(idBezug, bezug, true);
        setState(idEinspeisung, einspeisung, true);
    }
    

    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

    T 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @txixmxo
      Zeile 14:

         RealPower = -dp.state.val;
      

      und Zeile 4:

      var Realpower = -getState(idRealPower).val;
      

      Oder enthält "javascript.0.Solar.Wechselrichter.ACTotalRealPower" einen negativen Wert bei Bezug und einen positiven Wert bei Einspeisung? Dann muss man testen.

      function summe() {
          let bezug = 0;
          let einspeisung = RealPower;
          if(RealPower < 0) {
              bezug = -RealPower;
              einspeisung = 0;
          } 
          setState(idBezug, bezug, true);
          setState(idEinspeisung, einspeisung, true);
      }
      
      T Offline
      T Offline
      txixmxo
      schrieb am zuletzt editiert von
      #4

      @paul53 said in Vorzeichen ändern beim Strombezug Smartmeter:

      Oder enthält "javascript.0.Solar.Wechselrichter.ACTotalRealPower" einen negativen Wert bei Bezug und einen positiven Wert bei Einspeisung? Dann muss man testen.

      Genauso ist es ... das obere Funktionier leider nicht ...

      beim unteren habe ich die Funktion in Zeile 9-11 ersetzt ... Richtig?

      Aber da zeigt er mir auch nur den negativen Wert an ...

      paul53P 1 Antwort Letzte Antwort
      0
      • T txixmxo

        @paul53 said in Vorzeichen ändern beim Strombezug Smartmeter:

        Oder enthält "javascript.0.Solar.Wechselrichter.ACTotalRealPower" einen negativen Wert bei Bezug und einen positiven Wert bei Einspeisung? Dann muss man testen.

        Genauso ist es ... das obere Funktionier leider nicht ...

        beim unteren habe ich die Funktion in Zeile 9-11 ersetzt ... Richtig?

        Aber da zeigt er mir auch nur den negativen Wert an ...

        paul53P Offline
        paul53P Offline
        paul53
        schrieb am zuletzt editiert von
        #5

        @txixmxo sagte: beim unteren habe ich die Funktion in Zeile 9-11 ersetzt ... Richtig?

        Richtig, und idEinspeisung oben deklarieren und ID zuweisen.

        @txixmxo sagte in Vorzeichen ändern beim Strombezug Smartmeter:

        Aber da zeigt er mir auch nur den negativen Wert an

        Logge mal die beiden Variablen bezug und einspeisung.

        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

        T 1 Antwort Letzte Antwort
        0
        • paul53P paul53

          @txixmxo sagte: beim unteren habe ich die Funktion in Zeile 9-11 ersetzt ... Richtig?

          Richtig, und idEinspeisung oben deklarieren und ID zuweisen.

          @txixmxo sagte in Vorzeichen ändern beim Strombezug Smartmeter:

          Aber da zeigt er mir auch nur den negativen Wert an

          Logge mal die beiden Variablen bezug und einspeisung.

          T Offline
          T Offline
          txixmxo
          schrieb am zuletzt editiert von
          #6

          @paul53 said in Vorzeichen ändern beim Strombezug Smartmeter:

          Logge mal die beiden Variablen bezug und einspeisung.

          Sorry für die dumme Frage .... aber wie mache ich das mit dem loggen? Bin leider absoluter Anfänger in ioBroker und JavaScipt

          Bezug und Einspeisung sind ja zusammen eine Variable. Nur durch Vorzeichen zu unterscheiden welcher welches ist.
          Den Wert, der direkt aus dem Wechselrichter kommt über Modbus musste ich schon aufgrund einer Faktorvariable und falscher Kommastelle als Scipt anders ausgeben. Da gab es aber zum Glück ein Beispiel wo ich mich orientieren konnte.

          Bei der Einspeisung klappt es super. Dort habe ich dieses Scipt:

          const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
          const idEinspeisung = 'javascript.0.Solar.Einspeisung'; 
           
          var Realpower = getState(idRealPower).val;
          
           
          if(!existsState(idEinspeisung)) createState(idEinspeisung, Realpower, {type: 'number', unit: 'W', min: 0}); 
           
          function summe() {
              setState(idEinspeisung, RealPower , true);
          }
           
          on(idRealPower, function(dp) {
             RealPower = dp.state.val;
             summe();
          });
          
          
          paul53P 1 Antwort Letzte Antwort
          0
          • T txixmxo

            @paul53 said in Vorzeichen ändern beim Strombezug Smartmeter:

            Logge mal die beiden Variablen bezug und einspeisung.

            Sorry für die dumme Frage .... aber wie mache ich das mit dem loggen? Bin leider absoluter Anfänger in ioBroker und JavaScipt

            Bezug und Einspeisung sind ja zusammen eine Variable. Nur durch Vorzeichen zu unterscheiden welcher welches ist.
            Den Wert, der direkt aus dem Wechselrichter kommt über Modbus musste ich schon aufgrund einer Faktorvariable und falscher Kommastelle als Scipt anders ausgeben. Da gab es aber zum Glück ein Beispiel wo ich mich orientieren konnte.

            Bei der Einspeisung klappt es super. Dort habe ich dieses Scipt:

            const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
            const idEinspeisung = 'javascript.0.Solar.Einspeisung'; 
             
            var Realpower = getState(idRealPower).val;
            
             
            if(!existsState(idEinspeisung)) createState(idEinspeisung, Realpower, {type: 'number', unit: 'W', min: 0}); 
             
            function summe() {
                setState(idEinspeisung, RealPower , true);
            }
             
            on(idRealPower, function(dp) {
               RealPower = dp.state.val;
               summe();
            });
            
            
            paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von paul53
            #7

            @txixmxo sagte: Bei der Einspeisung klappt es super. Dort habe ich dieses Scipt:

            Bitte für Bezug und Einspeisung nur ein Skript verwenden (Ressourcen).

            const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
            const idEinspeisung = 'javascript.0.Solar.Einspeisung'; 
            const idBezug = 'javascript.0.Solar.Bezug'; 
             
            var RealPower = getState(idRealPower).val;
            
            if(!existsState(idEinspeisung)) createState(idEinspeisung, RealPower, {type: 'number', unit: 'W', min: 0}); 
            if(!existsState(idBezug)) createState(idBezug, -RealPower, {type: 'number', unit: 'W', min: 0}); 
             
            function summe() {
                let bezug = 0;
                let einspeisung = RealPower;
                if(RealPower < 0) {
                    bezug = -RealPower;
                    einspeisung = 0;
                } 
                setState(idBezug, bezug, true);
                setState(idEinspeisung, einspeisung, true);
                log('Einspeisung(W): ' + einspeisung);
                log('Bezug(W): ' + bezug);
            }
             
            on(idRealPower, function(dp) {
               RealPower = dp.state.val;
               summe();
            });
            

            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

            T 1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @txixmxo sagte: Bei der Einspeisung klappt es super. Dort habe ich dieses Scipt:

              Bitte für Bezug und Einspeisung nur ein Skript verwenden (Ressourcen).

              const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
              const idEinspeisung = 'javascript.0.Solar.Einspeisung'; 
              const idBezug = 'javascript.0.Solar.Bezug'; 
               
              var RealPower = getState(idRealPower).val;
              
              if(!existsState(idEinspeisung)) createState(idEinspeisung, RealPower, {type: 'number', unit: 'W', min: 0}); 
              if(!existsState(idBezug)) createState(idBezug, -RealPower, {type: 'number', unit: 'W', min: 0}); 
               
              function summe() {
                  let bezug = 0;
                  let einspeisung = RealPower;
                  if(RealPower < 0) {
                      bezug = -RealPower;
                      einspeisung = 0;
                  } 
                  setState(idBezug, bezug, true);
                  setState(idEinspeisung, einspeisung, true);
                  log('Einspeisung(W): ' + einspeisung);
                  log('Bezug(W): ' + bezug);
              }
               
              on(idRealPower, function(dp) {
                 RealPower = dp.state.val;
                 summe();
              });
              
              T Offline
              T Offline
              txixmxo
              schrieb am zuletzt editiert von
              #8

              @paul53

              Bei deinem zusammengeführten Skipt funktioniert die Einspeisung, aber der Bezug bleibt auf 0, egal was ich ändere.
              Woran könnte das noch liegen?

              Grüße und vielen Dank!!

              paul53P 1 Antwort Letzte Antwort
              0
              • T txixmxo

                @paul53

                Bei deinem zusammengeführten Skipt funktioniert die Einspeisung, aber der Bezug bleibt auf 0, egal was ich ändere.
                Woran könnte das noch liegen?

                Grüße und vielen Dank!!

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #9

                @txixmxo sagte: Woran könnte das noch liegen?

                common.min, common.max?

                EDIT: Gerade gesehen: Es gibt die Variablen Realpower und RealPower! Bitte korrigieren.

                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

                T 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @txixmxo sagte: Woran könnte das noch liegen?

                  common.min, common.max?

                  EDIT: Gerade gesehen: Es gibt die Variablen Realpower und RealPower! Bitte korrigieren.

                  T Offline
                  T Offline
                  txixmxo
                  schrieb am zuletzt editiert von txixmxo
                  #10

                  @paul53

                  Die Einspeisung wird jetzt richtig ausgegeben.

                  Der Bezug steht jedoch weiter auf 0 trotz Bezug . Jedoch sehe ich unten im Skriptlog, dass der richtige Wert ausgegeben wird. Woran kann das liegen, das dieser nicht angezeigt wird?

                  (Die Werte zum Screenshot unterscheiden sich, da die Werte sich nach Einstrahlung und Verbrauch ändern ... also nicht wundern.

                  Hier der Auszug: (Und genau diese ca. 750W werden in der Anzeige Bezug nicht ausgegeben.

                  09:37:15.873 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 0
                  09:37:15.873 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 755
                  09:37:16.503 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 0
                  09:37:16.504 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 750

                  Bez.png

                  Bei Einspeisung jedoch schon hier nur zum Vergleich.

                  09:42:01.144 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0
                  09:42:02.253 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 1185
                  09:42:02.254 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0
                  09:42:03.403 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 1214
                  09:42:03.403 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0:

                  Ein.png

                  Viele Grüße
                  Timo

                  EDIT: hier noch einmal das aktuell verwendete Skript:

                  const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
                  const idEinspeisung = 'javascript.0.Solar.Einspeisung'; 
                  const idBezug = 'javascript.0.Solar.Bezug'; 
                   
                  var RealPower = getState(idRealPower).val;
                   
                  if(!existsState(idEinspeisung)) createState(idEinspeisung, RealPower, {type: 'number', unit: 'W', min: 0}); 
                  if(!existsState(idBezug)) createState(idBezug, RealPower, {type: 'number', unit: 'W', min:0}); 
                   
                  function summe() {
                      let Bezug = 0;
                      let Einspeisung = RealPower;
                      if(RealPower < 0) {
                          Bezug = -RealPower;
                          Einspeisung = 0;
                      } 
                      setState(idBezug, Bezug, true);
                      setState(idEinspeisung, Einspeisung, true);
                      log('Einspeisung(W): ' + Einspeisung);
                      log('Bezug(W): ' + Bezug);
                  }
                   
                  on(idRealPower, function(dp) {
                     RealPower = dp.state.val;
                     summe();
                  });
                  
                  
                  paul53P 1 Antwort Letzte Antwort
                  0
                  • T txixmxo

                    @paul53

                    Die Einspeisung wird jetzt richtig ausgegeben.

                    Der Bezug steht jedoch weiter auf 0 trotz Bezug . Jedoch sehe ich unten im Skriptlog, dass der richtige Wert ausgegeben wird. Woran kann das liegen, das dieser nicht angezeigt wird?

                    (Die Werte zum Screenshot unterscheiden sich, da die Werte sich nach Einstrahlung und Verbrauch ändern ... also nicht wundern.

                    Hier der Auszug: (Und genau diese ca. 750W werden in der Anzeige Bezug nicht ausgegeben.

                    09:37:15.873 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 0
                    09:37:15.873 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 755
                    09:37:16.503 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 0
                    09:37:16.504 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 750

                    Bez.png

                    Bei Einspeisung jedoch schon hier nur zum Vergleich.

                    09:42:01.144 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0
                    09:42:02.253 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 1185
                    09:42:02.254 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0
                    09:42:03.403 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Einspeisung(W): 1214
                    09:42:03.403 info javascript.0 (17575) script.js.common.PV_Hausverbrauch_Berechnungen.Bezug_Einspeisung: Bezug(W): 0:

                    Ein.png

                    Viele Grüße
                    Timo

                    EDIT: hier noch einmal das aktuell verwendete Skript:

                    const idRealPower = 'javascript.0.Solar.Wechselrichter.ACTotalRealPower';
                    const idEinspeisung = 'javascript.0.Solar.Einspeisung'; 
                    const idBezug = 'javascript.0.Solar.Bezug'; 
                     
                    var RealPower = getState(idRealPower).val;
                     
                    if(!existsState(idEinspeisung)) createState(idEinspeisung, RealPower, {type: 'number', unit: 'W', min: 0}); 
                    if(!existsState(idBezug)) createState(idBezug, RealPower, {type: 'number', unit: 'W', min:0}); 
                     
                    function summe() {
                        let Bezug = 0;
                        let Einspeisung = RealPower;
                        if(RealPower < 0) {
                            Bezug = -RealPower;
                            Einspeisung = 0;
                        } 
                        setState(idBezug, Bezug, true);
                        setState(idEinspeisung, Einspeisung, true);
                        log('Einspeisung(W): ' + Einspeisung);
                        log('Bezug(W): ' + Bezug);
                    }
                     
                    on(idRealPower, function(dp) {
                       RealPower = dp.state.val;
                       summe();
                    });
                    
                    
                    paul53P Offline
                    paul53P Offline
                    paul53
                    schrieb am zuletzt editiert von
                    #11

                    @txixmxo sagte: unten im Skriptlog, dass der richtige Wert ausgegeben wird. Woran kann das liegen, das dieser nicht angezeigt wird?

                    "javascript.0.Solar.Bezug": common.max = 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

                    T 1 Antwort Letzte Antwort
                    0
                    • paul53P paul53

                      @txixmxo sagte: unten im Skriptlog, dass der richtige Wert ausgegeben wird. Woran kann das liegen, das dieser nicht angezeigt wird?

                      "javascript.0.Solar.Bezug": common.max = 0?

                      T Offline
                      T Offline
                      txixmxo
                      schrieb am zuletzt editiert von
                      #12

                      @paul53

                      Das war es :blush: :clap: :clap:

                      Hab den Wert jetzt auf 99999 gesetzt ... müsste reichen ;)

                      Comon.png

                      Vielen vielen Dank noch einmal !!! Die Einstellung kannte ich auch noch gar nicht :dark_sunglasses:

                      Grüße
                      Timo

                      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

                      411

                      Online

                      32.6k

                      Benutzer

                      82.2k

                      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