Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. gelöst: Vorzeichen ändern beim Strombezug Smartmeter

    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

    gelöst: Vorzeichen ändern beim Strombezug Smartmeter

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      txixmxo last edited by 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

      mickym paul53 2 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @txixmxo last edited by mickym

        gelöscht

        1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @txixmxo last edited by 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 1 Reply Last reply Reply Quote 0
          • T
            txixmxo @paul53 last edited by

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

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

              @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 1 Reply Last reply Reply Quote 0
              • T
                txixmxo @paul53 last edited by

                @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();
                });
                
                
                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @txixmxo last edited by 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 1 Reply Last reply Reply Quote 0
                  • T
                    txixmxo @paul53 last edited by

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

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @txixmxo last edited by 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 1 Reply Last reply Reply Quote 0
                      • T
                        txixmxo @paul53 last edited by 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();
                        });
                        
                        
                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @txixmxo last edited by

                          @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 1 Reply Last reply Reply Quote 0
                          • T
                            txixmxo @paul53 last edited by

                            @paul53

                            Das war es 😊 👏 👏

                            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 🕶

                            Grüße
                            Timo

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            817
                            Online

                            31.9k
                            Users

                            80.1k
                            Topics

                            1.3m
                            Posts

                            3
                            12
                            410
                            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