article

bindpe avatar image
bindpe posted

Multiplus II ESS „Modene Messeinrichtung“ statt EM24

Hallo

ich habe eine Frage bezüglich meiner Anlagenplanung.

Ich möchte gerne einen Multiplus II, als ESS betreiben. Da ich aber von meinem Netzbetreiber schon eine moderne Messeinrichtung installiert bekommen habe würde ich dies Info bzgl Leistungsbilanz mit einem IR Sensor auslesen (analog zb „Volkszähler“)

Nun wäre meine Frage wie ich diese Info am besten in die „Steuerung“ rein bekomme

viele dank

Froniusem24
27 comments
2 |3000

Up to 8 attachments (including images) can be used with a maximum of 190.8 MiB each and 286.6 MiB total.

juf avatar image juf commented ·

Hallo,

das ist eigentlich ganz einfach.
Das Smartmeter lässt sich mit Tasmota und SML auslesen. Siehe z.B. hier

https://ottelo.jimdofree.com/stromz%C3%A4hler-auslesen/

https://forum.creationx.de/forum/index.php?thread/1095-d0-z%C3%A4hler-sml-auslesen-mit-tasmota/

https://docs.google.com/document/d/1olSGZcaE_vkdNXzN_p0zGee61xKCcK3HJe3Al00xj2g/mobilebasic#h.dogatvxtcjq

Das ganze kann dann per Mqtt in Venus OS eingebunden werden.

z.B.

https://github.com/dsteinkopf/venus.dbus-MqttToGridMeter


Oder aber so wie ich das mache.
In der Konfiguration des Tasmota Lesekopfes lässt sich die Web-API einschalten und somit per http die Werte abfragen.
Ich habe mit der Unterstützung von RalfZim/venus.dbus-fronius-smartmeter. Das Script angepasst das es so die Werte abfragt. Alles wird als Summe auf L1 dargestellt.

Hier mein modifiziertes Script.
JUFtoGridMeter.zip

Aber Achtung hier werden die Variablen von meiner Installation genutzt. z.B.
meter_data['StatusSNS']['SML']['DJ_TPWRCURR']['DJ_TPWRIN']['DJ_TPWROUT']

Diese können je nach verwendeter Tasmota installation andere sein und müssen angepasst werden.

Sieht dann so aus.

img-3551.jpeg

img-3550.jpeg


Vielleicht hilft es… ;-)

1 Like 1 ·
img-3551.jpeg (134.8 KiB)
img-3550.jpeg (233.6 KiB)
juftogridmeter.zip (2.6 KiB)
bindpe avatar image bindpe juf commented ·

Hallo,

danke für Deine ausführliche Antwort. Hab mir das alles durchgelesen, leider steige ich da noch nicht ganz durch ;(

Vielleicht kannst Du mir nochmal sagen was ich alles genau brauche

Zwar habe ich in meinem Technikraum einen Sicherungsschrank EFR SGM C4 Zähler , dessen "Leistungsbilanz" möchte ich gerne, am liebsten per Kabel (RS 485?) oder Drahlos in die Garage übertragen, dort soll dann der MP II mit Raspberry platziert werden

Das ganze sollte allerdings auch funktionieren, wenn zb nachts mein Router aus ist

Ist das so möglich?

Gibt es leseköpfe die ich direkt am RP anschließen kann?

Welche Komponenten brauche ich da?

Danke




0 Likes 0 ·
juf avatar image juf bindpe commented ·

Hallo,

Du brauchst einen IR Lesekopf, suche nach Hichi IR ttl.
Und hier auf Heise ist das gut beschrieben.https://www.heise.de/tests/Ausprobiert-Guenstiger-IR-Lesekopf-fuer-Smart-Meter-mit-Tastmota-Firmware-7065559.html

Speziell für Dein Smartmeter gibt es hier das passende Script.

https://tasmota.github.io/docs/Smart-Meter-Interface/#efr-sgm-c2c4-sml


“Das ganze sollte allerdings auch funktionieren, wenn zb nachts mein Router aus ist. Ist das so möglich?“

Nö geht nicht, Netzwerk muss da sein.
Ansonsten anderen Zähler nehmen, EM24 und RS485 Kabel vom Zähler in den Schuppen…. ;-)

Viel Erfolg.

0 Likes 0 ·
bindpe avatar image bindpe juf commented ·

Hallo

vielen Dank für Deine Hilfe

Gibt es nicht auch Leseköpfe die einen RS485 haben und die ich dann per Kabel in den Raspberry einlesen kann? Zb Hager EHZ001K

Gibts da keine Möglichkein den zu verwenden?

Vielen Dank


0 Likes 0 ·
tm-107 avatar image tm-107 juf commented ·

Hallo, ich habe letztens festgestellt, dass das Script (bei 1000ms Loop) bei jedem Durchlauf den UpdateIndex um 2 erhöht (anstatt um 1). Bei anderen Pausenzeiten stimmten die Abstände der Durchläufe dann überhaupt nicht mehr.

Meiner Meinung nach liegt der Fehler in Zeile 70. Diese ist nur eine Dopplung von Zeile 67, was dann scheinbar zur doppelten Wiederholung führt. Und mit dem log hat sie auch nix zu tun. Zumindest ist das das Fazit der Analyse mit meinen bescheidenen Python-Kenntnissen und bisher läuft das Script mit auskommentierter Zeile 70 fehlerfrei.
Außerdem ist der Load-Average jetzt auch um einiges niedriger.

Auf jeden Fall könnte das auch ein Grund gewesen sein, warum das Script bei mir (und scheinbar auch anderen) schon ein paar mal hängen geblieben ist.

0 Likes 0 ·
siricy avatar image siricy commented ·

das mit dem Web-API ist eine simple und coole Lösung :)

0 Likes 0 ·
marcush avatar image marcush commented ·

Sehr schöne Lösung, genau danach habe ich gesucht.
Leider habe ich das Problem dass der Eintrag im autostart nach einem Neustart des Raspberry verschwindet und so die Daten vom D1 nicht geholt werden.

Weiß da einer eine Lösung

0 Likes 0 ·
tandoyu avatar image tandoyu commented ·

Hallo, wie genau stelle ich das mit deinem script an? Was muss ich installieren, bzw. wo muss ich es hinkopieren? Steige da nicht so ganz durch. Gruß Roland

0 Likes 0 ·
stefan-jaeger avatar image stefan-jaeger tandoyu commented ·

Vor der gleichen Frage stehe ich hier auch - wie bekomme ich dieses .py file installiert? Einfach nur starten wird ja nicht reichen.

Aber die Lösung ist genau das was ich suche. Für Openwb mache ich es auch schon genau so.

0 Likes 0 ·
juf avatar image juf stefan-jaeger commented ·

Hi,


schaut mal hier https://github.com/RalfZim/venus.dbus-fronius-smartmeter das ist die von mir referenzierte Webseite. SSH auf dem Cerbo/RPI Venus freischalten und dann mit einem beliebigen Tool wie WinScp oder so wie beschrieben kopieren. Ein paar Linux Kenntnisse sind schon hilfreich ;-)


grüße

0 Likes 0 ·
stefan-jaeger avatar image stefan-jaeger juf commented ·

Hallo,

die Idee hatte ich sogar auch schon :-) müsste machbar sein, auch die Anpassung auf dem Tasmota Hichi Lesekopf im .py file habe ich schon gemacht.

Bei der Anpassung des anderen Projekts habe ich mich nur gefragt wo ich den Pfad oder Projektname alles ändern muss/kann/darf ?





0 Likes 0 ·
stefan-jaeger avatar image stefan-jaeger stefan-jaeger commented ·

Habe es so weit zum laufen bekommen. Auf der Hauptseite wird der Zähler jetzt angezeigt und nach anfänglichen Schwierigkeiten läuft jetzt auch die ESS Regelung darüber wieder wie sie soll. THX für das Project :-)


Eine Sache wundert mich nur noch:

unter [Settings] => [Energie Meters]

Wird leider kein Zähler angezeigt - sollte er da eigentlich zu sehen sein ?

0 Likes 0 ·
juf avatar image juf stefan-jaeger commented ·

Freut mich das es jetzt funktioniert.

Zu Deiner Frage, nein auch bei mir erscheint es dort nicht.

Wie ich hier gelesen habe, erscheint unter Energymeter nur ein Rs485 Meter.

grüße

0 Likes 0 ·
stefan-jaeger avatar image stefan-jaeger juf commented ·

Ein Problem gibt es aber: Hatte es jetzt schon 2 mal das der Zähler nicht mehr aktualisiert wurde. Der Wert war eingefrohren. Auf dem Webserver des Tasmota lief aber alles weiter - ein Reboot des Victron GX Hat geholfen.

Eine Idee an was das liegen könnte ?

0 Likes 0 ·
juf avatar image juf stefan-jaeger commented ·

Hallo,

da kann ich nicht wirklich etwas zu sagen.
Netzwerk?

Eventuell mit dem Aktualisierungsintervall „spielen“, etwas größer machen. 250 ms könnte etwas zu oft sein?!

# add _update function 'timer'

gobject.timeout_add(250, self._update) # pause 250ms before the next request

Ich nutze jetzt schon länger einen eigene Zähler, Elgris.


mfg

0 Likes 0 ·
stefan-jaeger avatar image stefan-jaeger juf commented ·

Ok.. danke - habe jetzt mal 500ms eingestellt. Sehen wir mal ob es was bringt.

0 Likes 0 ·
tm-107 avatar image tm-107 stefan-jaeger commented ·

Meiner Meinung nach liegt der Fehler in Zeile 70. Diese ist nur eine Dopplung von Zeile 67, was dann scheinbar zur doppelten Wiederholung führt. Und mit dem log hat sie auch nix zu tun. Zumindest ist das das Fazit der Analyse mit meinen bescheidenen Python-Kenntnissen und bisher läuft das Script mit auskommentierter Zeile 70 fehlerfrei.

Zu den Zeitabständen: Prüfe doch vorher einfach mal in welchen Abständen Dein Zähler Daten liefert. Meiner macht das z.Bsp. nur im Sekundentakt. Da bringt es nicht viel das Script alle 500ms laufen zu lassen.

0 Likes 0 ·
ralf1978 avatar image ralf1978 stefan-jaeger commented ·

Ich hab das etwas anders gelöst.Ich habe etwa die selbe config. Das Problem ist meist Pyton, es ist schlicht zu langsam. Schau dir mal den Thread an:https://community.victronenergy.com/questions/217383/regelverhalten-ess-bei-schwingenden-lasten.html

0 Likes 0 ·
treckerfahrer31 avatar image treckerfahrer31 stefan-jaeger commented ·

Hallo in de Runde,

Bin auch gerade dabei die HTTP Lösung umzusetzen. Bin nach der Anleitung von RalfZim vorgegangen.
Bei dem befehl

ln -s /data/dbus-fronius-smartmeter/service /service/dbus-fronius-smartmeter

startet das Script dann auch. Und funktioniert auch.

Nur nach einem neustart des Systems wird das Script nicht mehr geladen. Woran kann das liegen?

die rc.local Datei habe ich auch erstellt.


lg Nico

0 Likes 0 ·
ck484 avatar image ck484 treckerfahrer31 commented ·

Hallo,

Ich komme bei der HTTP Lösung nicht weiter, da ich meine Daten nicht sortiert bekomme.

Meine HTTP spuckt folgende Daten raus (ich lese zwei Zähler aus):

{"StatusSNS":{"Time":"2023-09-18T17:50:35","SML":{"Verbrauch_Summe":13621.5090834,"Einspeisung_Summe":28155.1809730,"Watt_L1":139.01,"Watt_L2":37.09,"Watt_L3":188.32,"Watt_Summe":365.43,"Volt_L1":234.0,"Volt_L2":233.6,"Volt_L3":233.7},"SML":{"Verbrauch_Summe":33766.7798389,"Watt_L1":0.00,"Watt_L2":12.85,"Watt_L3":9.10,"Watt_Summe":21.69,"Volt_L1":234.4,"Volt_L2":233.7,"Volt_L3":233.7}}}

Wie müsste ich in diesem Fall die Zeile "meter_data['StatusSNS']['SML']['DJ_TPWRCURR']" abändern?

Über print habe ich herausgefunden, dass " meter_data = meter_r.json()" ein paar daten verschluckt und nur noch die werte ab dem zweiten Mal "SML" anzeigt, weshalb ich die Zeile gelöscht habe und über die "split" Funktion den passenden wert herausgesucht habe.

meter_url = "http://url/cm?cmnd=status%2010"

meter_r = requests.get(url=meter_url) # request data from the Tasmota Smartmeter

text = meter_r.text

special_characters = "!@#$%^&*()_+=<>/?;'\"[]{}\\|`~"

translation_table = str.maketrans('', '', special_characters)

werte = text.translate(translation_table)

delimiters = ",:"

pattern = "|".join(map(re.escape, delimiters))

meter_data = re.split(pattern, werte)

#meter_consumption = meter_data[11:12]

#send data to DBus

self._dbusservice['/Ac/Power'] = meter_data[11:12]

Nachdem ich das ganze aufgespielt habe wird mir Tasmota unter Venus OS angezeigt, jedoch wird alles mit 0 angezeigt.

Gibt es einen Befehl, um über SSH zu sehen, was das Programm macht?

Ich bin noch Anfänger und muss noch einiges lernen -.-

Vielen Dank schonmal für die Hilfe..

0 Likes 0 ·
ck484 avatar image ck484 ck484 commented ·

Habs mit viel Zeit und Chat GPT hinbekommen.

Problem war, dass es zwei SML blöcke gab und Json einen "verschluckt" hat. mit der folgenden code änderung ging es dann

# Eine Anfrage an die URL senden und den Text in der richtigen Kodierung abrufen

response = requests.get(url)


# Den Inhalt der Website als Text speichern

web_content = response.text


# Text bis zum zweiten "SML" extrahieren

parts = web_content.split("SML", 2) # Zerlegt den Text in Teile, maximal 2 Teile

result = parts[0] + "SML" + parts[1] # Fügt den ersten und zweiten Teil wieder zusammen

json_text = result.rstrip(',"') + '}}'


# Den JSON-Text in ein Python-Objekt umwandeln

meter_data = json.loads(json_text)


# Den Wert von "Watt_Summe" aus dem JSON-Objekt extrahieren und ausgeben

watt_summe = meter_data['StatusSNS']['SML']['Watt_Summe']

watt_l1 = meter_data['StatusSNS']['SML']['Watt_L1']

watt_l2 = meter_data['StatusSNS']['SML']['Watt_L2']

watt_l3 = meter_data['StatusSNS']['SML']['Watt_L3']

totalin = meter_data['StatusSNS']['SML']['Verbrauch_Summe']

totalout = meter_data['StatusSNS']['SML']['Einspeisung_Summe']

tasmota.jpg


Ist das so richtig, um nun mein System mit einem MPII und einem Gobel 14,3kWh Akku zu erweitern?

Bestand: SMA 10kWp, Raspi mit VenusOS und Volkszähler

0 Likes 0 ·
tasmota.jpg (58.9 KiB)
ck484 avatar image ck484 treckerfahrer31 commented ·

@treckerfahrer31 wo liegt denn deine rc.local?

bei mir funktioniert es wenn sie unter /data/ liegt.

-> folgender Inhalt der rc.local datei:

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.


python /data/mqtttogrid/MQTTtoGridMeter.py


exit 0



0 Likes 0 ·
treckerfahrer31 avatar image treckerfahrer31 ck484 commented ·

Ja, ich habe das jetzt auch hinbekommen.
Ich habe der Datei mit

chmod 755 /data/rc.local

noch Rechte gegeben, seid dem klappt das auch mit dem Neustart.


Jetzt habe ich nur das Problem, das meine Daten vom Zähler nach einer halben bis 2 Stunden einfrieren.


Wenn ich hiermit nachschaue:

svstat /service/dbus-fronius-smartmeter

läuft das Script noch.
Starte ich das Script neu habe ich auch wieder Werte.

Gabs das Problem schon? Kann man das Script neu starten lassen, wenn die Werte eingefroren sind?


Nachtrag meinerseits, habe grade mal in das logfile geschaut:


Traceback (most recent call last):
  File "/data/dbus-fronius-smartmeter/dbus-fronius-smartmeter.py", line 74, in _update
    meter_r = requests.get(url=meter_url) # request data from the Tasmota Smartmeter
  File "/usr/lib/python3.8/site-packages/requests/api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "/usr/lib/python3.8/site-packages/requests/api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='192.168.13.113', port=80): Max retries exceeded with url: /cm?cmnd=status%2010 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x75b723b8>: Failed to establish a new connection: [Errno 111] Connection refused'))


Scheinbar sende ich zu viele Anfragen?!

0 Likes 0 ·
achimkre avatar image achimkre treckerfahrer31 commented ·

Hi @Juf,

tolles und vor allem einfaches Script, ohne dass man noch einen extra MQTT Broker benötigt. Es hat sofort funktioniert. Ich habe das Script genommen und mit dem Setup aus RalfZim/venus.dbus-fronius-smartmeter kombiniert und in ein neues github repository eingefügt: https://github.com/AchimKre/venus.dbus-tasmota-smartmeter

0 Likes 0 ·
juf avatar image juf achimkre commented ·

Danke :-)


0 Likes 0 ·
jusch avatar image jusch juf commented ·

Hallo Juf & Achim,

ich habe die webservice Lösung jetzt komplett umgesetzt, d.h. der Tasmota ist im Victron GX (Multiplus 2 mit Pylontech US5000) als GRID Sensor aktiv.

Nutze im Tasmota das dortige Smart Meter interface.

Wenn ich jetzt den ESS im Victron einschalte (Ziel 0W), dann springen die Werte bei einem konstranten Haus-Verbrauch von ca. 300 W massiv rauf und runter zwischen 1000 und -1000 W. Irgendwie schaukelt sich das auf. Es pendelt als nicht auf 0W ein.

Interessanterweise funktioniert es aber bei hohen Lasten (Wasserkocher ein = 200W) ganz passabel.


Ich befürchte dass der Tasmota eben nicht schnell genug aktualisiert, sodass der Victron alle 500 ms oder so anfragt und immer weiter den Batteriestrom erhöht, bis er dann überschiesst und dadnn wieder umgekehrt....

Könnt Ihr mir helfen wie ich dieses Überschwingen es ESS in den Griff bekomme ?

an dem Screenshot aus der Tasmota Konsole ist zu sehen dass der nur ca. alle 4 sec. einen neuen Wert erhält. selbste wenn er öfteres abgefragt werden würde.

Die Beschreibung meines Stromzählers sagt folgendes: "Jeder Zähler verfügt über eine für den Endkunden zugängliche optische Datenschnittstelle (INFO-Schnittstelle). Diese unidirektionale Infrarot-Datenschnittstelle sendet lastabhängig alle 1...4 s entweder einen „Reduzierten“ oder „Vollständigen Datensatz“ (Push Betrieb)."

Das könnte erklären warum es bei höhreren Lasten funktionert.

Ist aber von mir nicht beeinflussbar....

1710015767323.png

Jetzt die Frage: kann man dem Victron ESS agorhytmus igendwie beeinflussen dass er langsamer arbeitet ? und mit den max. 4 sec. update klar kommt ?

0 Likes 0 ·
1710015767323.png (95.6 KiB)
tm-107 avatar image tm-107 jusch commented ·

Standardmäßig fragt das Script alle 0,25s den Zähler ab. Wenn dann die Leistung unverändert bleibt, denkt der Cerbo, dass weiterhin zu viel / zu wenig Leistung vorhanden ist und versucht gegenzusteuern.
Wenn der tatsächliche neue Wert dann erst nach 4 Sekunden vorliegt, hat der Cerbo bereits 16x nachgeregelt. Dadurch entsteht dann dieses Schwingen.

Stell im Script die Wartezeit auf 4000ms (Zeile 67), das könnte Dein Problem lösen.
Mein Zähler liefert alle 1000ms neue Werte und ich habe nur leichtes Schwingen, welches sich nach ein paar Sekunden einpegelt. Egal wie groß oder klein die Last ist.

0 Likes 0 ·

Article

Contributors

bindpe contributed to this article

Verwandte Artikel