def test_mode_to_knx(self): """Test parsing DPTHVACMode to KNX.""" assert DPTHVACMode.to_knx(HVACOperationMode.AUTO) == (0x00,) assert DPTHVACMode.to_knx(HVACOperationMode.COMFORT) == (0x01,) assert DPTHVACMode.to_knx(HVACOperationMode.STANDBY) == (0x02,) assert DPTHVACMode.to_knx(HVACOperationMode.NIGHT) == (0x03,) assert DPTHVACMode.to_knx(HVACOperationMode.FROST_PROTECTION) == (0x04,)
def test_mode_to_knx(self): """Test parsing DPTHVACMode to KNX.""" self.assertEqual(DPTHVACMode.to_knx(HVACOperationMode.AUTO), (0x00,)) self.assertEqual(DPTHVACMode.to_knx(HVACOperationMode.COMFORT), (0x01,)) self.assertEqual(DPTHVACMode.to_knx(HVACOperationMode.STANDBY), (0x02,)) self.assertEqual(DPTHVACMode.to_knx(HVACOperationMode.NIGHT), (0x03,)) self.assertEqual( DPTHVACMode.to_knx(HVACOperationMode.FROST_PROTECTION), (0x04,) )
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_set_operation_mode(self): """Test set_operation_mode.""" xknx = XKNX(loop=self.loop) climate_mode = ClimateMode(xknx, 'TestClimate', group_address_operation_mode='1/2/4') for operation_mode in DPT_20102_MODES: 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(DPTHVACMode.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_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 test_mode_to_knx_wrong_value(self): """Test serializing DPTHVACMode to KNX with wrong value.""" with pytest.raises(ConversionError): DPTHVACMode.to_knx(5)