1 """Support for Home Assistant iOS app sensors."""
3 from __future__
import annotations
10 SensorEntityDescription,
26 ATTR_BATTERY_STATE_FULL,
27 ATTR_BATTERY_STATE_UNKNOWN,
28 ATTR_BATTERY_STATE_UNPLUGGED,
32 ATTR_DEVICE_PERMANENT_ID,
33 ATTR_DEVICE_SYSTEM_VERSION,
38 SENSOR_TYPES: tuple[SensorEntityDescription, ...] = (
41 native_unit_of_measurement=PERCENTAGE,
42 device_class=SensorDeviceClass.BATTERY,
46 translation_key=
"battery_state",
50 DEFAULT_ICON_LEVEL =
"mdi:battery"
51 DEFAULT_ICON_STATE =
"mdi:power-plug"
57 add_entities: AddEntitiesCallback,
58 discovery_info: DiscoveryInfoType |
None =
None,
60 """Set up the iOS sensor."""
66 config_entry: ConfigEntry,
67 async_add_entities: AddEntitiesCallback,
69 """Set up iOS from a config entry."""
71 IOSSensor(device_name, device, description)
72 for device_name, device
in devices(hass).items()
73 for description
in SENSOR_TYPES
78 """Representation of an iOS sensor."""
80 _attr_should_poll =
False
81 _attr_has_entity_name =
True
86 device: dict[str, Any],
87 description: SensorEntityDescription,
89 """Initialize the sensor."""
93 device_id = device[ATTR_DEVICE_ID]
98 """Return information about the device."""
103 self.
_device_device[ATTR_DEVICE][ATTR_DEVICE_PERMANENT_ID],
106 manufacturer=
"Apple",
107 model=self.
_device_device[ATTR_DEVICE][ATTR_DEVICE_TYPE],
108 name=self.
_device_device[ATTR_DEVICE][ATTR_DEVICE_NAME],
109 sw_version=self.
_device_device[ATTR_DEVICE][ATTR_DEVICE_SYSTEM_VERSION],
114 """Return the device state attributes."""
115 device = self.
_device_device[ATTR_DEVICE]
116 device_battery = self.
_device_device[ATTR_BATTERY]
118 "Battery State": device_battery[ATTR_BATTERY_STATE],
119 "Battery Level": device_battery[ATTR_BATTERY_LEVEL],
120 "Device Type": device[ATTR_DEVICE_TYPE],
121 "Device Name": device[ATTR_DEVICE_NAME],
122 "Device Version": device[ATTR_DEVICE_SYSTEM_VERSION],
127 """Return the icon to use in the frontend, if any."""
128 device_battery = self.
_device_device[ATTR_BATTERY]
129 battery_state = device_battery[ATTR_BATTERY_STATE]
130 battery_level = device_battery[ATTR_BATTERY_LEVEL]
132 icon_state = DEFAULT_ICON_STATE
133 if battery_state
in (
134 ATTR_BATTERY_STATE_FULL,
135 ATTR_BATTERY_STATE_UNPLUGGED,
138 icon_state = f
"{DEFAULT_ICON_STATE}-off"
139 elif battery_state == ATTR_BATTERY_STATE_UNKNOWN:
142 icon_state = f
"{DEFAULT_ICON_LEVEL}-unknown"
149 def _update(self, device: dict[str, Any]) ->
None:
150 """Get the latest state of the sensor."""
158 """Handle addition to hass: register to dispatch."""
162 device_id = self.
_device_device[ATTR_DEVICE_ID]
dict[str, Any] extra_state_attributes(self)
None async_added_to_hass(self)
None __init__(self, str device_name, dict[str, Any] device, SensorEntityDescription description)
None _update(self, dict[str, Any] device)
DeviceInfo device_info(self)
None async_write_ha_state(self)
None async_on_remove(self, CALLBACK_TYPE func)
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)
dict[str, dict[str, Any]] devices(HomeAssistant hass)
Callable[[], None] async_dispatcher_connect(HomeAssistant hass, str signal, Callable[..., Any] target)
str icon_for_battery_level(int|None battery_level=None, bool charging=False)