Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
 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)
Beispiel #7
0
 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,))
Beispiel #8
0
 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, ))
Beispiel #9
0
    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))))
Beispiel #10
0
    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))))
Beispiel #11
0
 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)
Beispiel #12
0
 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)
Beispiel #13
0
 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)
Beispiel #14
0
 def test_controller_status_from_knx_wrong_code(self):
     """Test parsing of DPTControllerStatus with wrong code."""
     with self.assertRaises(CouldNotParseKNXIP):
         DPTControllerStatus.from_knx((0x00, ))
Beispiel #15
0
 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)
Beispiel #16
0
 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))
Beispiel #17
0
 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)
Beispiel #18
0
 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)
Beispiel #19
0
 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))
Beispiel #20
0
 def test_controller_status_from_knx_wrong_code(self):
     """Test parsing of DPTControllerStatus with wrong code."""
     with self.assertRaises(CouldNotParseKNXIP):
         DPTControllerStatus.from_knx((0x00,))