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?Peete hat geschrieben: Do Dez 09, 2021 5:11 pmAhhhh
Und die Speicherabfrage zu entladen und geladen lasse ich weiter drin? Oder werden die auch berechnet?
 ): viewtopic.php?f=14&t=5923
 ): viewtopic.php?f=14&t=5923VGBeim 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
 ): viewtopic.php?f=14&t=5923
 ): viewtopic.php?f=14&t=5923Habe ich.okaegi hat geschrieben: Do Dez 09, 2021 5:37 pm Die aktuelle Lade / Entaldeleustung in Watt brauchst du natürlich aus dem Speicher driver sonst kann er nichts rechnen.
Gruss Oliver
 So müsste er es jetzt richtig berechnen.
 
So müsste er es jetzt richtig berechnen. ): viewtopic.php?f=14&t=5923
 ): viewtopic.php?f=14&t=5923Code: 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()