def test_set_binary(self):
     """Test setting value."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx,
         group_address=GroupAddress("1/2/3"),
         operation_mode=HVACOperationMode.STANDBY,
     )
     self.loop.run_until_complete(
         remote_value.set(HVACOperationMode.STANDBY))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram,
         Telegram(
             destination_address=GroupAddress("1/2/3"),
             payload=GroupValueWrite(DPTBinary(True)),
         ),
     )
     self.loop.run_until_complete(
         remote_value.set(HVACOperationMode.FROST_PROTECTION))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram,
         Telegram(
             destination_address=GroupAddress("1/2/3"),
             payload=GroupValueWrite(DPTBinary(False)),
         ),
     )
 def test_from_knx_binary_error(self):
     """Test from_knx function with invalid payload."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx, operation_mode=HVACOperationMode.COMFORT)
     with self.assertRaises(CouldNotParseTelegram):
         remote_value.from_knx(DPTArray((0x9, 0xF)))
 def test_from_knx_binary(self):
     """Test from_knx function with normal operation."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx, operation_mode=HVACOperationMode.COMFORT)
     self.assertEqual(remote_value.from_knx(DPTBinary(True)),
                      HVACOperationMode.COMFORT)
     self.assertEqual(remote_value.from_knx(DPTBinary(False)), None)
 def test_to_knx_binary(self):
     """Test to_knx function with normal operation."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx, operation_mode=HVACOperationMode.COMFORT)
     assert remote_value.to_knx(
         HVACOperationMode.COMFORT) == DPTBinary(True)
     assert remote_value.to_knx(HVACOperationMode.NIGHT) == DPTBinary(False)
 def test_process_binary(self):
     """Test process telegram."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx,
         group_address=GroupAddress("1/2/3"),
         operation_mode=HVACOperationMode.FROST_PROTECTION,
     )
     telegram = Telegram(group_address=GroupAddress("1/2/3"),
                         payload=DPTBinary(True))
     self.loop.run_until_complete(remote_value.process(telegram))
     self.assertEqual(remote_value.value,
                      HVACOperationMode.FROST_PROTECTION)
 def test_to_knx_error_binary(self):
     """Test to_knx function with wrong parameter."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx, operation_mode=HVACOperationMode.NIGHT)
     with self.assertRaises(ConversionError):
         remote_value.to_knx(256)
     with self.assertRaises(ConversionError):
         remote_value.to_knx(True)
     with self.assertRaises(ConversionError):
         remote_value.to_knx(HVACControllerMode.HEAT)
 async def test_process_binary(self):
     """Test process telegram."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx,
         group_address=GroupAddress("1/2/3"),
         operation_mode=HVACOperationMode.FROST_PROTECTION,
     )
     telegram = Telegram(
         destination_address=GroupAddress("1/2/3"),
         payload=GroupValueWrite(DPTBinary(True)),
     )
     await remote_value.process(telegram)
     assert remote_value.value == HVACOperationMode.FROST_PROTECTION
 async def test_set_binary(self):
     """Test setting value."""
     xknx = XKNX()
     remote_value = RemoteValueBinaryOperationMode(
         xknx,
         group_address=GroupAddress("1/2/3"),
         operation_mode=HVACOperationMode.STANDBY,
     )
     await remote_value.set(HVACOperationMode.STANDBY)
     assert xknx.telegrams.qsize() == 1
     telegram = xknx.telegrams.get_nowait()
     assert telegram == Telegram(
         destination_address=GroupAddress("1/2/3"),
         payload=GroupValueWrite(DPTBinary(True)),
     )
     await remote_value.set(HVACOperationMode.FROST_PROTECTION)
     assert xknx.telegrams.qsize() == 1
     telegram = xknx.telegrams.get_nowait()
     assert telegram == Telegram(
         destination_address=GroupAddress("1/2/3"),
         payload=GroupValueWrite(DPTBinary(False)),
     )
示例#9
0
    def __init__(
        self,
        xknx,
        name,
        group_address_operation_mode=None,
        group_address_operation_mode_state=None,
        group_address_operation_mode_protection=None,
        group_address_operation_mode_night=None,
        group_address_operation_mode_comfort=None,
        group_address_operation_mode_standby=None,
        group_address_controller_status=None,
        group_address_controller_status_state=None,
        group_address_controller_mode=None,
        group_address_controller_mode_state=None,
        group_address_heat_cool=None,
        group_address_heat_cool_state=None,
        operation_modes=None,
        controller_modes=None,
        device_updated_cb=None,
    ):
        """Initialize ClimateMode class."""
        # pylint: disable=too-many-arguments, too-many-locals, too-many-branches, too-many-statements
        super().__init__(xknx, name, device_updated_cb)

        self.remote_value_operation_mode = RemoteValueClimateMode(
            xknx,
            group_address=group_address_operation_mode,
            group_address_state=group_address_operation_mode_state,
            sync_state=True,
            device_name=name,
            feature_name="Operation mode",
            climate_mode_type=RemoteValueClimateMode.ClimateModeType.HVAC_MODE,
            after_update_cb=None,
        )
        self.remote_value_controller_mode = RemoteValueClimateMode(
            xknx,
            group_address=group_address_controller_mode,
            group_address_state=group_address_controller_mode_state,
            sync_state=True,
            device_name=name,
            feature_name="Controller mode",
            climate_mode_type=RemoteValueClimateMode.ClimateModeType.
            HVAC_CONTR_MODE,
            after_update_cb=None,
        )
        self.remote_value_controller_status = RemoteValueClimateMode(
            xknx,
            group_address=group_address_controller_status,
            group_address_state=group_address_controller_status_state,
            sync_state=True,
            device_name=name,
            feature_name="Controller status",
            climate_mode_type=RemoteValueClimateMode.ClimateModeType.
            CONTROLLER_STATUS,
            after_update_cb=None,
        )

        self.remote_value_operation_mode_comfort = RemoteValueBinaryOperationMode(
            xknx,
            group_address=group_address_operation_mode_comfort,
            group_address_state=group_address_operation_mode_comfort,
            sync_state=True,
            device_name=name,
            feature_name="Operation mode Comfort",
            operation_mode=HVACOperationMode.COMFORT,
            after_update_cb=None,
        )
        self.remote_value_operation_mode_standby = RemoteValueBinaryOperationMode(
            xknx,
            group_address=group_address_operation_mode_standby,
            group_address_state=group_address_operation_mode_standby,
            sync_state=True,
            device_name=name,
            feature_name="Operation mode Standby",
            operation_mode=HVACOperationMode.STANDBY,
            after_update_cb=None,
        )
        self.remote_value_operation_mode_night = RemoteValueBinaryOperationMode(
            xknx,
            group_address=group_address_operation_mode_night,
            group_address_state=group_address_operation_mode_night,
            sync_state=True,
            device_name=name,
            feature_name="Operation mode Night",
            operation_mode=HVACOperationMode.NIGHT,
            after_update_cb=None,
        )
        self.remote_value_operation_mode_protection = RemoteValueBinaryOperationMode(
            xknx,
            group_address=group_address_operation_mode_protection,
            group_address_state=group_address_operation_mode_protection,
            sync_state=True,
            device_name=name,
            feature_name="Operation mode Protection",
            operation_mode=HVACOperationMode.FROST_PROTECTION,
            after_update_cb=None,
        )
        self.remote_value_heat_cool = RemoteValueBinaryHeatCool(
            xknx,
            group_address=group_address_heat_cool,
            group_address_state=group_address_heat_cool_state,
            sync_state=True,
            device_name=name,
            feature_name="Heat/Cool",
            controller_mode=HVACControllerMode.HEAT,
            after_update_cb=None,
        )

        self.operation_mode = HVACOperationMode.STANDBY
        self.controller_mode = HVACControllerMode.HEAT

        self._operation_modes = []
        if operation_modes is None:
            self._operation_modes = self.gather_operation_modes()
        else:
            for mode in operation_modes:
                if isinstance(mode, str):
                    self._operation_modes.append(HVACOperationMode(mode))
                elif isinstance(mode, HVACOperationMode):
                    self._operation_modes.append(mode)

        self._controller_modes = []
        if controller_modes is None:
            self._controller_modes = self.gather_controller_modes()
        else:
            for mode in controller_modes:
                if isinstance(mode, str):
                    self._controller_modes.append(HVACControllerMode(mode))
                elif isinstance(mode, HVACControllerMode):
                    self._controller_modes.append(mode)

        self.supports_operation_mode = any(
            operation_mode.initialized
            for operation_mode in self._iter_byte_operation_modes()) or any(
                operation_mode.initialized
                for operation_mode in self._iter_binary_operation_modes())
        self.supports_controller_mode = any(
            operation_mode.initialized
            for operation_mode in self._iter_controller_remote_values())

        self._use_binary_operation_modes = any(
            operation_mode.initialized
            for operation_mode in self._iter_binary_operation_modes())