From 19443b474ccce974db08bbe31ddb9f26e70f9499 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Fri, 15 Oct 2021 19:02:12 +0200 Subject: [PATCH] Merge bmw_connected_drive metric and imperial sensor types (#56910) --- .../components/bmw_connected_drive/sensor.py | 732 +++++++++--------- 1 file changed, 345 insertions(+), 387 deletions(-) diff --git a/homeassistant/components/bmw_connected_drive/sensor.py b/homeassistant/components/bmw_connected_drive/sensor.py index 104a2eb78d9b..1faa858e9d81 100644 --- a/homeassistant/components/bmw_connected_drive/sensor.py +++ b/homeassistant/components/bmw_connected_drive/sensor.py @@ -1,4 +1,6 @@ """Support for reading vehicle status from BMW connected drive portal.""" +from __future__ import annotations + import logging from bimmer_connected.const import SERVICE_ALL_TRIPS, SERVICE_LAST_TRIP, SERVICE_STATUS @@ -27,384 +29,343 @@ from .const import CONF_ACCOUNT, DATA_ENTRIES _LOGGER = logging.getLogger(__name__) -ATTR_TO_HA_METRIC = { - # "": [, , , ], - "mileage": ["mdi:speedometer", None, LENGTH_KILOMETERS, True], - "remaining_range_total": ["mdi:map-marker-distance", None, LENGTH_KILOMETERS, True], - "remaining_range_electric": [ - "mdi:map-marker-distance", +SENSOR_TYPES: dict[str, tuple[str | None, str | None, str | None, str | None, bool]] = { + # "": (, , , , ), + # --- Generic --- + "charging_time_remaining": ( + "mdi:update", None, - LENGTH_KILOMETERS, + TIME_HOURS, + TIME_HOURS, True, - ], - "remaining_range_fuel": ["mdi:map-marker-distance", None, LENGTH_KILOMETERS, True], - "max_range_electric": ["mdi:map-marker-distance", None, LENGTH_KILOMETERS, True], - "remaining_fuel": ["mdi:gas-station", None, VOLUME_LITERS, True], - # LastTrip attributes - "average_combined_consumption": [ - "mdi:flash", + ), + "charging_status": ( + "mdi:battery-charging", + None, + None, None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", True, - ], - "average_electric_consumption": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - True, - ], - "average_recuperation": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - True, - ], - "electric_distance": ["mdi:map-marker-distance", None, LENGTH_KILOMETERS, True], - "saved_fuel": ["mdi:fuel", None, VOLUME_LITERS, False], - "total_distance": ["mdi:map-marker-distance", None, LENGTH_KILOMETERS, True], - # AllTrips attributes - "average_combined_consumption_community_average": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_combined_consumption_community_high": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_combined_consumption_community_low": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_combined_consumption_user_average": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - True, - ], - "average_electric_consumption_community_average": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_electric_consumption_community_high": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_electric_consumption_community_low": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_electric_consumption_user_average": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - True, - ], - "average_recuperation_community_average": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_recuperation_community_high": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_recuperation_community_low": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - False, - ], - "average_recuperation_user_average": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", - True, - ], - "chargecycle_range_community_average": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "chargecycle_range_community_high": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "chargecycle_range_community_low": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "chargecycle_range_user_average": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - True, - ], - "chargecycle_range_user_current_charge_cycle": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - True, - ], - "chargecycle_range_user_high": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - True, - ], - "total_electric_distance_community_average": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "total_electric_distance_community_high": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "total_electric_distance_community_low": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "total_electric_distance_user_average": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "total_electric_distance_user_total": [ - "mdi:map-marker-distance", - None, - LENGTH_KILOMETERS, - False, - ], - "total_saved_fuel": ["mdi:fuel", None, VOLUME_LITERS, False], -} - -ATTR_TO_HA_IMPERIAL = { - # "": [, , , ], - "mileage": ["mdi:speedometer", None, LENGTH_MILES, True], - "remaining_range_total": ["mdi:map-marker-distance", None, LENGTH_MILES, True], - "remaining_range_electric": ["mdi:map-marker-distance", None, LENGTH_MILES, True], - "remaining_range_fuel": ["mdi:map-marker-distance", None, LENGTH_MILES, True], - "max_range_electric": ["mdi:map-marker-distance", None, LENGTH_MILES, True], - "remaining_fuel": ["mdi:gas-station", None, VOLUME_GALLONS, True], - # LastTrip attributes - "average_combined_consumption": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - True, - ], - "average_electric_consumption": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - True, - ], - "average_recuperation": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - True, - ], - "electric_distance": ["mdi:map-marker-distance", None, LENGTH_MILES, True], - "saved_fuel": ["mdi:fuel", None, VOLUME_GALLONS, False], - "total_distance": ["mdi:map-marker-distance", None, LENGTH_MILES, True], - # AllTrips attributes - "average_combined_consumption_community_average": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_combined_consumption_community_high": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_combined_consumption_community_low": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_combined_consumption_user_average": [ - "mdi:flash", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - True, - ], - "average_electric_consumption_community_average": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_electric_consumption_community_high": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_electric_consumption_community_low": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_electric_consumption_user_average": [ - "mdi:power-plug-outline", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - True, - ], - "average_recuperation_community_average": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_recuperation_community_high": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_recuperation_community_low": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - False, - ], - "average_recuperation_user_average": [ - "mdi:recycle-variant", - None, - f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", - True, - ], - "chargecycle_range_community_average": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "chargecycle_range_community_high": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "chargecycle_range_community_low": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "chargecycle_range_user_average": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - True, - ], - "chargecycle_range_user_current_charge_cycle": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - True, - ], - "chargecycle_range_user_high": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - True, - ], - "total_electric_distance_community_average": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "total_electric_distance_community_high": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "total_electric_distance_community_low": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "total_electric_distance_user_average": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "total_electric_distance_user_total": [ - "mdi:map-marker-distance", - None, - LENGTH_MILES, - False, - ], - "total_saved_fuel": ["mdi:fuel", None, VOLUME_GALLONS, False], -} - -ATTR_TO_HA_GENERIC = { - # "": [, , , ], - "charging_time_remaining": ["mdi:update", None, TIME_HOURS, True], - "charging_status": ["mdi:battery-charging", None, None, True], + ), # No icon as this is dealt with directly as a special case in icon() - "charging_level_hv": [None, None, PERCENTAGE, True], + "charging_level_hv": ( + None, + None, + PERCENTAGE, + PERCENTAGE, + True, + ), # LastTrip attributes - "date_utc": [None, DEVICE_CLASS_TIMESTAMP, None, True], - "duration": ["mdi:timer-outline", None, TIME_MINUTES, True], - "electric_distance_ratio": ["mdi:percent-outline", None, PERCENTAGE, False], + "date_utc": ( + None, + DEVICE_CLASS_TIMESTAMP, + None, + None, + True, + ), + "duration": ( + "mdi:timer-outline", + None, + TIME_MINUTES, + TIME_MINUTES, + True, + ), + "electric_distance_ratio": ( + "mdi:percent-outline", + None, + PERCENTAGE, + PERCENTAGE, + False, + ), # AllTrips attributes - "battery_size_max": ["mdi:battery-charging-high", None, ENERGY_WATT_HOUR, False], - "reset_date_utc": [None, DEVICE_CLASS_TIMESTAMP, None, False], - "saved_co2": ["mdi:tree-outline", None, MASS_KILOGRAMS, False], - "saved_co2_green_energy": ["mdi:tree-outline", None, MASS_KILOGRAMS, False], + "battery_size_max": ( + "mdi:battery-charging-high", + None, + ENERGY_WATT_HOUR, + ENERGY_WATT_HOUR, + False, + ), + "reset_date_utc": ( + None, + DEVICE_CLASS_TIMESTAMP, + None, + None, + False, + ), + "saved_co2": ( + "mdi:tree-outline", + None, + MASS_KILOGRAMS, + MASS_KILOGRAMS, + False, + ), + "saved_co2_green_energy": ( + "mdi:tree-outline", + None, + MASS_KILOGRAMS, + MASS_KILOGRAMS, + False, + ), + # --- Specific --- + "mileage": ( + "mdi:speedometer", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "remaining_range_total": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "remaining_range_electric": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "remaining_range_fuel": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "max_range_electric": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "remaining_fuel": ( + "mdi:gas-station", + None, + VOLUME_LITERS, + VOLUME_GALLONS, + True, + ), + # LastTrip attributes + "average_combined_consumption": ( + "mdi:flash", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + True, + ), + "average_electric_consumption": ( + "mdi:power-plug-outline", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + True, + ), + "average_recuperation": ( + "mdi:recycle-variant", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + True, + ), + "electric_distance": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "saved_fuel": ( + "mdi:fuel", + None, + VOLUME_LITERS, + VOLUME_GALLONS, + False, + ), + "total_distance": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + # AllTrips attributes + "average_combined_consumption_community_average": ( + "mdi:flash", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_combined_consumption_community_high": ( + "mdi:flash", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_combined_consumption_community_low": ( + "mdi:flash", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_combined_consumption_user_average": ( + "mdi:flash", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + True, + ), + "average_electric_consumption_community_average": ( + "mdi:power-plug-outline", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_electric_consumption_community_high": ( + "mdi:power-plug-outline", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_electric_consumption_community_low": ( + "mdi:power-plug-outline", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_electric_consumption_user_average": ( + "mdi:power-plug-outline", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + True, + ), + "average_recuperation_community_average": ( + "mdi:recycle-variant", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_recuperation_community_high": ( + "mdi:recycle-variant", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_recuperation_community_low": ( + "mdi:recycle-variant", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + False, + ), + "average_recuperation_user_average": ( + "mdi:recycle-variant", + None, + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_KILOMETERS}", + f"{ENERGY_KILO_WATT_HOUR}/100{LENGTH_MILES}", + True, + ), + "chargecycle_range_community_average": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "chargecycle_range_community_high": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "chargecycle_range_community_low": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "chargecycle_range_user_average": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "chargecycle_range_user_current_charge_cycle": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "chargecycle_range_user_high": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + True, + ), + "total_electric_distance_community_average": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "total_electric_distance_community_high": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "total_electric_distance_community_low": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "total_electric_distance_user_average": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "total_electric_distance_user_total": ( + "mdi:map-marker-distance", + None, + LENGTH_KILOMETERS, + LENGTH_MILES, + False, + ), + "total_saved_fuel": ( + "mdi:fuel", + None, + VOLUME_LITERS, + VOLUME_GALLONS, + False, + ), } -ATTR_TO_HA_METRIC.update(ATTR_TO_HA_GENERIC) -ATTR_TO_HA_IMPERIAL.update(ATTR_TO_HA_GENERIC) - async def async_setup_entry(hass, config_entry, async_add_entities): """Set up the BMW ConnectedDrive sensors from config entry.""" # pylint: disable=too-many-nested-blocks - if hass.config.units.name == CONF_UNIT_SYSTEM_IMPERIAL: - attribute_info = ATTR_TO_HA_IMPERIAL - else: - attribute_info = ATTR_TO_HA_METRIC - account = hass.data[BMW_DOMAIN][DATA_ENTRIES][config_entry.entry_id][CONF_ACCOUNT] entities = [] @@ -414,33 +375,33 @@ async def async_setup_entry(hass, config_entry, async_add_entities): for attribute_name in vehicle.drive_train_attributes: if attribute_name in vehicle.available_attributes: device = BMWConnectedDriveSensor( - account, vehicle, attribute_name, attribute_info + hass, account, vehicle, attribute_name ) entities.append(device) if service == SERVICE_LAST_TRIP: for attribute_name in vehicle.state.last_trip.available_attributes: if attribute_name == "date": device = BMWConnectedDriveSensor( + hass, account, vehicle, "date_utc", - attribute_info, service, ) entities.append(device) else: device = BMWConnectedDriveSensor( - account, vehicle, attribute_name, attribute_info, service + hass, account, vehicle, attribute_name, service ) entities.append(device) if service == SERVICE_ALL_TRIPS: for attribute_name in vehicle.state.all_trips.available_attributes: if attribute_name == "reset_date": device = BMWConnectedDriveSensor( + hass, account, vehicle, "reset_date_utc", - attribute_info, service, ) entities.append(device) @@ -458,36 +419,36 @@ async def async_setup_entry(hass, config_entry, async_add_entities): "user_average", ): device = BMWConnectedDriveSensor( + hass, account, vehicle, f"{attribute_name}_{attr}", - attribute_info, service, ) entities.append(device) if attribute_name == "chargecycle_range": for attr in ("user_current_charge_cycle", "user_high"): device = BMWConnectedDriveSensor( + hass, account, vehicle, f"{attribute_name}_{attr}", - attribute_info, service, ) entities.append(device) if attribute_name == "total_electric_distance": for attr in ("user_total",): device = BMWConnectedDriveSensor( + hass, account, vehicle, f"{attribute_name}_{attr}", - attribute_info, service, ) entities.append(device) else: device = BMWConnectedDriveSensor( - account, vehicle, attribute_name, attribute_info, service + hass, account, vehicle, attribute_name, service ) entities.append(device) @@ -497,7 +458,7 @@ async def async_setup_entry(hass, config_entry, async_add_entities): class BMWConnectedDriveSensor(BMWConnectedDriveBaseEntity, SensorEntity): """Representation of a BMW vehicle sensor.""" - def __init__(self, account, vehicle, attribute: str, attribute_info, service=None): + def __init__(self, hass, account, vehicle, attribute: str, service=None): """Initialize BMW vehicle sensor.""" super().__init__(account, vehicle) @@ -509,19 +470,16 @@ class BMWConnectedDriveSensor(BMWConnectedDriveBaseEntity, SensorEntity): else: self._attr_name = f"{vehicle.name} {attribute}" self._attr_unique_id = f"{vehicle.vin}-{attribute}" - self._attribute_info = attribute_info - self._attr_entity_registry_enabled_default = attribute_info.get( - attribute, [None, None, None, True] - )[3] - self._attr_icon = self._attribute_info.get( - self._attribute, [None, None, None, None] - )[0] - self._attr_device_class = attribute_info.get( - attribute, [None, None, None, None] - )[1] - self._attr_native_unit_of_measurement = attribute_info.get( - attribute, [None, None, None, None] - )[2] + self._attribute_info = SENSOR_TYPES.get( + attribute, (None, None, None, None, True) + ) + self._attr_entity_registry_enabled_default = self._attribute_info[4] + self._attr_icon = self._attribute_info[0] + self._attr_device_class = self._attribute_info[1] + if hass.config.units.name == CONF_UNIT_SYSTEM_IMPERIAL: + self._attr_native_unit_of_measurement = self._attribute_info[3] + else: + self._attr_native_unit_of_measurement = self._attribute_info[2] def update(self) -> None: """Read new state data from the library."""