async def async_set_percentage(self, percentage: int) -> None: """Set the speed percentage of the fan.""" _LOGGER.debug("Setting the fan speed percentage to: %s", percentage) if percentage == 0: await self.async_turn_off() return if not self._state: await self._try_command("Turning the miio device on failed.", self._device.on) await self._try_command( "Setting preset mode of the miio device failed.", self._device.set_speed, FAN_PRESET_MODES_1C[percentage_to_ordered_list_item( FAN_SPEEDS_1C, percentage)], )
async def _async_set_percentage(self, percentage: int | None) -> None: if percentage == 0: await self.async_turn_off() return data: dict[str, Any] = {"key": self._static_info.key, "state": True} if percentage is not None: if self._supports_speed_levels: data["speed_level"] = math.ceil( percentage_to_ranged_value( (1, self._static_info.supported_speed_levels), percentage)) else: named_speed = percentage_to_ordered_list_item( ORDERED_NAMED_FAN_SPEEDS, percentage) data["speed"] = named_speed await self._client.fan_command(**data)
def set_percentage(self, percentage: int) -> None: """Set the speed of the fan, as a percentage.""" if self.device.category == "kj": value_in_range = percentage_to_ordered_list_item( self.air_purifier_speed_range_enum, percentage ) self._send_command( [ { "code": self.dp_code_speed_enum, "value": value_in_range, } ] ) else: self._send_command( [{"code": DPCode.FAN_SPEED_PERCENT, "value": percentage}] )
def set_percentage(self, percentage: int) -> None: """Set the speed of the fan, as a percentage.""" if self._speed is not None: self._send_command([{ "code": self._speed.dpcode, "value": int(self._speed.remap_value_from(percentage, 1, 100)), }]) return if self._speeds is not None: self._send_command([{ "code": self._speeds.dpcode, "value": percentage_to_ordered_list_item(self._speeds.range, percentage), }])
def turn_on(self, speed=None, percentage=None, preset_mode=None, **kwargs): ret = False if not self.is_on: ret = self.set_property(self._prop_power.full_name, True) if self._prop_percentage: if not percentage and speed: percentage = ordered_list_item_to_percentage(self.speed_list, speed) if percentage: ret = self.set_property(self._prop_percentage.full_name, percentage) elif self._prop_speed: if not speed and percentage: speed = percentage_to_ordered_list_item(self.speed_list, percentage) val = self._prop_speed.list_first(speed) if speed else None if val is not None: ret = self.set_property(self._prop_speed.full_name, val) if preset_mode and self._prop_mode: val = self._prop_mode.list_first(preset_mode) if val is not None: ret = self.set_property(self._prop_mode.full_name, val) return ret
def turn_on( self, speed: str = None, percentage: int = None, preset_mode: str = None, **kwargs: Any, ) -> None: """Turn on the fan.""" if self._switch is None: return commands: list[dict[str, str | bool | int]] = [{ "code": self._switch, "value": True }] if percentage is not None and self._speed is not None: commands.append({ "code": self._speed.dpcode, "value": int(self._speed.remap_value_from(percentage, 1, 100)), }) return if percentage is not None and self._speeds is not None: commands.append({ "code": self._speeds.dpcode, "value": percentage_to_ordered_list_item(self._speeds.range, percentage), }) if preset_mode is not None and self._presets is not None: commands.append({ "code": self._presets.dpcode, "value": preset_mode }) self._send_command(commands)
def turn_on(self, speed=None, percentage=None, preset_mode=None, **kwargs): ret = False if not self.is_on: ret = self.set_property(self._prop_power, True) if self._prop_percentage: if not percentage and speed: percentage = ordered_list_item_to_percentage( self.speed_list, speed) if percentage: ret = self.set_property(self._prop_percentage, percentage) elif percentage is not None: _LOGGER.warning('Set fan speed percentage to %s failed: %s', self.name, { 'speed': speed, 'percentage': percentage, }) elif self._prop_speed: if not speed and percentage: speed = percentage_to_ordered_list_item( self.speed_list, percentage) val = self._prop_speed.list_first(speed) if speed else None if val is None and self._prop_speed.value_range: if speed is not None: val = int(speed) if val is not None: ret = self.set_property(self._prop_speed, val) elif speed is not None: _LOGGER.warning('Set fan speed level to %s failed: %s', self.name, { 'speed': speed, 'percentage': percentage, 'value': val, }) if preset_mode and self._prop_mode: val = self._prop_mode.list_first(preset_mode) if val is not None: ret = self.set_property(self._prop_mode, val) return ret
async def test_percentage_to_ordered_list_item(): """Test item that most closely matches the percentage in an ordered list.""" assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 1) == SPEED_1 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 25) == SPEED_1 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 26) == SPEED_2 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 50) == SPEED_2 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 51) == SPEED_3 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 75) == SPEED_3 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 76) == SPEED_4 assert percentage_to_ordered_list_item(SMALL_ORDERED_LIST, 100) == SPEED_4 assert percentage_to_ordered_list_item(LEGACY_ORDERED_LIST, 17) == SPEED_LOW assert percentage_to_ordered_list_item(LEGACY_ORDERED_LIST, 33) == SPEED_LOW assert percentage_to_ordered_list_item(LEGACY_ORDERED_LIST, 50) == SPEED_MEDIUM assert percentage_to_ordered_list_item(LEGACY_ORDERED_LIST, 66) == SPEED_MEDIUM assert percentage_to_ordered_list_item(LEGACY_ORDERED_LIST, 84) == SPEED_HIGH assert percentage_to_ordered_list_item(LEGACY_ORDERED_LIST, 100) == SPEED_HIGH assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 1) == SPEED_1 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 14) == SPEED_1 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 25) == SPEED_2 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 26) == SPEED_2 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 28) == SPEED_2 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 29) == SPEED_3 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 41) == SPEED_3 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 42) == SPEED_3 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 43) == SPEED_4 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 56) == SPEED_4 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 50) == SPEED_4 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 51) == SPEED_4 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 75) == SPEED_6 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 76) == SPEED_6 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 100) == SPEED_7 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 1) == SPEED_1 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 25) == SPEED_2 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 26) == SPEED_2 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 50) == SPEED_4 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 51) == SPEED_4 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 75) == SPEED_6 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 76) == SPEED_6 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 100) == SPEED_7 assert percentage_to_ordered_list_item(LARGE_ORDERED_LIST, 100.1) == SPEED_7 with pytest.raises(ValueError): assert percentage_to_ordered_list_item([], 100)
async def async_set_percentage(self, percentage: int) -> None: """Set the speed percentage of the fan.""" await self._device.set_speed( percentage_to_ordered_list_item(ORDERED_NAMED_FAN_SPEEDS, percentage))
def _get_on_mode(self) -> str: if self.ordered_fan_speeds: return percentage_to_ordered_list_item(self.ordered_fan_speeds, 50) return self.fan_modes[FAN_ON]
def _set_fan_speed(self, speed) -> None: _LOGGER.debug("%s: Set fan speed to %s", self.entity_id, speed) mode = percentage_to_ordered_list_item(self.ordered_fan_speeds, speed - 1) params = {ATTR_ENTITY_ID: self.entity_id, ATTR_FAN_MODE: mode} self.async_call_service(DOMAIN_CLIMATE, SERVICE_SET_FAN_MODE, params)
async def async_set_percentage(self, percentage: int) -> None: """Set speed.""" new_speed = percentage_to_ordered_list_item(ORDERED_NAMED_FAN_SPEEDS, percentage) await self._device.send_fan_speed(int(new_speed)) self.coordinator.async_set_updated_data(self._device.state)
def percentage_to_speed( # pylint: disable=no-self-use self, percentage: int) -> str: """Map a percentage to a legacy speed.""" if percentage == 0: return SPEED_OFF return percentage_to_ordered_list_item(LEGACY_SPEED_LIST, percentage)
async def async_set_percentage(self, percentage: int) -> None: """Set speed.""" new_speed = percentage_to_ordered_list_item(ORDERED_NAMED_FAN_SPEEDS, percentage) async with self.coordinator.async_connect_and_update() as device: await device.send_fan_speed(int(new_speed))