Files
elwa-dc/ext/stab_reader.py

139 lines
5.2 KiB
Python

import serial
class StabReader:
def __init__(self, port='/dev/ttyUSB0', baudrate=9600, timeout=1,
xonxoff=False, rtscts=False, dsrdtr=True):
self.port = port
self.baudrate = baudrate
self.timeout = timeout
self.xonxoff = xonxoff
self.rtscts = rtscts
self.dsrdtr = dsrdtr
self.statusDict = {
'dummy0': '',
'firmware': '',
'Betriebstag': '',
'Status': '',
'DcTrenner': '',
'DcRelais': '',
'AcRelais': '',
'Wassertemp': '',
'WassertempMin': '',
'WassertempMax': '',
'SolltempSolar': '',
'SolltempNetz': '',
'GeraeteTemp': '',
'IsoMessung': '',
'Solarspannung': '',
'dummy5.1': '',
'Solarstrom': '',
'Solarleistung': '',
'SolarenergieHeute': '',
'SolarenergieGesammt': '',
'Netzernergie': '',
'dummy6': '',
'dummy7': '',
'dummy8': '',
'dummy9': '',
'dummy10': '',
'dummy11': '',
'dummy12': '',
'Seriennummer': '',
'dummy13': ''
}
self.online = False
self.offline = 0
def get_value(self, name):
return self.statusDict[name]
def is_online(self):
return self.online
def read_state(self):
try:
# configure the serial connections (the parameters differs on the device you are connecting to)
with serial.Serial(port=self.port, baudrate=self.baudrate, timeout=self.timeout,
xonxoff=self.xonxoff, rtscts=self.rtscts, dsrdtr=self.dsrdtr) as ser:
ser.write(bytes('rs\r\n', encoding='utf8'))
for line in ser:
#print(line)
if len(line) < 10:
# line = b'dr\tV1.31\t5\t12\t1\t1\t0\t660\t550\t725\t748\t500\t33\t89\t154.3\t154.83\t0.3276\t50.72\t7843\t34577\t0\t-13\t2.5\t519\t890\t869\t210\t1\t1234567890123456\t748\t1\r\n'
# line = b'dr\tV1.31\t6\t5\t0\t0\t0\t650\t550\t725\t748\t500\t32\t89\t130.5\t42.55\t0.0000\t0.00\t0\t34588\t0\t-3\t0.0\t679\t938\t917\t210\t1\t1234567890123456\t748\t111\r\n'
# line = b'dr\tV1.31\t5\t12\t1\t1\t0\t650\t550\t725\t748\t500\t33\t89\t134.2\t134.70\t0.0050\t0.67\t7854\t34588\t0\t1\t0.1\t269\t926\t905\t210\t1\t1234567890123456\t748\t80\r\n'
# print(line)
self.offline = self.offline + 1
else:
self.offline = 0
self.online = True
string = line.decode('utf-8')
strlist = list(string.split('\t'))
# print(strlist)
index = 0
for d in self.statusDict:
self.statusDict[d] = strlist[index]
index = index + 1
if self.offline == 150:
self.online = False
self.statusDict['Solarspannung'] = '0'
self.statusDict['Solarstrom'] = '0'
self.statusDict['Solarleistung'] = '0'
except Exception as e:
print('Exception: ' + str(e))
pass
finally:
# ser.close()
None
pass
def get_dummy(self, name):
dummyDict = {
'dummy0': '',
'firmware': '',
'Betriebstag': '',
'Status': '',
'DcTrenner': '',
'DcRelais': '',
'AcRelais': '',
'Wassertemp': '',
'WassertempMin': '',
'WassertempMax': '',
'SolltempSolar': '',
'SolltempNetz': '',
'GeraeteTemp': '',
'IsoMessung': '',
'Solarspannung': '',
'dummy5.1': '',
'Solarstrom': '',
'Solarleistung': '',
'SolarenergieHeute': '',
'SolarenergieGesammt': '',
'Netzernergie': '',
'dummy6': '',
'dummy7': '',
'dummy8': '',
'dummy9': '',
'dummy10': '',
'dummy11': '',
'dummy12': '',
'Seriennummer': '',
'dummy13': ''
}
line = b'dr\tV1.31\t5\t12\t1\t1\t0\t660\t550\t725\t748\t500\t33\t89\t154.3\t154.83\t0.3276\t50.72\t7843\t34577\t0\t-13\t2.5\t519\t890\t869\t210\t1\t1234567890123456\t748\t1\r\n'
# line = b'dr\tV1.31\t6\t5\t0\t0\t0\t650\t550\t725\t748\t500\t32\t89\t130.5\t42.55\t0.0000\t0.00\t0\t34588\t0\t-3\t0.0\t679\t938\t917\t210\t1\t1234567890123456\t748\t111\r\n'
# line = b'dr\tV1.31\t5\t12\t1\t1\t0\t650\t550\t725\t748\t500\t33\t89\t134.2\t134.70\t0.0050\t0.67\t7854\t34588\t0\t1\t0.1\t269\t926\t905\t210\t1\t1234567890123456\t748\t80\r\n'
string = line.decode('utf-8')
strlist = list(string.split('\t'))
index = 0
for d in dummyDict:
dummyDict[d] = strlist[index]
index = index + 1
return dummyDict[name]