Update sunspec.py to adjust for pymodbus API changes
This commit is contained in:
parent
7a203753c8
commit
896bf9f594
33
sunspec.py
33
sunspec.py
@ -21,7 +21,7 @@ class Registers:
|
|||||||
|
|
||||||
def read_uint16(self, address, scale=None):
|
def read_uint16(self, address, scale=None):
|
||||||
self.check_address(address)
|
self.check_address(address)
|
||||||
value = self.lower.getRegister(address)
|
value = self.lower.registers[address]
|
||||||
return self.scale(value, scale)
|
return self.scale(value, scale)
|
||||||
|
|
||||||
def read_int16(self, address, scale=None):
|
def read_int16(self, address, scale=None):
|
||||||
@ -64,7 +64,28 @@ class CommonBlock:
|
|||||||
self.version = '.'.join(s.lstrip('0') for s in regs.read_bytes(42, 16).decode('ascii').split('.'))
|
self.version = '.'.join(s.lstrip('0') for s in regs.read_bytes(42, 16).decode('ascii').split('.'))
|
||||||
self.serial = regs.read_bytes(50, 32)
|
self.serial = regs.read_bytes(50, 32)
|
||||||
self.device = regs.read_uint16(66)
|
self.device = regs.read_uint16(66)
|
||||||
|
|
||||||
|
meter_types = { 201: 'single',
|
||||||
|
202: 'split_single',
|
||||||
|
203: 'wye_three',
|
||||||
|
204: 'delta_three', }
|
||||||
|
|
||||||
|
|
||||||
|
class MeterInfo:
|
||||||
|
def __init__(self, regs):
|
||||||
|
self.did = regs.read_uint16(0)
|
||||||
|
self.info_len = regs.read_uint16(1)
|
||||||
|
self.manufacturer = regs.read_bytes(2,32)
|
||||||
|
self.model = regs.read_bytes(18,32)
|
||||||
|
self.option = regs.read_bytes(34,16)
|
||||||
|
self.version = regs.read_bytes(42,16)
|
||||||
|
self.serial = regs.read_bytes(50,32)
|
||||||
|
self.device = regs.read_uint16(66)
|
||||||
|
typ = regs.read_uint16(67)
|
||||||
|
self.type = meter_types.get(typ, typ)
|
||||||
|
self.data_len = regs.read_uint16(68)
|
||||||
|
|
||||||
|
|
||||||
meter_events_bits = { 2: 'Power Failure',
|
meter_events_bits = { 2: 'Power Failure',
|
||||||
3: 'Under Voltage',
|
3: 'Under Voltage',
|
||||||
4: 'Low PF',
|
4: 'Low PF',
|
||||||
@ -154,7 +175,7 @@ class InverterBlock:
|
|||||||
|
|
||||||
class Inverter:
|
class Inverter:
|
||||||
def __init__(self, host, port=1502, device=1):
|
def __init__(self, host, port=1502, device=1):
|
||||||
self._conn = ModbusTcpClient(host, port)
|
self._conn = ModbusTcpClient(host, port=port)
|
||||||
self._device = 1
|
self._device = 1
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
@ -165,7 +186,7 @@ class Inverter:
|
|||||||
if device is None:
|
if device is None:
|
||||||
device = self._device
|
device = self._device
|
||||||
self.connect()
|
self.connect()
|
||||||
rs = self._conn.read_holding_registers(addr, length, slave=device)
|
rs = self._conn.read_holding_registers(addr, count=length, device_id=device)
|
||||||
return Registers(rs, length)
|
return Registers(rs, length)
|
||||||
|
|
||||||
def header(self, base):
|
def header(self, base):
|
||||||
@ -180,3 +201,7 @@ class Inverter:
|
|||||||
def meter(self, n):
|
def meter(self, n):
|
||||||
base = 40190 + 174*n
|
base = 40190 + 174*n
|
||||||
return Meter(self.registers(base, 105))
|
return Meter(self.registers(base, 105))
|
||||||
|
|
||||||
|
def meter_info(self, n):
|
||||||
|
base = 40121 + 174*n
|
||||||
|
return MeterInfo(self.registers(base, 69))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user