Compare commits
2 Commits
7a203753c8
...
49224447bc
| Author | SHA1 | Date | |
|---|---|---|---|
| 49224447bc | |||
| 896bf9f594 |
2
requirements.txt
Normal file
2
requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
bottle==0.13.4
|
||||
pymodbus==3.14.0
|
||||
33
sunspec.py
33
sunspec.py
@ -21,7 +21,7 @@ class Registers:
|
||||
|
||||
def read_uint16(self, address, scale=None):
|
||||
self.check_address(address)
|
||||
value = self.lower.getRegister(address)
|
||||
value = self.lower.registers[address]
|
||||
return self.scale(value, scale)
|
||||
|
||||
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.serial = regs.read_bytes(50, 32)
|
||||
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',
|
||||
3: 'Under Voltage',
|
||||
4: 'Low PF',
|
||||
@ -154,7 +175,7 @@ class InverterBlock:
|
||||
|
||||
class Inverter:
|
||||
def __init__(self, host, port=1502, device=1):
|
||||
self._conn = ModbusTcpClient(host, port)
|
||||
self._conn = ModbusTcpClient(host, port=port)
|
||||
self._device = 1
|
||||
|
||||
def connect(self):
|
||||
@ -165,7 +186,7 @@ class Inverter:
|
||||
if device is None:
|
||||
device = self._device
|
||||
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)
|
||||
|
||||
def header(self, base):
|
||||
@ -180,3 +201,7 @@ class Inverter:
|
||||
def meter(self, n):
|
||||
base = 40190 + 174*n
|
||||
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