mirror of
https://github.com/home-assistant/core
synced 2024-08-02 23:40:32 +02:00
Merge bmw_connected_drive metric and imperial sensor types (#56910)
This commit is contained in:
parent
f8d0f76721
commit
19443b474c
@ -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 = {
|
||||
# "<ID>": [<MDI_ICON>, <DEVICE_CLASS>, <UNIT_OF_MEASUREMENT>, <ENABLED_BY_DEFAULT>],
|
||||
"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]] = {
|
||||
# "<ID>": (<MDI_ICON>, <DEVICE_CLASS>, <UNIT_OF_MEASUREMENT (metric)>, <UNIT_OF_MEASUREMENT (imperial)>, <ENABLED_BY_DEFAULT>),
|
||||
# --- 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 = {
|
||||
# "<ID>": [<MDI_ICON>, <DEVICE_CLASS>, <UNIT_OF_MEASUREMENT>, <ENABLED_BY_DEFAULT>],
|
||||
"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 = {
|
||||
# "<ID>": [<MDI_ICON>, <DEVICE_CLASS>, <UNIT_OF_MEASUREMENT>, <ENABLED_BY_DEFAULT>],
|
||||
"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."""
|
||||
|
Loading…
Reference in New Issue
Block a user