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
|
||||||
31
sunspec.py
31
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):
|
||||||
@ -65,6 +65,27 @@ class CommonBlock:
|
|||||||
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