def execWriteCmd(self, cmdname, value) -> viData: # sends a read command and gets the response. vc = viCommand(cmdname) if not vc.write: raise viControlException(f'command {cmdname} cannot be written') # create viData object vd = viData.create(vc.unit, value) # create write Telegram vt = viTelegram(vc, 'Write', 'Request', vd) # send Telegram self.vs.send(vt) # Check if sending was successfull ack = self.vs.read(1) logging.debug(f'Received {ack.hex()}') if ack != ctrlcode['acknowledge']: raise viControlException( f'Expected acknowledge byte, received {ack}') # Receive response and evaluate data vr = self.vs.read(vt.__responselen__) # receive response logging.debug( f'Requested {vt.__responselen__} bytes. Received telegram {vr.hex()}' ) self.vs.send(ctrlcode['acknowledge']) # send acknowledge vt = viTelegram.frombytes(vr) # create response Telegram if vt.tType == viTelegram.tTypes['error']: raise viControlException('Write command returned an error') return viData.create(vt.vicmd.unit, vt.payload) # return viData object from payload
def test_telegramdata3(self): # 'write' telegram b = bytes.fromhex('41 09 01 02 05 04 04 19') vt = v.viTelegram.frombytes(b) vd = d.create(vt.vicmd.unit, vt.payload) self.assertEqual('write', vt.TelegramMode) self.assertEqual(8, vt.__responselen__) self.assertEqual(vt.vicmd.cmdname, 'EinschaltungenSekundaer') self.assertEqual(vt.vicmd.unit, 'IUNON')
def test_telegramdata2(self): # 'Read' telegram b = bytes.fromhex('41 09 01 01 05 04 04 e4 29 00 00 25') vt = v.viTelegram.frombytes(b) vd = d.create(vt.vicmd.unit, vt.payload) self.assertEqual('read', vt.TelegramMode) self.assertEqual(12, vt.__responselen__) self.assertEqual(vt.vicmd.cmdname, 'EinschaltungenSekundaer') self.assertEqual(vt.vicmd.unit, 'IUNON') self.assertEqual(vd.value, 10724)
def test_IS10raw(self): dIS10=v.create('IS10',b'e\x00') self.assertEqual(dIS10.value, 10.1)
def test_IS10(self): dIS10=v.create('IS10',10.15) self.assertEqual(dIS10.value, 10.1)
def test_DTstr(self): dDT=v.create('DT','unknown') self.assertEqual(dDT,b'\x00\x00')
def test_DTraw(self): #initialize from raw data dDT=v.create('DT',b'\x20\x4D') self.assertEqual(dDT.value, 'V200WO1C, Protokoll: P300')
def test_DTempty(self): #initialize empty device typt (standard) dDT= v.create('DT') self.assertEqual(dDT.value, 'unknown')
def test_telegramdata1(self): b = bytes.fromhex('41 07 01 01 01 0d 02 65 00 7e') vt = v.viTelegram.frombytes(b) vd = d.create(vt.vicmd.unit, vt.payload) self.assertEqual(vt.vicmd.unit, 'IS10') self.assertEqual(vd.value, 10.1)
def test_IUNONraw(self): dIUNON=v.create('IUNON',b'\x9f\x01') self.assertEqual(dIUNON.value, 415)
def test_BA04(self): #create class with constructor and parameter dBA= v.create('BA', 'dauernd reduziert') self.assertEqual(dBA,b'\x04')
def test_BA04raw(self): #create class with defined operation mode from raw byte dBA=v.create('BA',b'\x04') self.assertEqual(dBA.value, 'dauernd reduziert')
def test_BA04Empty(self): #create empty class and check mode dBA= v.create('BA') self.assertEqual(dBA.value, 'undefiniert') #defaults to mode 'undefiniert'
def test_OOraw(self): dOO=v.create('OO',b'\x02') self.assertEqual(dOO.value, 'On')
def execReadCmd(self, cmdName): vc = viCommand(cmdName) return viData.create('IUNON', random.randint(0, 50))
def test_IS10minus(self): f=-9.856 dIS10=v.create('IS10',f) print(f'Hex representation of {f} is {dIS10.hex()}') self.assertEqual(dIS10.value, -9.8)
def test_IUNON(self): f=415 dIUNON=v.create('IUNON',f) print(f'Hex representation of {f} is {dIUNON.hex()}') self.assertEqual(dIUNON.value, f)
def test_BA666Empty(self): #test call with non-existent mode with self.assertRaises(viDataException): v.create('BA',b'\x66\x66')
def test_OO(self): f='On' dOO=v.create('OO',f) print(f'Hex representation of {f} is {dOO.hex()}') self.assertEqual(dOO.value, f)
def test_BAfoobar(self): #test call with non-existent mode with self.assertRaises(viDataException): v.create('BA', 'foobar')