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]