Пример #1
0
    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
Пример #2
0
 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')
Пример #3
0
 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)
Пример #4
0
 def test_IS10raw(self):
     dIS10=v.create('IS10',b'e\x00')
     self.assertEqual(dIS10.value, 10.1)
Пример #5
0
 def test_IS10(self):
     dIS10=v.create('IS10',10.15)
     self.assertEqual(dIS10.value, 10.1)
Пример #6
0
 def test_DTstr(self):
     dDT=v.create('DT','unknown')
     self.assertEqual(dDT,b'\x00\x00')
Пример #7
0
 def test_DTraw(self):
     #initialize from raw data
     dDT=v.create('DT',b'\x20\x4D')
     self.assertEqual(dDT.value, 'V200WO1C, Protokoll: P300')
Пример #8
0
 def test_DTempty(self):
     #initialize empty device typt (standard)
     dDT= v.create('DT')
     self.assertEqual(dDT.value, 'unknown')
Пример #9
0
 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)
Пример #10
0
 def test_IUNONraw(self):
     dIUNON=v.create('IUNON',b'\x9f\x01')
     self.assertEqual(dIUNON.value, 415)
Пример #11
0
 def test_BA04(self):
     #create class with constructor and parameter
     dBA= v.create('BA', 'dauernd reduziert')
     self.assertEqual(dBA,b'\x04')
Пример #12
0
 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')
Пример #13
0
 def test_BA04Empty(self):
     #create empty class and check mode
     dBA= v.create('BA')
     self.assertEqual(dBA.value, 'undefiniert') #defaults to mode 'undefiniert'
Пример #14
0
 def test_OOraw(self):
     dOO=v.create('OO',b'\x02')
     self.assertEqual(dOO.value, 'On')
Пример #15
0
 def execReadCmd(self, cmdName):
     vc = viCommand(cmdName)
     return viData.create('IUNON', random.randint(0, 50))
Пример #16
0
 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)
Пример #17
0
 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)
Пример #18
0
 def test_BA666Empty(self):
     #test call with non-existent mode
     with self.assertRaises(viDataException):
         v.create('BA',b'\x66\x66')
Пример #19
0
 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)
Пример #20
0
 def test_BAfoobar(self):
     #test call with non-existent mode
     with self.assertRaises(viDataException):
         v.create('BA', 'foobar')