Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Shelly pro3EM Verbrauch und Einspeisung Script geht nicht

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Shelly pro3EM Verbrauch und Einspeisung Script geht nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      BenjaminCz last edited by

      Hallo,
      ich habe das Script hier https://github.com/sicanins/shelly-pro3EM-energycounter am Laufen und habe in IOBRoker den Shelly Adapter und einmal den Mqtt adapter. Wenn ich den Mqqt adapter aktiveren bekomme ich auch die Werte:

      3293e7ec-0d5f-4fcb-b530-2170a3716bc8-grafik.png

      Wenn ich den Shelly Adapter Aktiviere bekomme ich die werte leider nicht bzw. die 2 Datenpunkte tauchen nicht auf.

      bd14738d-2cc4-4a1b-a153-1669c9f4de20-grafik.png

      Weiß einer wie ich die 2 Datenpunkte in den Shelly Adapter bekomme ? Ich möchte einfach nur verbraucht und einspeisung sehen und auswerten. Evtl. hat einer eine andere lösung.

      Hier nochmal das Script im Shelly Pro3EM:

      let energyReturnedWs = 0.0;
      let energyConsumedWs = 0.0;
      
      let energyReturnedKWh = 0.0;
      let energyConsumedKWh = 0.0;
      
      let log = 1;
      
      // set this to false to stop publishing on MQTT
      let MQTTpublish = true;
      
      // set this to false if you DONT want to update the name
      // (the updated name is necessary to read the data with the iobroker shelly plugin)
      let updateName = false;
      
      // query the MQTT prefix on startup
      let SHELLY_ID = undefined;
      Shelly.call("Mqtt.GetConfig", "", function (res, err_code, err_msg, ud) {
        SHELLY_ID = res["topic_prefix"];
      });
      
      function SetKVS(key, value)
      {
       Shelly.call(
         "KVS.Set", {
           "key": key,
           "value": value,
         },
         function(result) {
           if (log > 0)
             print("KVS Saved, rev:", result.rev);
         }
       );
      }
       
      function SaveCounters()
      {
        SetKVS("EnergyConsumedKWh", energyConsumedKWh );
        SetKVS("EnergyReturnedKWh", energyReturnedKWh );
      }
           
      Shelly.call(
         "KVS.Get", {
           "key": "EnergyReturnedKWh",
         },
        function callback(result, error_code, error_message, userdata) {
           if (error_code === 0) 
           {
             energyReturnedKWh = Number(result.value);
             print("Loaded returned energy: ", energyReturnedKWh, " KWh");
           }       
         }
       );
       
       Shelly.call(
         "KVS.Get", {
           "key": "EnergyConsumedKWh",
         },
        function callback(result, error_code, error_message, userdata) {
           if (error_code === 0) 
           {
             energyConsumedKWh = Number(result.value);
             print("Loaded consumed energy: ", energyConsumedKWh, " KWh");
           }       
         }
       );
      
      let counter3600 = 0;
      let counter20 = 18;
      
      let lastPublishedMQTTConsumed = "";
      let lastPublishedMQTTReturned = "";
      
      function timerHandler(user_data)
      {
        let em = Shelly.getComponentStatus("em", 0);
        if (typeof em.total_act_power !== 'undefined') {
          let power = em.total_act_power;
          
          if (power >= 0)
          {
              energyConsumedWs = energyConsumedWs + power * 0.5;
          }
          else
          {
              energyReturnedWs = energyReturnedWs - power * 0.5;
          }
          
          // once a full Wh is accumulated, move it to the KWh counter
          let fullWh = Math.floor((energyConsumedWs / 3600));
          if (fullWh > 0)
          {
            energyConsumedKWh += fullWh / 1000;
            energyConsumedWs -= fullWh * 3600;
            if (log > 0)
              print("Changed consumed KWh: ",energyConsumedKWh);
          }
          
          fullWh = Math.floor((energyReturnedWs / 3600));
          if (fullWh > 0)
          {
            energyReturnedKWh += fullWh / 1000;
            energyReturnedWs -= fullWh * 3600;
            if (log > 0)
              print("Changed returned KWh: ",energyReturnedKWh);
          }
          
          if (log > 0)
            print(power , "W");
            
          counter3600 = counter3600 + 1;
          if (counter3600 > 3600)      
          {
            counter3600 = 0;     
            SaveCounters();
          }
          
          counter20 = counter20 + 1;
          if ( counter20 > 20)
          {
            counter20 = 0;  
            if (updateName)
            {
              Shelly.call(
                "Sys.SetConfig", {
                   config: {device:{name:energyConsumedKWh.toFixed(3)+" KWh ; "+(energyReturnedKWh+energyReturnedWs / 3600000).toFixed(5)+" KWh"}},
                },
                function(result, error_code, error_message, userdata) {
                   //print("error ", error_code, " : ", error_message);
                   //print("result", JSON.stringify(result));
                }
              );
            }
                   
            if (typeof SHELLY_ID !== "undefined" && MQTTpublish === true) 
            {         
              let value = energyConsumedKWh.toFixed(3);
              if (value !== lastPublishedMQTTConsumed)
              {
                MQTT.publish(
                  SHELLY_ID + "/mqtt/consumed",
                  value,
                  0,
                  false
                );
                lastPublishedMQTTConsumed = value;
              }
              
              let value = energyReturnedKWh.toFixed(3);
              if (value !== lastPublishedMQTTReturned)
              {
                MQTT.publish(
                  SHELLY_ID + "/mqtt/returned",
                  value,
                  0,
                  false
                );
                lastPublishedMQTTReturned = value;
              }           
            }
          }
        };
      }
      
      Timer.set(500, true, timerHandler, null);
      
      function httpServerHandler(request, response) {
          response.code = 200;
      
          // create JSON object 
          const energyData = {
              energyConsumed: energyConsumedKWh.toFixed(3) + " KWh",
              energyReturned: (energyReturnedKWh+(energyReturnedWs / 3600000)).toFixed(5) + " KWh"
          };
      
          // convert JSON object to string and send it as reply
          response.body = JSON.stringify(energyData);
          response.send();
          return;
      }
      HTTPServer.registerEndpoint("energy_counter", httpServerHandler);
      
      mcm1957 1 Reply Last reply Reply Quote 0
      • mcm1957
        mcm1957 @BenjaminCz last edited by mcm1957

        @benjamincz
        Hast vielleicht nicht die aktuelle Release laufen. Mangels Infos kann man da nicht mehr sagen.
        Aber soweit ich das sehe sind alle States vorhanden. Welche States gehen dir denn ab?

        B 1 Reply Last reply Reply Quote 0
        • B
          BenjaminCz @mcm1957 last edited by

          @mcm1957 Hi. Adapter hat die Version v9.2.0. Es funktioniert auch alles. Nur habe ich ein Balkokraftwerk und brauche verbrauch und einspeisung. Daher habe ich das oben genannte script gefunden und im Shelly Pro 3EM unter Scripts eingefügt und am Laufen. Wenn ich in IOBroker den MQTT adapter laufen lasse dann tauchen auch die Datenpunkte auf. Wenn ich dann den MQTT Deaktiviere und wieder den Shelly Adapter Aktiviere fehlen mir in dem Adapter dann die 2 Datenpunkte (Verbrauch und Einspeisung). Ich glaube der Shelly Adapter hat nur vordefinierte werte sodass mein Shelly Pro 3EM zwar diese datenpunkte sendet aber der Adapter damit nichts anfangen kann ?
          Oder hast du eine andere lösung gefunden ? Das Skript ließt alle 500ms den Total Energie wert und unterscheidet zwischen negativ und positiv (Einspeisung, Verbrauch) und legt die datenpunkte dann ab.

          Vielen lieben Dank!

          Samson71 mcm1957 2 Replies Last reply Reply Quote 0
          • Samson71
            Samson71 Global Moderator @BenjaminCz last edited by

            @benjamincz sagte in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

            Adapter hat die Version v9.2.0.

            Aktuell ist die 9.5.1

            @benjamincz sagte in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

            brauche verbrauch und einspeisung.

            Ich habe nur 2x den 3EM (kein Pro), aber im Shelly Adapter bei den Datenpunkten habe ich einen Unterordner Total u.a. mit Datenpunkten für ConsumedPower und Total_Returned.

            653cdfc5-17f6-4b40-9de6-4faa50087617-image.png

            1 Reply Last reply Reply Quote 0
            • mcm1957
              mcm1957 @BenjaminCz last edited by

              @benjamincz said in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

              @mcm1957 Hi. Adapter hat die Version v9.2.0. Es funktioniert auch alles. Nur habe ich ein Balkokraftwerk und brauche verbrauch und einspeisung. Daher habe ich das oben genannte script gefunden und im Shelly Pro 3EM unter Scripts eingefügt und am Laufen. Wenn ich in IOBroker den MQTT adapter laufen lasse dann tauchen auch die Datenpunkte auf. Wenn ich dann den MQTT Deaktiviere und wieder den Shelly Adapter Aktiviere fehlen mir in dem Adapter dann die 2 Datenpunkte (Verbrauch und Einspeisung). Ich glaube der Shelly Adapter hat nur vordefinierte werte sodass mein Shelly Pro 3EM zwar diese datenpunkte sendet aber der Adapter damit nichts anfangen kann ?
              Oder hast du eine andere lösung gefunden ? Das Skript ließt alle 500ms den Total Energie wert und unterscheidet zwischen negativ und positiv (Einspeisung, Verbrauch) und legt die datenpunkte dann ab.

              Vielen lieben Dank!

              Der Shelly Adapter unterstützt prinzipiell nur jene Daten die nativ von Shelly angeboten werden. Daten die irgendwelche Scripts am Shelly erzeugen können vom Shelly Adapter nicht empfangen / verarbeitet werden.

              Allerdings sollte der Shelly Pro3EM Verbrauch und Einspeisung sehr wohl anzeigen - ganz ohne Scripts am Shelly. Installier mal die aktuelle Version des Adapters.

              5feeee50-10e2-437c-b451-8b74ddb40037-image.png

              mcm1957 1 Reply Last reply Reply Quote 0
              • mcm1957
                mcm1957 @mcm1957 last edited by

                @mcm1957 said in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

                Grad gesehen, dass du sie States TotalActiveEnergy und TotalActiveEnergyReturned in deinem Screenshot eh hast. Diese stellen ja den Verbrauch und die Einspeisung dar ...

                B 1 Reply Last reply Reply Quote 0
                • B
                  BenjaminCz @mcm1957 last edited by

                  @mcm1957 Okay. Also danke erstmal habe den Adapter Aktualisiert. Und ja die Datenpunkte sind drinen. Also kann ich getrost die Datenpunkte verlässlich abgreifen ist der Pro 3EM Saldierend ? Und noch eine frage ich habe auch Shelly Plugs. An einem Hängt ein Anker Speicher. Da möchte ich gerne sehen wann der Akku Zugeladen wird und wann ins Hausnetz Eingespeist wird. Dort gibt es auch den Datenpunkt Energie. Zählt dieser Vorwärts/Rückwärts weis das einer oder Zählt er immer nach vorne egal ob eingespeist oder verbrauch ?

                  B mcm1957 2 Replies Last reply Reply Quote 0
                  • B
                    BenjaminCz @BenjaminCz last edited by BenjaminCz

                    @benjamincz sagte in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

                    @mcm1957 Okay. Also danke erstmal habe den Adapter Aktualisiert. Und ja die Datenpunkte sind drinen. Also kann ich getrost die Datenpunkte verlässlich abgreifen ist der Pro 3EM Saldierend ? Und noch eine frage ich habe auch Shelly Plugs. An einem Hängt ein Anker Speicher. Da möchte ich gerne sehen wann der Akku Zugeladen wird und wann ins Hausnetz Eingespeist wird. Dort gibt es auch den Datenpunkt Energie. Zählt dieser Vorwärts/Rückwärts weis das einer oder Zählt er immer nach vorne egal ob eingespeist oder verbrauch ?

                    Nachtrag:
                    Gerade gesehen das es auch Returned Energy gibt aber immer beide Werte geschrieben werden also Returned Energy und Energy. Gibt es da eine möglichkeit dass aufzutrennen also auch verbrauch und einspeisung

                    f50bf67a-ecbb-49bb-aa6c-1c3efd63167b-grafik.png

                    mcm1957 1 Reply Last reply Reply Quote 0
                    • mcm1957
                      mcm1957 @BenjaminCz last edited by

                      @benjamincz said in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

                      ist der Pro 3EM Saldierend ?

                      Nach meinem Kenntnisstand ja. Zumindest regelt er via Hoymiles Akku die Nulleinspeisung 1a (gegen EVU Zähler gescheckt).

                      Und noch eine frage ich habe auch Shelly Plugs.

                      Da bin ich im Moment überfragt. Ich glaube aber, dass alle Plus die Richtung des Stromflusses NICHT ermitteln.

                      1 Reply Last reply Reply Quote 0
                      • mcm1957
                        mcm1957 @BenjaminCz last edited by

                        @benjamincz

                        Dieses ist das von Shelly implementierte verhalten der Counter;

                        Zitat:
                        https://shelly-api-docs.shelly.cloud/gen2/ComponentsAndServices/Switch
                        ret_aenergy - the active energy added to this container is also added to aenergy container. All the consumed energy is collected in aenergy regardless of the direction(consumed or returned) of the active energy.

                        Bitte bei Bedarf selbst die Differenz berechnen. Das Adapter zeigt immer jene Werte die der Shelly liefert.

                        B 1 Reply Last reply Reply Quote 0
                        • B
                          BenjaminCz @mcm1957 last edited by BenjaminCz

                          @mcm1957 Okay betrifft aber nicht den Shelly Pro EM3 da kann ich die werte direkt abgreifen. Und bei den Anderen muss ich die werte selbst ausrechnen Richtig ? Gibt es da ein Script weil der Shelly Adapter holt ja nicht z.b alle 500 ms die Werte wie kann man das dann so umsetzen dass es ziemlich genau wird ? Gibt es da eine vorlage bzw. ein Blockly dafür ? Vielen Dank!

                          mcm1957 1 Reply Last reply Reply Quote 0
                          • mcm1957
                            mcm1957 @BenjaminCz last edited by

                            @benjamincz
                            Kenn kein Script dazu. Das sagt aber nix.

                            Wie http / rpc kannst jeden Shelly (gen2+) auch selbst abfragen. Aber der Shelly schickt die Daten ja eh via mqtt. Da holt der Adapter nix ab sondern verwendet die Daten sobald sie der Shelly published.

                            Und was meinst du mit ziemlich genau? Die Energiewerte sind gkeich genau ob du sie alle ms oder alle Stunden anschaust.

                            B 1 Reply Last reply Reply Quote 0
                            • B
                              BenjaminCz @mcm1957 last edited by

                              @mcm1957 Okay. Es ist verzwickt. Ich brauche nur Bezug aus dem Netz Tagesverbrauch gesamt und Generiert (PV-Anlage). Das Ganze will ich an Sourceanalystics weiter geben und von dort aus an InfluxDB und dann Grafana. Letztere 2 sind kein Problem. Nochmal zum verständniss:

                              Shelly Pro3EM
                              "TotalActiveEnergy" Den Datenpunkt wollte ich für den Tagesverbrauch verwenden. Ist hier schon der Generierte Strom PV Anlage abgezogen oder wird hier auch weiter Hoch Gezählt egal ob positiv oder negativ ? Geht nur darum wie ich es dann ausrechnen muss für Tagesverbrauch und Bezug aus dem Netz.

                              "TotalActiveReturnEnergy" Den Datenpunkt verwende ich für Generierten Strom für einen Tag. Das ist ja nur der Erzeuge Strom Richtig ?

                              mcm1957 1 Reply Last reply Reply Quote 0
                              • mcm1957
                                mcm1957 @BenjaminCz last edited by

                                @benjamincz said in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

                                @mcm1957 Okay. Es ist verzwickt. Ich brauche nur Bezug aus dem Netz Tagesverbrauch gesamt und Generiert (PV-Anlage). Das Ganze will ich an Sourceanalystics weiter geben und von dort aus an InfluxDB und dann Grafana. Letztere 2 sind kein Problem. Nochmal zum verständniss:

                                Shelly Pro3EM
                                "TotalActiveEnergy" Den Datenpunkt wollte ich für den Tagesverbrauch verwenden. Ist hier schon der Generierte Strom PV Anlage abgezogen oder wird hier auch weiter Hoch Gezählt egal ob positiv oder negativ ? Geht nur darum wie ich es dann ausrechnen muss für Tagesverbrauch und Bezug aus dem Netz.

                                "TotalActiveReturnEnergy" Den Datenpunkt verwende ich für Generierten Strom für einen Tag. Das ist ja nur der Erzeuge Strom Richtig ?

                                Bitte schau dazu in die Shelly Dokumentation. Ich kann auch nur dort nachsehen oder es testen.

                                B 1 Reply Last reply Reply Quote 0
                                • B
                                  BenjaminCz @mcm1957 last edited by

                                  @mcm1957 Okay danke. ChatGTP sagt:
                                  Bei Shelly-Geräten (wie z. B. Shelly Plug, Shelly EM, Shelly Pro usw.) gilt im Allgemeinen:

                                  TotalActiveEnergy (oder je nach Modell auch total_act_energy, total_power, energy etc.) bezeichnet die Gesamtmenge der bezogenen (importierten) Energie in Wattstunden (Wh oder kWh).
                                  
                                  TotalActiveReturnEnergy bezeichnet die insgesamt ins Netz zurückgespeiste (exportierte) Energie.
                                  

                                  Wird TotalActiveReturnEnergy zu TotalActiveEnergy dazugezählt?

                                  Nein. Diese beiden Werte werden separat gezählt und nicht zusammengefasst.

                                  TotalActiveEnergy → Energie, die vom Netz bezogen wurde.
                                  
                                  TotalActiveReturnEnergy → Energie, die ins Netz eingespeist wurde.
                                  

                                  Das heißt, wenn du wissen willst, wie viel Energie tatsächlich verbraucht wurde, musst du ggf. den Saldo selbst berechnen:

                                  Nettoverbrauch = TotalActiveEnergy - TotalActiveReturnEnergy

                                  Hinweis: Manche Shelly-Geräte (wie Shelly EM) haben pro Kanal getrennte Messungen für power, energy, returned_energy usw., je nach Konfiguration und Firmware-Version.
                                  

                                  Wenn du mir dein konkretes Modell nennst, kann ich dir eine genauere Antwort geben.

                                  B 1 Reply Last reply Reply Quote 0
                                  • B
                                    BenjaminCz @BenjaminCz last edited by

                                    @benjamincz sagte in Shelly pro3EM Verbrauch und Einspeisung Script geht nicht:

                                    @mcm1957 Okay danke. ChatGTP sagt:
                                    Bei Shelly-Geräten (wie z. B. Shelly Plug, Shelly EM, Shelly Pro usw.) gilt im Allgemeinen:

                                    TotalActiveEnergy (oder je nach Modell auch total_act_energy, total_power, energy etc.) bezeichnet die Gesamtmenge der bezogenen (importierten) Energie in Wattstunden (Wh oder kWh).
                                    
                                    TotalActiveReturnEnergy bezeichnet die insgesamt ins Netz zurückgespeiste (exportierte) Energie.
                                    

                                    Wird TotalActiveReturnEnergy zu TotalActiveEnergy dazugezählt?

                                    Nein. Diese beiden Werte werden separat gezählt und nicht zusammengefasst.

                                    TotalActiveEnergy → Energie, die vom Netz bezogen wurde.
                                    
                                    TotalActiveReturnEnergy → Energie, die ins Netz eingespeist wurde.
                                    

                                    Das heißt, wenn du wissen willst, wie viel Energie tatsächlich verbraucht wurde, musst du ggf. den Saldo selbst berechnen:

                                    Nettoverbrauch = TotalActiveEnergy - TotalActiveReturnEnergy

                                    Hinweis: Manche Shelly-Geräte (wie Shelly EM) haben pro Kanal getrennte Messungen für power, energy, returned_energy usw., je nach Konfiguration und Firmware-Version.
                                    

                                    Wenn du mir dein konkretes Modell nennst, kann ich dir eine genauere Antwort geben.

                                    Heist will ich Messen wieviel die PV Anlage generiert muss ich das über den Plug Machen. Danke das reicht mir erstmal. Schönes Wochenende!

                                    B 1 Reply Last reply Reply Quote 0
                                    • B
                                      BenjaminCz @BenjaminCz last edited by BenjaminCz

                                      Hallo nochmal. Also ich habe das heute Probiert aber scheinbar ist der Shelly nicht Saldierend. Ich Produziere nur -417 W und beziehe aber ca. 673 W (die 417 W sind schon angezogen) und trotzdem zählt der Pro3EM TotalActiveReturnEnergy weiter hoch obwohl ich gar nicht ins Netz Einspeise sondern Strom beziehe.

                                      Genau so ist es bei TotalActiveEnergy. Dort Zählt er phase A und phase C ( phase B bleibt gleich weil hier das Balkonkraftwerk dran hängt). Also ist TotalActiveEnergy die Energie Menge wo ich beziehe abzüglich Balkonkraftwerk (Phase B).

                                      Ich finde leider auch in der Doku nichts aussagekräftiges genau so wenig im Forum. Hat keine eine Verlässliches Script oder Blockly wo man das vernünftig darstellen kann ?
                                      ChatGPT sagt:

                                      TotalActiveEnergy → Energie, die vom Netz bezogen wurde.
                                      TotalActiveReturnEnergy → Energie, die ins Netz eingespeist wurde.

                                      Das ist ja aber falsch. Wenn ich doch mehr Strom Brauche als ich Erzeuge darf doch TotalActive ReturnEnergy doch nicht weiter hochzählen...

                                      9668fb9c-92be-43e8-b5fc-faecd0e074e3-grafik.png

                                      1834719f-667d-45d9-b45b-8d4992af1a5d-grafik.png

                                      T 1 Reply Last reply Reply Quote 0
                                      • T
                                        ticaki Developer @BenjaminCz last edited by ticaki

                                        @benjamincz

                                        Ich vermute mal:
                                        Wenn du auf Phase 1 mehr erzeugst als du auf Phase 1 verbrauchst, speist du ein. Ist doch das gleiche wenn du einen 3000W Heißstab mit Zyklensteuerung auf 300W runterregelst - dann verbrauchst du 5 von 50hz 3kw und den rest 0. was bei einer Einspeisung von 1000 Watt auf der Phase dann 100 Watt Eigenverbrauch 200 Watt bezug und 900 Watt Einspeisung bedeutet.

                                        Hoffe das stimmt..

                                        Aber danke für den Anstoß - muß mal schauen ob man hier nicht phasen optimieren könnte nicht das häufig benutze großverbraucher alle auf der gleichen Phase rummachen.

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

                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        991
                                        Online

                                        31.7k
                                        Users

                                        79.7k
                                        Topics

                                        1.3m
                                        Posts

                                        4
                                        18
                                        245
                                        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