1 """Number platform for BMW."""
3 from collections.abc
import Callable, Coroutine
4 from dataclasses
import dataclass
8 from bimmer_connected.models
import MyBMWAPIError
9 from bimmer_connected.vehicle
import MyBMWVehicle
14 NumberEntityDescription,
21 from .
import BMWConfigEntry
22 from .coordinator
import BMWDataUpdateCoordinator
23 from .entity
import BMWBaseEntity
25 _LOGGER = logging.getLogger(__name__)
28 @dataclass(frozen=True, kw_only=True)
30 """Describes BMW number entity."""
32 value_fn: Callable[[MyBMWVehicle], float | int |
None]
33 remote_service: Callable[[MyBMWVehicle, float | int], Coroutine[Any, Any, Any]]
34 is_available: Callable[[MyBMWVehicle], bool] =
lambda _:
False
35 dynamic_options: Callable[[MyBMWVehicle], list[str]] |
None =
None
38 NUMBER_TYPES: list[BMWNumberEntityDescription] = [
41 translation_key=
"target_soc",
42 device_class=NumberDeviceClass.BATTERY,
43 is_available=
lambda v: v.is_remote_set_target_soc_enabled,
44 native_max_value=100.0,
45 native_min_value=20.0,
47 mode=NumberMode.SLIDER,
48 value_fn=
lambda v: v.fuel_and_battery.charging_target,
49 remote_service=
lambda v, o: v.remote_services.trigger_charging_settings_update(
58 config_entry: BMWConfigEntry,
59 async_add_entities: AddEntitiesCallback,
61 """Set up the MyBMW number from config entry."""
62 coordinator = config_entry.runtime_data.coordinator
64 entities: list[BMWNumber] = []
66 for vehicle
in coordinator.account.vehicles:
67 if not coordinator.read_only:
70 BMWNumber(coordinator, vehicle, description)
71 for description
in NUMBER_TYPES
72 if description.is_available(vehicle)
79 """Representation of BMW Number entity."""
81 entity_description: BMWNumberEntityDescription
85 coordinator: BMWDataUpdateCoordinator,
86 vehicle: MyBMWVehicle,
87 description: BMWNumberEntityDescription,
89 """Initialize an BMW Number."""
90 super().
__init__(coordinator, vehicle)
96 """Return the entity value to represent the entity state."""
100 """Update to the vehicle."""
102 "Executing '%s' on vehicle '%s' to value '%s'",
109 except MyBMWAPIError
as ex:
None __init__(self, BMWDataUpdateCoordinator coordinator, MyBMWVehicle vehicle, BMWNumberEntityDescription description)
float|None native_value(self)
None async_set_native_value(self, float value)
None async_update_listeners(self)
None async_setup_entry(HomeAssistant hass, BMWConfigEntry config_entry, AddEntitiesCallback async_add_entities)