NEWS
Shelly pro3EM Verbrauch und Einspeisung Script geht nicht
-
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:Wenn ich den Shelly Adapter Aktiviere bekomme ich die werte leider nicht bzw. die 2 Datenpunkte tauchen nicht auf.
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);
-
@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? -
@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!
-
@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ürConsumedPower
undTotal_Returned
. -
@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.
-
@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 ...
-
@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 ?
-
@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 -
@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.
-
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.
-
@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!
-
@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.
-
@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 ?
-
@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.
-
@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.
-
@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!
-
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...
-
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.