Wir wechseln das Forum am 14.11.24 auf die Forensoftware Discourse. Zwischen Montag Abend und Dienstag Nachmittag wird das Forum deaktiviert. Danach sind wir hoffentlich mit neuem Forum inkl. der vorhandenen Beiträge wieder am Start! Hier zum Forenbeitrag!

Benachrichtigungen
Alles löschen

Victron ET340 Stromzähler Messfehler

6 Beiträge
2 Benutzer
1 Reactions
794 Ansichten
(@tom2023)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 12
Themenstarter  

Ich habe für meine Nulleinspeisung den Victron ET340 / Carlo Gavazzi ET340 Stromzähler verbaut. 

Nach einigen Wochen Beobachtung kann ich sagen, dass die Messgenauigkeit des ET340 nicht sehr hoch ist. Bei ungleicher Belastung der 3 Phasen und/oder nicht ganz Sinusförmiger 230V Spannungskurve weicht die saldierende Leistung des ET340 um bis zu 5% oder 200W von der saldierenden Leistung des Stromzählers vom Netzbetreiber (ISKRA MT681) ab.

Der Fehler klingt erstmal nicht viel, aber wenn das E-Auto tagsüber lädt, beziehe ich ca. 200W Netzstrom dazu, was dann immerhin bis zu 2kWh pro Tag ausmacht.

Da ich für andere Zwecke (E-Auto PV-gesteuert laden) sowieso die optische Schnittstelle des ISKRA MT681 mit Volkszähler und Raspberry Pi auswerte, habe ich mir nicht die Mühe gemacht, andere Stromzähler auszuprobieren.
Ich habe anstatt ein Python Skript geschrieben, dass auf dem Pi läuft und den Messfehler korrigiert:

In der Victron Venus OS Software, die auf dem Cerbo GX läuft, kann man den Grid Setpoint per modbus verändern.
Das läuft in der Victron Terminologie unter ESS Mode 2. Wobei "Mode 2" eigentlich nur heißt, dass man den Grid Setpoint einstellt. Man kann den "Mode 2" nirgends aktivieren, und der Setpoint im Register 2700 ist immer veränderbar, ohne dass man das irgendwo freigeben müsste. In anderen Worten, das ist der ganz normale ESS mode.

Da mein Skript nur in meiner Umgebung richtig funktioniert, will ich das hier nicht veröffentlichen, sonst gibt es zu viel Frust Smile Für Leute, die trotzdem was ähnliches versuchen wollen, hier ein paar Startpunkte:

Als python modbus Bibliothek habe ich pymodbus verwendet - allerdings in der veralteten Version 2.5.3, weil auf meinem Raspberry Pi mit Volkszähler image nur Python 3.7 läuft.
Da geht die Scheiße schon los Smile Wenn ich nochmal von vorne anfangen müsste, würd ich erst das Pi Volkszähler image mit Python 3.9 zum laufen kriegen, und dann das aktulle pymodbus nehmen.

P.S.: Nur zur Klärung: Die Problematik mit dem ET340 und den falschen Werten in VRM kenne ich, aber das ist nicht das Problem, was ich hier beschreibe.


   
Zitat
(@tom2023)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 12
Themenstarter  

Nur der Teil des Skriptes, der die Modbus Kommunikation durchführt.

getestet nur mit Python 3.7 und  pymodbus 2.5.3

Das ist kein komplettes, funktionsfähiges Skript! (die auskommentierten Teile zeugen von meiner Fehlersuche 🙂

#import pymodbus.client
#import pymodbus.payload

#from pymodbus.client import ModbusTcpClient
from pymodbus.client.sync import ModbusTcpClient

from pymodbus.payload import BinaryPayloadDecoder
from pymodbus.payload import BinaryPayloadBuilder, Endian


client = ModbusTcpClient('192.168.0.xxx', port='502') # ip addresse vom Cerbo GX, 502 ist der modbus port
client.connect()
#client.write_coil(1, True)
#result = client.read_input_registers(840, 2)

#result = client.read_input_registers(842, 1, 100) # victron register nummer, anzahl der zu lesenden register ab hier, Victron Gerätenummer
result = client.read_input_registers(842, 1, unit= 100) # victron register nummer, anzahl der zu lesenden register ab hier, Victron Gerätenummer = 100

# 842 ist Battery Power. Negative Zahlen heißt Entladen

decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder='>', wordorder='>')

 
humanreadable = decoder.decode_16bit_int()

print("Battery power", humanreadable)


result = client.read_input_registers(843, 1, unit = 100) #SoC State of Charge
print("State of Charge", result.registers[0])

"""
while True:
	result = client.read_input_registers(820, 3, unit = 100) 
	decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder='>', wordorder='>')

 
    
	grid_L1_power = decoder.decode_16bit_int()
	grid_L2_power = decoder.decode_16bit_int()
	grid_L3_power = decoder.decode_16bit_int()
	
	grid_total_power = grid_L1_power + grid_L2_power + grid_L3_power
	
	print("grid total power", grid_total_power)
	
	time.sleep(1)

"""


result = client.read_input_registers(2700, 1, unit= 100) # victron register nummer, anzahl der zu lesenden register ab hier, Victron Gerätenummer = 100
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder='>', wordorder='>')
humanreadable = decoder.decode_16bit_int()
print("set point", humanreadable)


builder = BinaryPayloadBuilder(byteorder=Endian.Big, wordorder=Endian.Big)

builder.reset()

builder.add_16bit_int(-120)

payload = builder.to_registers()



client.write_register(2700, payload[0], unit=100)

time.sleep(5)

result = client.read_input_registers(2700, 1, unit= 100) # victron register nummer, anzahl der zu lesenden register ab hier, Victron Gerätenummer = 100
decoder = BinaryPayloadDecoder.fromRegisters(result.registers, byteorder='>', wordorder='>')
humanreadable = decoder.decode_16bit_int()
print("set point", humanreadable)


client.close()

d


   
AntwortZitat
(@tom2023)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 12
Themenstarter  

Veröffentlicht von: @und-mehr

Nur weil der Zähler deines Energieversorgers eine Eichung hat, bedeutet das nicht, dass er genau misst,
Er misst nur innerhalb seiner Toleranz rechtlich ausreichend genau. Woher weißt du, welcher Anteil des Messfehlers von welchem Zähler stammt?

(Vom Doppelten Thread übernommen)

Hallo "und mehr":

Da hast du völlig recht!
ich kann nicht messtechnisch beweisen, welcher Stromzähler jetzt falsch liegt. Insofern ist der Titel des Posts eher eine Vermutung, weil der ISKRA geeicht ist, und der ET340 nicht.

Allerdings ist der für die Kostenabrechnung entscheidende nun mal der ISKRA, also muss ich mich nach dem richten, selbst wenn er falsch liegt Smile  


   
AntwortZitat
(@tom2023)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 12
Themenstarter  

Veröffentlicht von: @und-mehr

P.S.
Der Volkszähler ist übrigens unbrauchbar, wenn man in kurzer Zeit viele Messwerte haben will, was bei einer Nulleinspeisung schon irgendwie sachdienlich ist.

Ich hole die Daten direkt vom vzlogger ab, das passiert ca. jede Sekunde. Wenn ich es von der volksähler Datenbank abholen würde, dann wäre es wirklich zu langsam.
Der ET340 wird auch nicht schneller ausgelesen, wie ich an der Reaktionsgeschwindigkeit des Victron Systems sehen kann.
Der Flaschenhals ist sowieso die relativ langsame Regelgeschwindigkeit des Victron Systems, welche aber gesetzlich vorgegeben ist. (Ich meine maximal 400W/s, Link habe ich gerade nicht parat, müsste ich googeln)

Bis das Victron System sich auf eine Laständerung von 1 oder 2 kW eingeschwungen hat, vergehen mehrere Sekunden.

Dein Einwand ist aber trotzdem berechtigt, und mein Skript steuert tatsächlich nicht die Nulleinspeisung direkt, sondern verschiebt nur den sollwert (Setpoint). 
die eigentliche Regelung wird immer noch mit den Ist-Daten vom ET340 durchgeführt.

 

direkte Steuerung der Nulleinspeisung wäre Victron "Mode 3"

Diese r Beitrag wurde geändert Vor 1 Jahr von Tom2023

   
AntwortZitat
(@tom2023)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 12
Themenstarter  

Veröffentlicht von: @und-mehr

P.S.
Der Volkszähler ist übrigens unbrauchbar, wenn man in kurzer Zeit viele Messwerte haben will, was bei einer Nulleinspeisung schon irgendwie sachdienlich ist.

@und-mehr:

Ich bin ehrlich gesagt auf der Suche nach einer Library oder einem Skript, mit dem ich den Datenstrom vom ISKRA direkt, ohne Volkszähler, auslesen kann. Alles von vorne programmieren übersteigt meine Fähigkeiten und meine verfügbare Freizeit 🙂

Kennst du da irgendwas?


   
AntwortZitat
(@und-mehr)
Heroischer Stromgenerator
Beigetreten: Vor 3 Jahren
Beiträge: 1148
 

Ungefähr 49 Treffer:
https://www.google.com/search?q=akkudoktor+volksz%C3%B6hl%C3%B6er

..,-


   
Carolus reacted
AntwortZitat
Teilen: