async def test_ranged_value_to_percentage_large(): """Test a large range of low and high values convert a single value to a percentage.""" range = (1, 255) assert ranged_value_to_percentage(range, 255) == 100 assert ranged_value_to_percentage(range, 127) == 49 assert ranged_value_to_percentage(range, 10) == 3 assert ranged_value_to_percentage(range, 1) == 0
async def test_ranged_value_to_percentage_starting_zero(): """Test a range that starts with 0.""" range = (0, 3) assert ranged_value_to_percentage(range, 0) == 25 assert ranged_value_to_percentage(range, 1) == 50 assert ranged_value_to_percentage(range, 2) == 75 assert ranged_value_to_percentage(range, 3) == 100
async def test_ranged_value_to_percentage_starting_at_one(): """Test a range that starts with 1.""" range = (1, 4) assert ranged_value_to_percentage(range, 1) == 25 assert ranged_value_to_percentage(range, 2) == 50 assert ranged_value_to_percentage(range, 3) == 75 assert ranged_value_to_percentage(range, 4) == 100
async def test_ranged_value_to_percentage_starting_high(): """Test a range that does not start with 1.""" range = (101, 255) assert ranged_value_to_percentage(range, 101) == 0 assert ranged_value_to_percentage(range, 139) == 25 assert ranged_value_to_percentage(range, 178) == 50 assert ranged_value_to_percentage(range, 217) == 75 assert ranged_value_to_percentage(range, 255) == 100
def percentage_received(msg): """Handle new received MQTT message for the percentage.""" rendered_percentage_payload = self._value_templates[ ATTR_PERCENTAGE](msg.payload) if not rendered_percentage_payload: _LOGGER.debug("Ignoring empty speed from '%s'", msg.topic) return if rendered_percentage_payload == self._payload[ "PERCENTAGE_RESET"]: self._percentage = None self._speed = None self.async_write_op_state() return try: percentage = ranged_value_to_percentage( self._speed_range, int(rendered_percentage_payload)) except ValueError: _LOGGER.warning( "'%s' received on topic %s. '%s' is not a valid speed within the speed range", msg.payload, msg.topic, rendered_percentage_payload, ) return if percentage < 0 or percentage > 100: _LOGGER.warning( "'%s' received on topic %s. '%s' is not a valid speed within the speed range", msg.payload, msg.topic, rendered_percentage_payload, ) return self._percentage = percentage self.async_write_op_state()
def percentage(self): """Return the current speed.""" if self.smartfan.mode == "manual": current_level = self.smartfan.fan_level if current_level is not None: return ranged_value_to_percentage(SPEED_RANGE, current_level) return None
def percentage(self) -> int | None: """Return the current speed percentage.""" if self.info.primary_value.value is None: # guard missing value return None return ranged_value_to_percentage(SPEED_RANGE, self.info.primary_value.value)
def percentage(self) -> int | None: """Return the current speed percentage.""" if ( self._fan_channel.fan_mode is None or self._fan_channel.fan_mode > SPEED_RANGE[1] ): return None if self._fan_channel.fan_mode == 0: return 0 return ranged_value_to_percentage(SPEED_RANGE, self._fan_channel.fan_mode)
async def test_ranged_value_to_percentage_small(): """Test a small range of low and high values convert a single value to a percentage.""" range = (1, 6) assert ranged_value_to_percentage(range, 1) == 16 assert ranged_value_to_percentage(range, 2) == 33 assert ranged_value_to_percentage(range, 3) == 50 assert ranged_value_to_percentage(range, 4) == 66 assert ranged_value_to_percentage(range, 5) == 83 assert ranged_value_to_percentage(range, 6) == 100
def percentage(self) -> int | None: """Return the current speed percentage.""" speed = self._ccb.data.get(SENSOR_FAN_SPEED_MODE) if speed is None: return None return ranged_value_to_percentage(SPEED_RANGE, speed)
def percentage(self) -> int: """Return speed percentage of the fan.""" if self._smarty_fan_speed == 0: return 0 return ranged_value_to_percentage(SPEED_RANGE, self._smarty_fan_speed)
def percentage(self) -> int: """Return the current speed percentage for the fan.""" if not self._speed or not self._power: return 0 return ranged_value_to_percentage(self._speed_range, self._speed)
def percentage(self): """Return the current speed percentage.""" if self.auto_mode: return None return ranged_value_to_percentage(SPEED_RANGE, int(self._device.state.speed))
def percentage(self) -> int: """Return the current speed percentage.""" if self._insteon_device_group.value is None: return None return ranged_value_to_percentage(SPEED_RANGE, self._insteon_device_group.value)
def percentage(self) -> int | None: """Return the current speed percentage.""" if self._node.status == ISY_VALUE_UNKNOWN: return None return ranged_value_to_percentage(SPEED_RANGE, self._node.status)
def percentage(self) -> int: """Return the current speed percentage.""" return ranged_value_to_percentage(SPEED_RANGE, self._fan_mode)
def percentage(self) -> int: """Return the current speed percentage.""" return ranged_value_to_percentage(SPEED_RANGE, self._device.status.fan_speed)
def percentage(self): """Return the current speed percentage.""" return ranged_value_to_percentage(SPEED_RANGE, self._state)