Sungrow auslesen mit python, funktioniert leider nicht.
Datum auslesen klappt, der Rest jedoch nicht.
Evtl. liegts an word swap, weiß nicht, wie ich das umsetzen kann.
Was mache ich falsch?
Vielen Dank!
Test-Code:
#!/usr/bin/env python3
from pyModbusTCP.client import ModbusClient
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder
try:
modbusConnection = ModbusClient(host="192.168.178.229", port=502, unit_id=1, auto_open=True, auto_close=True)
# year funktioniert: liefert aktuelles Jahr
data = modbusConnection.read_holding_registers(4999, 1)
decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big)
value = decoder.decode_16bit_uint()
print(value)
# day funktioniert: liefert aktuellen Tag
data = modbusConnection.read_holding_registers(5001, 1)
decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big)
value = decoder.decode_16bit_uint()
print(value)
# folgendes funktioniert nicht: falsches Register/-anzahl, Typ, wordorder word swap?
# SG5RT, SG10RT, ...
# DC MPPT1 V
data = modbusConnection.read_input_registers(5010, 1)
decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big)
value = decoder.decode_16bit_uint()
print(value)
# kW
data = modbusConnection.read_input_registers(5031-1, 1)
decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big)
value = decoder.decode_16bit_uint()
print(value)
# kWh
data = modbusConnection.read_input_registers(13001, 2)
decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big)
value = decoder.decode_32bit_uint()
print(value)
# kWh
data = modbusConnection.read_input_registers(5098, 2)
decoder = BinaryPayloadDecoder.fromRegisters(data, byteorder=Endian.Big, wordorder=Endian.Big)
value = decoder.decode_32bit_uint()
print(value)
except Exception as e:
print(e)
print("conn problem")
Alles anzeigen