Ahhhh
Und die Speicherabfrage zu entladen und geladen lasse ich weiter drin? Oder werden die auch berechnet?
Ahhhh
Meinst Du damit jeweils die kWh oder die aktuellen Lade-/ EntladeWatt?
VGBeim Speicher brauchst du den
Gesamtzähler Lade / Entlade in Kwh
Du brauchst bei PV:okaegi hat geschrieben: ↑Do Dez 09, 2021 5:26 pm Du brauchst bei pv
Den Gesantzähler in Kwh
Beim Speicher brauchst du den
Gesamtzähler Lade / Entlade in Kwh
Für Evu auch den Gesamtzähler Einspeisung und Bezug auch in Kwh.
Wenn du das nicht hast, kannst du im loadvars.sh jeweils die usesim... auf 1 setzten. Dann werden diese Zähler gerechnet und über mqtt persistiert.
Die Berechnun merkt sich die aktuelle Leistung zwischen zwei Regelintervallen, und nimmt dann pro Sekunde einen geschätzten Leistungswert an und rechnet dann aus Watt somit Watt pro Stunde.
Gruss Oliver
Habe ich.
Code: Alles auswählen
#!/usr/bin/python
import sys
# import os
# import time
# import getopt
# import socket
# import struct
# import binascii
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.factory import ClientDecoder
def unsigned32(result, addr):
low = result.registers[addr]
high = result.registers[addr + 1]
val = low +( high << 16)
return val
def unsigned16 (result, addr):
return result.registers[addr]
def signed16(result, addr):
val = result.registers[addr]
if val > 32767:
val -= 65535
return val
def signed32(result, addr):
val = unsigned32(result, addr)
if val > 2147483647:
val -= 4294967295
return val
ipaddress = str(sys.argv[1])
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(0, 114)
value = signed32(resp, 70)
# for SolaX negative means get power from grid
value = -value
f = open('/var/www/html/openWB/ramdisk/wattbezug', 'w')
f.write(str(value))
f.close()
einspeisung = unsigned32(resp, 72) * 10
f = open('/var/www/html/openWB/ramdisk/einspeisungkwh', 'w')
f.write(str(einspeisung))
f.close()
consumed = unsigned32(resp, 74) * 10
f = open('/var/www/html/openWB/ramdisk/bezugkwh', 'w')
f.write(str(consumed))
f.close()
# Das funktioniert nur bei X3 WR von Solax. Würde ich auskommentieren oder löschen, dann geht das Modulen bei allen
resp=client.read_input_registers(130, 6)
value2 = signed32(resp, 0)
value2 = -value2
f = open('/var/www/html/openWB/ramdisk/bezugw1', 'w')
f.write(str(value2))
f.close()
value3 = signed32(resp, 2)
value3 = -value3
f = open('/var/www/html/openWB/ramdisk/bezugw2', 'w')
f.write(str(value3))
f.close()
value4 = signed32(resp, 4)
value4 = -value4
f = open('/var/www/html/openWB/ramdisk/bezugw3', 'w')
f.write(str(value4))
f.close()
Code: Alles auswählen
#!/usr/bin/python
import sys
# import os
# import time
# import getopt
# import socket
# import struct
# import binascii
from pymodbus.client.sync import ModbusTcpClient
def unsigned16(result, addr):
return result.registers[addr]
def signed16(result, addr):
val = result.registers[addr]
if val > 32767:
val -= 65535
return val
ipaddress = str(sys.argv[1])
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(0, 114)
# Batterie Power
value1 = signed16(resp, 22)
f = open('/var/www/html/openWB/ramdisk/speicherleistung', 'w')
f.write(str(value1))
f.close()
# Batterieladezustand
value2 = unsigned16(resp, 28 )
f = open('/var/www/html/openWB/ramdisk/speichersoc', 'w')
f.write(str(value2))
f.close()
# Batterie entladen
value3 = unsigned16(resp, 29 ) * 100
f = open('/var/www/html/openWB/ramdisk/speicherekwh', 'w')
f.write(str(value3))
f.close()
# Batterie geladen
value4 = unsigned16(resp, 33 ) * 100
f = open('/var/www/html/openWB/ramdisk/speicherikwh', 'w')
f.write(str(value4))
f.close()
Code: Alles auswählen
#!/usr/bin/python
import sys
# import os
# import time
# import getopt
# import socket
# import struct
# import binascii
from pymodbus.client.sync import ModbusTcpClient
from pymodbus.factory import ClientDecoder
ipaddress = str(sys.argv[1])
def unsigned32(result, addr):
low = result.registers[addr]
high = result.registers[addr + 1]
val = low +( high << 16)
return val
def unsigned16 (result, addr):
return result.registers[addr]
def signed16(result, addr):
val = addr
if val > 32767:
val -= 65535
return val
client = ModbusTcpClient(ipaddress, port=502)
resp=client.read_input_registers(10, 2)
pv1 = unsigned16(resp, 0)
pv2 = unsigned16(resp, 1)
f = open('/var/www/html/openWB/ramdisk/pvwatt', 'w')
f.write(str( (pv1 + pv2) * -1 ) ) # Erzeugung negativ
f.close()
resp=client.read_input_registers(80, 4)
# Gesamtertrag [kWh]
pvall = unsigned32(resp, 2) * 100 # yield overall
f = open('/var/www/html/openWB/ramdisk/pvkwh', 'w')
f.write(str(pvall))
f.close()
client.close()