def test_controller_status_from_knx_other_bits_set(self): """Test parsing DPTControllerStatus from KNX.""" self.assertEqual(DPTControllerStatus.from_knx((0x21, )), HVACOperationMode.COMFORT) self.assertEqual(DPTControllerStatus.from_knx((0x23, )), HVACOperationMode.STANDBY) self.assertEqual(DPTControllerStatus.from_knx((0x27, )), HVACOperationMode.NIGHT) self.assertEqual(DPTControllerStatus.from_knx((0x2F, )), HVACOperationMode.FROST_PROTECTION)
def _process_controller_status(self, telegram): """Process incoming telegram for controller status.""" if not isinstance(telegram.payload, DPTArray) \ or len(telegram.payload.value) != 1: raise CouldNotParseTelegram() operation_mode = DPTControllerStatus.from_knx(telegram.payload.value) yield from self._set_internal_operation_mode(operation_mode)
async def set_operation_mode(self, operation_mode): """Set the operation mode of a thermostat. Send new operation_mode to BUS and update internal state.""" if not self.supports_operation_mode: raise DeviceIllegalValue("operation mode not supported", operation_mode) if self.group_address_operation_mode is not None: await self.send( self.group_address_operation_mode, DPTArray(DPTHVACMode.to_knx(operation_mode))) if self.group_address_operation_mode_protection is not None: protection_mode = operation_mode == HVACOperationMode.FROST_PROTECTION await self.send( self.group_address_operation_mode_protection, DPTBinary(protection_mode)) if self.group_address_operation_mode_night is not None: night_mode = operation_mode == HVACOperationMode.NIGHT await self.send( self.group_address_operation_mode_night, DPTBinary(night_mode)) if self.group_address_operation_mode_comfort is not None: comfort_mode = operation_mode == HVACOperationMode.COMFORT await self.send( self.group_address_operation_mode_comfort, DPTBinary(comfort_mode)) if self.group_address_controller_status is not None: await self.send( self.group_address_controller_status, DPTArray(DPTControllerStatus.to_knx(operation_mode))) if self.group_address_controller_mode is not None: await self.send( self.group_address_controller_mode, DPTArray(DPTHVACContrMode.to_knx(operation_mode))) await self._set_internal_operation_mode(operation_mode)
async def _process_controller_status(self, telegram): """Process incoming telegram for controller status.""" if not isinstance(telegram.payload, DPTArray) \ or len(telegram.payload.value) != 1: raise CouldNotParseTelegram("invalid payload", payload=telegram.payload, device_name=self.name) operation_mode = DPTControllerStatus.from_knx(telegram.payload.value) await self._set_internal_operation_mode(operation_mode)
async def set_operation_mode(self, operation_mode): """Set the operation mode of a thermostat. Send new operation_mode to BUS and update internal state.""" if not self.supports_operation_mode: raise DeviceIllegalValue("operation mode not supported", operation_mode) if self.group_address_operation_mode is not None: await self.send(self.group_address_operation_mode, DPTArray(DPTHVACMode.to_knx(operation_mode))) if self.group_address_operation_mode_protection is not None: protection_mode = operation_mode == HVACOperationMode.FROST_PROTECTION await self.send(self.group_address_operation_mode_protection, DPTBinary(protection_mode)) if self.group_address_operation_mode_night is not None: night_mode = operation_mode == HVACOperationMode.NIGHT await self.send(self.group_address_operation_mode_night, DPTBinary(night_mode)) if self.group_address_operation_mode_comfort is not None: comfort_mode = operation_mode == HVACOperationMode.COMFORT await self.send(self.group_address_operation_mode_comfort, DPTBinary(comfort_mode)) if self.group_address_controller_status is not None: await self.send( self.group_address_controller_status, DPTArray(DPTControllerStatus.to_knx(operation_mode))) if self.group_address_controller_mode is not None: await self.send(self.group_address_controller_mode, DPTArray(DPTHVACContrMode.to_knx(operation_mode))) await self._set_internal_operation_mode(operation_mode)
def test_controller_status_to_knx(self): """Test serializing DPTControllerStatus to KNX.""" with self.assertRaises(ConversionError): DPTControllerStatus.to_knx(HVACOperationMode.AUTO) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.COMFORT), (0x21,)) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.STANDBY), (0x22,)) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.NIGHT), (0x24,)) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.FROST_PROTECTION), (0x28,))
def test_controller_status_to_knx(self): """Test parsing DPTControllerStatus to KNX.""" with self.assertRaises(ConversionError): DPTControllerStatus.to_knx(HVACOperationMode.AUTO) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.COMFORT), (0x21, )) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.STANDBY), (0x22, )) self.assertEqual(DPTControllerStatus.to_knx(HVACOperationMode.NIGHT), (0x24, )) self.assertEqual( DPTControllerStatus.to_knx(HVACOperationMode.FROST_PROTECTION), (0x28, ))
def test_set_operation_mode_with_controller_status(self): """Test set_operation_mode with controller status adddressedefined.""" xknx = XKNX(loop=self.loop) climate_mode = ClimateMode(xknx, 'TestClimate', group_address_controller_status='1/2/4') for operation_mode in DPT_20102_MODES: if operation_mode == HVACOperationMode.AUTO: continue self.loop.run_until_complete( asyncio.Task(climate_mode.set_operation_mode(operation_mode))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual( telegram, Telegram(GroupAddress('1/2/4'), payload=DPTArray( DPTControllerStatus.to_knx(operation_mode))))
def test_set_operation_mode_with_controller_status(self): """Test set_operation_mode with controller status adddressedefined.""" xknx = XKNX(loop=self.loop) climate_mode = ClimateMode( xknx, 'TestClimate', group_address_controller_status='1/2/4') for operation_mode in DPT_20102_MODES: if operation_mode == HVACOperationMode.AUTO: continue self.loop.run_until_complete(asyncio.Task(climate_mode.set_operation_mode(operation_mode))) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual( telegram, Telegram( GroupAddress('1/2/4'), payload=DPTArray(DPTControllerStatus.to_knx(operation_mode))))
def test_process_operation_mode(self): """Test process / reading telegrams from telegram queue. Test if setpoint is processed correctly.""" xknx = XKNX(loop=self.loop) climate = Climate( xknx, 'TestClimate', group_address_operation_mode='1/2/5', group_address_controller_status='1/2/3') for operation_mode in HVACOperationMode: telegram = Telegram(Address('1/2/5')) telegram.payload = DPTArray(DPTHVACMode.to_knx(operation_mode)) self.loop.run_until_complete(asyncio.Task(climate.process(telegram))) self.assertEqual(climate.operation_mode, operation_mode) for operation_mode in HVACOperationMode: if operation_mode == HVACOperationMode.AUTO: continue telegram = Telegram(Address('1/2/3')) telegram.payload = DPTArray(DPTControllerStatus.to_knx(operation_mode)) self.loop.run_until_complete(asyncio.Task(climate.process(telegram))) self.assertEqual(climate.operation_mode, operation_mode)
def test_process_operation_mode(self): """Test process / reading telegrams from telegram queue. Test if setpoint is processed correctly.""" xknx = XKNX(loop=self.loop) climate_mode = ClimateMode( xknx, 'TestClimate', group_address_operation_mode='1/2/5', group_address_controller_status='1/2/3') for operation_mode in DPT_20102_MODES: telegram = Telegram(GroupAddress('1/2/5')) telegram.payload = DPTArray(DPTHVACMode.to_knx(operation_mode)) self.loop.run_until_complete(asyncio.Task(climate_mode.process(telegram))) self.assertEqual(climate_mode.operation_mode, operation_mode) for operation_mode in DPT_20102_MODES: if operation_mode == HVACOperationMode.AUTO: continue telegram = Telegram(GroupAddress('1/2/3')) telegram.payload = DPTArray(DPTControllerStatus.to_knx(operation_mode)) self.loop.run_until_complete(asyncio.Task(climate_mode.process(telegram))) self.assertEqual(climate_mode.operation_mode, operation_mode)
def set_operation_mode(self, operation_mode): """Set the operation mode of a thermostat. Send new operation_mode to BUS and update internal state.""" if not self.supports_operation_mode: return if self.group_address_operation_mode is not None: yield from self.send(self.group_address_operation_mode, DPTArray(DPTHVACMode.to_knx(operation_mode))) if self.group_address_operation_mode_protection is not None: protection_mode = operation_mode == HVACOperationMode.FROST_PROTECTION yield from self.send(self.group_address_operation_mode_protection, DPTBinary(protection_mode)) if self.group_address_operation_mode_night is not None: night_mode = operation_mode == HVACOperationMode.NIGHT yield from self.send(self.group_address_operation_mode_night, DPTBinary(night_mode)) if self.group_address_operation_mode_comfort is not None: comfort_mode = operation_mode == HVACOperationMode.COMFORT yield from self.send(self.group_address_operation_mode_comfort, DPTBinary(comfort_mode)) if self.group_address_controller_status is not None: yield from self.send( self.group_address_controller_status, DPTArray(DPTControllerStatus.to_knx(operation_mode))) yield from self._set_internal_operation_mode(operation_mode)
def test_controller_status_from_knx_wrong_code(self): """Test parsing of DPTControllerStatus with wrong code.""" with self.assertRaises(CouldNotParseKNXIP): DPTControllerStatus.from_knx((0x00, ))
def test_controller_status_to_knx_wrong_value(self): """Test serializing DPTControllerStatus to KNX with wrong value.""" with self.assertRaises(ConversionError): DPTControllerStatus.to_knx(5)
def test_controller_status_from_knx_wrong_value(self): """Test parsing of DPTControllerStatus with wrong value).""" with self.assertRaises(ConversionError): DPTControllerStatus.from_knx((1, 2))
def test_controller_status_from_knx_other_bits_set(self): """Test parsing DPTControllerStatus from KNX.""" self.assertEqual(DPTControllerStatus.from_knx((0x21,)), HVACOperationMode.COMFORT) self.assertEqual(DPTControllerStatus.from_knx((0x23,)), HVACOperationMode.STANDBY) self.assertEqual(DPTControllerStatus.from_knx((0x27,)), HVACOperationMode.NIGHT) self.assertEqual(DPTControllerStatus.from_knx((0x2F,)), HVACOperationMode.FROST_PROTECTION)
def test_controller_status_from_knx_wrong_code(self): """Test parsing of DPTControllerStatus with wrong code.""" with self.assertRaises(CouldNotParseKNXIP): DPTControllerStatus.from_knx((0x00,))