NEWS
Shelly Pro 3EM saldierender Stromzähler in Blockly
-
@paul53 sagte:
Die Rundung auf 10 Wh macht durchaus Sinn, denn es entspricht ein monetären Auflösung von ca. 0,3 Cent. Öfter muss sich der Energiewert im Datenpunkt nicht ändern. Während der Berechnung wird nicht gerundet, denn die Datenpunkte werden nur einmal bei Skriptstart eingelesen.
Ah, hab das jetzt erst verstanden mit den Variablen und dann in den Datenpunkt schreiben mit den zwei Nachkommastellen, macht Sinn
-
@schreedr sagte: finde ich deine gepostete Lösung eleganter
Noch eleganter mit nur einer Berechnung:
-
@schreedr
Wenn Javascript-Code, dann besser nicht den von Blockly generierten.const idBezug = '0_userdata.0.Energiezaehler.1:8:0_Verbrauch'; const idEinspeisung = '0_userdata.0.Energiezaehler.2:8:0_Einspeisung'; const idLeistung = 'shelly.1.shellypro3em#34987a4590cc#1.EM0.TotalActivePower'/*Total Power (active)*/; // Datenpunkt in Variable schreiben in kWh var Bezugsenergie = getState(idBezug).val; var Einspeiseenergie = getState(idEinspeisung).val; // Umrechnung TotalActivePower (W) in Energie on(idLeistung, function (dp) { // Berechnung der kWh für Zeit (ms) zwischen zwei Messwerten const delta_kWh = dp.oldState.val * (dp.state.lc - dp.oldState.lc) / 3600000000; if (delta_kWh < 0) { Einspeiseenergie -= delta_kWh; setState(idEinspeisung, Math.round(Einspeiseenergie * 100) / 100, true); } else { Bezugsenergie += delta_kWh; setState(idBezug, Math.round(Bezugsenergie * 100) / 100, true); } });
-
@schreedr sagte: Strom- (ich mag das Wort nicht also ->) Energiezähler
Ein Wärmemengenzähler ist auch ein Energiezähler.
-
@paul53 said in Shelly Pro 3EM saldierender Stromzähler in Blockly:
@schreedr
Wenn Javascript-Code, dann besser nicht den von Blockly generierten.Dachte man kann den Code in Blockly kopieren, aber das geht doch nicht. Dann muss ein interessiert sich das eben doch abbauen
-
@schreedr sagte: Dachte man kann den Code in Blockly kopieren
Kann man per Export im XML-Format.
-
Möchte mal Danke sagen für das tolle Script , funktioniert sehr gut auch mit dem normalen Shelly 3EM!
Läuft jetzt seit ein paar Tagen bei mir ohne Probleme und die Werte passen.
Hätte ich so nicht hinbekommen und den Rest wie Tages-/Monatsverbrauch usw kann man sich damit schön zusammenbasteln.
-
@paul53 @Schreedr Danke Euch beiden für das Skript. Ich habe den Pro EM seit ein paar Tagen im Einsatz und das Thema Saldierend/Nicht saldierend ist echt super verwirrend. Man liest an verschiedenen Stellen, dass der Pro saldiert, Aber leider nicht, dass er das bei TotalActiveEnergy eben nicht macht (oder nicht ordentlich).
-
@paul53
da ich ein eher Freund von javascript bin habe ich mir Dein Skript kopiert, leider kommt es zu zunehmenden Abweichungen zum echten Zählerstand.Wenn ich das mit der Funktion on() richtig verstanden habe wird bei jeder Änderung des Wertes von idLeistung die Berechnung ausgeführt. Abhilfe wäre vermutlich die Ausführung in einem Zeitplan (was ich sowieso bevorzugen würde), das habe ich aber nicht hinbekommen:
das Skript:
const idBezug = '0_userdata.0.Energiezaehler.1:8:0_Bezug'; const idEinspeisung = '0_userdata.0.Energiezaehler.2:8:0_Einspeisung'; const idLeistung = 'shelly.0.shellypro3em#3ce90e6ff170#1.EM0.TotalActivePower'/*Total Power (active)*/; function berechne_leistung() { // Datenpunkt in Variable schreiben in kWh var Bezugsenergie = getState(idBezug).val; var Einspeiseenergie = getState(idEinspeisung).val; log("Bezugsenergie = " + Bezugsenergie); log("Einspeiseenergie = " + Einspeiseenergie); // Umrechnung TotalActivePower (W) in Energie // Berechnung der kWh für Zeit (ms) zwischen zwei Messwerten var oldState_val = getState(idEinspeisung).val; var oldState_lc = getState(idEinspeisung).lc; // erzeugt einen Fehler log("oldState_val = " + oldState_val); log("oldState_lc = " + oldState_lc); var State_lc = idLeistung.State.lc; // an den Wert komme ich so nicht ran log("State = " + State_lc); const delta_kWh = oldState_val * (state_lc - oldState_lc) / 3600000000; log("delta_kWh = " + delta_kWh ); if (delta_kWh < 0) { Einspeiseenergie -= delta_kWh; setState(idEinspeisung, Math.round(Einspeiseenergie * 100) / 100, true); } else { Bezugsenergie += delta_kWh; setState(idBezug, Math.round(Bezugsenergie * 100) / 100, true); } }; // Leistung jede Minute berechnen schedule('* * * * *', berechne_leistung);
Das Log dazu:
19:21:23.923 info javascript.0 (16628) Start javascript script.js.4-Test.SH8_forum 19:21:23.941 info javascript.0 (16628) script.js.4-Test.SH8_forum: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions 19:22:00.008 info javascript.0 (16628) script.js.4-Test.SH8_forum: Bezugsenergie = 5653.37 19:22:00.008 info javascript.0 (16628) script.js.4-Test.SH8_forum: Einspeiseenergie = 13161.52 19:22:00.009 info javascript.0 (16628) script.js.4-Test.SH8_forum: oldState_val = 13161.52 19:22:00.009 info javascript.0 (16628) script.js.4-Test.SH8_forum: oldState_lc = 1721910679501 19:22:00.010 error javascript.0 (16628) at Object.berechne_leistung (script.js.4-Test.SH8_forum:20:35)
MOD-EDIT: Code in code-tags gesetzt!
Kannst Du mir einen Tip geben, wie ich das per Zeitplan ausführen kann? Evtl. geht das ja auch ohne meine Umbauten
Ich würde es ja auch über das blockly-Skript versuchen, habe aber keinen Weg gefunden wo/wie ich es downloaden kann ... -
@fritz-0 Berechnet wird ja der Verbrauch anhand der saldierten aktuellen Leistung, bezogen auf die Zeit, in der die Leistung exakt so hoch ist. Wenn man das so macht, muss ja zwingend bei jeder Leistungsänderung eine Berechnung durchgeführt werden. Bei einem Zeitplan wird ja die aktuelle Leistung zum Zeitpunkt der Ausführung herangezogen, Werte zwischen den Zeitpunkten werden ignoriert. Korrigiert mich bitte, sollte ich falsch liegen, aber eine Berechnung des Verbrauch auf Basis der Leistung kann mit einem Zeitplan nicht funktionieren, bzw. muss falsche Werte liefern.
Abweichungen zum echten Zählerstand werden sich mit dem Shelly schon allein aufgrund der Messtoleranzen nicht vermeiden lassen. Ich würde eher mit einem Faktor bei der Berechnung arbeiten und versuchen mich so dem "gezählten" Verbrauch anzunähern. -
@frederik-buss
Hallo Frederik,ich habe das Skript jetzt mal einen Tag laufen lassen, das Ergebnis:
bei der Einspeisung gab es eine Abweichung von 0,53 kWh (und das wo ja nur einen Teil der Zeit eingespeist wurde)
der Zählerstand vom Verbrauch hat sich am Stromzähler nicht geändert, das Skipt hat aber einen Bezug von 0,48kWh berechnet.
Ich wüßte leider nicht, wie ein "Korrekturfaktor" da helfen könnte.
Zum Punkt Berechnung bei Leistungsänderung hatte ich diese Aussage von @paul53 vor Augen:
"Muss es nicht (siehe oben). Für zyklischen Ablauf im Hauptprogramm (also ständig) verwendet man kein Intervall, sondern einen Zeitplan."
deshalb kam ich auf die Idee mit dem scheduler.
Ich würde das Skript sonst auch gerne als blockly-Skript testen wollen, aber kenne den Weg nicht, wie ich es downloaden kann, ich habe nirgends einen Link dazu gesehen.
Das kannst Du mir sicher sagen?
Danke für Deine Unterstützung.
-
@fritz-0 Hier würden etwas mehr Infos helfen. Z.B.: Zeigt Dein Zähler Nachkommastellen an? Meiner tut das nicht, daher muss ich Abweichungen über mehrere Tage bewerten. Auch ich habe Abweichungen, die sind aber innerhalb der Messtoleranz des Shelly und lassen sich imo auch nur per Korrekturfaktor halbwegs gerade ziehen. Ausserdem sind Infos zu erwartetem Gesamtverbrauch und Gesamtertrag hilfreich.
Angenommen, Dein Zähler zeigt auch die Nachkommastellen an, tippe ich eher auch ein anderes Problem, weil Abweichungen von einer halben kWh pro Tag scheint mir zu hoch: Bist Du sicher, dass alle Stromwandler richtig herum eingebaut wurden? Sprich, die Richtung auf dem Pfeil der Wandler zeigen alle in dieselbe Richtung - von Stromnetz zu Hausnetz? -
@frederik-buss
ein paar Daten:- der Stromzähler ist ein "einfacher" 2-Richtungszähler.
- der Zählerstand wird mit einer Nachkommastelle angezeigt.
Die jährliche Einspeisung beträgt ca. 1,500 kWh, der Bezug beträgt < 1.000 kWh.
Ob die Stromwandler korrekt eingebaut sind kann ich nicht prüfen, dazu müsste ich im Schaltschrank Abdeckungen öffnen, als Elektro-Laie ist mir das zu gefährlich. Daher kann ich Deine Vermutung nicht überprüfen. Ich gehe aber vom korrekten Einbau aus, mein Elektriker ist erfahren, dem traue ich das schon zu.
Wenn er das nächste Mal vor Ort sein sollte werde ich ihn dazu ansprechen, aber das kann dauern, aktuell habe ich keinen Auftrag für ihn.Nachdem das Skript jetzt knapp 4 Tage läuft sind die Abweichungen schon deutlich:
- Bezug: Stromzähler keiner, Abweichung vom Skript 1,4 kWh
- Einspeisung: Abweichung vom Skript 1,55 kWh
-
@fritz-0 Bei den Werten gehe ich von aus, dass Du einen Stromspeicher verbaut hast. Falls Du das script 1:1 umgesetzt hast, bin ich mir sicher, dass der Fehler im Schaltschrank zu suchen ist. Abweichungen von 0,5kWh pro Tag sind zu hoch, zumal Auffällig ist, dass die Abweichungen von Bezug und Einspeisung in der selben Größenordnung sind. Zum Vergleich: Ich habe momentan wegen der Klimaanlage ca. 5.000-6.000 kWh Verbrauch pro Jahr hochgerechnet (Solar rausgerechnet) und seit 2 Wochen insgesamt < 0,2kWh Abweichungen. Es ist auch denkbar, dass der Shelly an der "falschen" Stelle sitzt - Messen sollte der direkt hinter dem Hausanschluss, vor allen Sicherungen/Verbrauchern/Akkus/Wechselrichtern etc.
Wie hoch ist der Stromverbrauch ohne Solar? Oder anders: wie hoch war der Verbrauch vor der Solaranlage? -
Wie hoch ist der Stromverbrauch ohne Solar? Oder anders: wie hoch war der Verbrauch vor der Solaranlage?
der lag bei ca. 4.000 kWh
Mit dem Speicher liegst Du richtig.
Was den Einbau an der korrekten Stelle angeht muss ich warten bis ich den Elektriker mal wieder im Keller habe
Ich denke, das ich da vorher nicht weiterkomme.
Erstmal vielen Dank für Deine Unterstützung.Wissen würde ich trotzdem, wie ich das Blockly-Skript runterladen kann. Das geht vermutlich ganz einfach, aber ich habe den Weg dazu noch nicht gefunden.
-
@fritz-0 Ich denke hier gibt es ein Missverständnis: Importieren und Exportieren geht im Javascript Adapter, wie von Pau beschrieben (oben rechts: Blöcke importieren/exportieren). Mit runterladen meinst Du vermutlich dass Du den hier gezeigten Code bei Dir importieren möchtest. Dazu muss ihn aber vorher jemand exportiert und hier bereit gestellt haben, was ich nicht sehe
Ich bin auch eher ein Freund davon die Scripte selbst nachzubauen, schon allein um alle Variablen/Verknüpfungen auswählen zu müssen, was die typischen Fehlerquellen deutlich reduziert. -
@frederik-buss
alles klar. Ich werde das Thema jetzt erstmal zurückstellen, bis klar ist ob die Anbringung der Stromzangen korrekt ist (sprich Richtung und Montageort).Vielleicht klärt es sich danach ja schon
-
Hallo
Ich habe mir jetzt die 2 Datenpunkte wie im oberen Beitrag angelegt
Energiezaehler 1:8:0 Verbrauch und Energiezaehler 2:8:0 EinspeisungIch bekomme es mit dem Blockly nicht hin. Könnte mir jemand das Blockly zu Verfügung stellen, und mir mal genau sagen kann welche Datenpunkte ich beim Shelly Pro 3 em nehmen muss?
Würde mich sehr freuen.
-
@kippe sagte: Könnte mir jemand das Blockly zu Verfügung stellen
Du musst allerdings deine Datenpunkte zuweisen.
-
@paul53
Super das Blockly habe ich jetzt drin. Also muss ich die 4 Datenpunkte jetzt noch zuordnen. Welche Datenpunkte vom Shelly
Pro 3em muss ich denn genau haben ? Und was muss ich in den Datenfeld ( Grün ) Umrandet im Bild eintragen. Mein jetziger Zählerstand ?