Add electric vehicle sensors to Mazda integration (#64099)
This commit is contained in:
parent
9d0b73bd99
commit
bc17616720
11 changed files with 186 additions and 10 deletions
|
@ -4,7 +4,12 @@ from __future__ import annotations
|
|||
from collections.abc import Callable
|
||||
from dataclasses import dataclass
|
||||
|
||||
from homeassistant.components.sensor import SensorEntity, SensorEntityDescription
|
||||
from homeassistant.components.sensor import (
|
||||
SensorDeviceClass,
|
||||
SensorEntity,
|
||||
SensorEntityDescription,
|
||||
SensorStateClass,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
CONF_UNIT_SYSTEM_IMPERIAL,
|
||||
|
@ -54,6 +59,20 @@ def _get_distance_unit(unit_system):
|
|||
return LENGTH_KILOMETERS
|
||||
|
||||
|
||||
def _fuel_remaining_percentage_supported(data):
|
||||
"""Determine if fuel remaining percentage is supported."""
|
||||
return (not data["isElectric"]) and (
|
||||
data["status"]["fuelRemainingPercent"] is not None
|
||||
)
|
||||
|
||||
|
||||
def _fuel_distance_remaining_supported(data):
|
||||
"""Determine if fuel distance remaining is supported."""
|
||||
return (not data["isElectric"]) and (
|
||||
data["status"]["fuelDistanceRemainingKm"] is not None
|
||||
)
|
||||
|
||||
|
||||
def _front_left_tire_pressure_supported(data):
|
||||
"""Determine if front left tire pressure is supported."""
|
||||
return data["status"]["tirePressure"]["frontLeftTirePressurePsi"] is not None
|
||||
|
@ -74,6 +93,22 @@ def _rear_right_tire_pressure_supported(data):
|
|||
return data["status"]["tirePressure"]["rearRightTirePressurePsi"] is not None
|
||||
|
||||
|
||||
def _ev_charge_level_supported(data):
|
||||
"""Determine if charge level is supported."""
|
||||
return (
|
||||
data["isElectric"]
|
||||
and data["evStatus"]["chargeInfo"]["batteryLevelPercentage"] is not None
|
||||
)
|
||||
|
||||
|
||||
def _ev_remaining_range_supported(data):
|
||||
"""Determine if remaining range is supported."""
|
||||
return (
|
||||
data["isElectric"]
|
||||
and data["evStatus"]["chargeInfo"]["drivingRangeKm"] is not None
|
||||
)
|
||||
|
||||
|
||||
def _fuel_distance_remaining_value(data, unit_system):
|
||||
"""Get the fuel distance remaining value."""
|
||||
return round(
|
||||
|
@ -106,13 +141,28 @@ def _rear_right_tire_pressure_value(data, unit_system):
|
|||
return round(data["status"]["tirePressure"]["rearRightTirePressurePsi"])
|
||||
|
||||
|
||||
def _ev_charge_level_value(data, unit_system):
|
||||
"""Get the charge level value."""
|
||||
return round(data["evStatus"]["chargeInfo"]["batteryLevelPercentage"])
|
||||
|
||||
|
||||
def _ev_remaining_range_value(data, unit_system):
|
||||
"""Get the remaining range value."""
|
||||
return round(
|
||||
unit_system.length(
|
||||
data["evStatus"]["chargeInfo"]["drivingRangeKm"], LENGTH_KILOMETERS
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
SENSOR_ENTITIES = [
|
||||
MazdaSensorEntityDescription(
|
||||
key="fuel_remaining_percentage",
|
||||
name_suffix="Fuel Remaining Percentage",
|
||||
icon="mdi:gas-station",
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
is_supported=lambda data: data["status"]["fuelRemainingPercent"] is not None,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_fuel_remaining_percentage_supported,
|
||||
value=lambda data, unit_system: data["status"]["fuelRemainingPercent"],
|
||||
),
|
||||
MazdaSensorEntityDescription(
|
||||
|
@ -120,7 +170,8 @@ SENSOR_ENTITIES = [
|
|||
name_suffix="Fuel Distance Remaining",
|
||||
icon="mdi:gas-station",
|
||||
unit=_get_distance_unit,
|
||||
is_supported=lambda data: data["status"]["fuelDistanceRemainingKm"] is not None,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_fuel_distance_remaining_supported,
|
||||
value=_fuel_distance_remaining_value,
|
||||
),
|
||||
MazdaSensorEntityDescription(
|
||||
|
@ -128,6 +179,7 @@ SENSOR_ENTITIES = [
|
|||
name_suffix="Odometer",
|
||||
icon="mdi:speedometer",
|
||||
unit=_get_distance_unit,
|
||||
state_class=SensorStateClass.TOTAL_INCREASING,
|
||||
is_supported=lambda data: data["status"]["odometerKm"] is not None,
|
||||
value=_odometer_value,
|
||||
),
|
||||
|
@ -136,6 +188,7 @@ SENSOR_ENTITIES = [
|
|||
name_suffix="Front Left Tire Pressure",
|
||||
icon="mdi:car-tire-alert",
|
||||
native_unit_of_measurement=PRESSURE_PSI,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_front_left_tire_pressure_supported,
|
||||
value=_front_left_tire_pressure_value,
|
||||
),
|
||||
|
@ -144,6 +197,7 @@ SENSOR_ENTITIES = [
|
|||
name_suffix="Front Right Tire Pressure",
|
||||
icon="mdi:car-tire-alert",
|
||||
native_unit_of_measurement=PRESSURE_PSI,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_front_right_tire_pressure_supported,
|
||||
value=_front_right_tire_pressure_value,
|
||||
),
|
||||
|
@ -152,6 +206,7 @@ SENSOR_ENTITIES = [
|
|||
name_suffix="Rear Left Tire Pressure",
|
||||
icon="mdi:car-tire-alert",
|
||||
native_unit_of_measurement=PRESSURE_PSI,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_rear_left_tire_pressure_supported,
|
||||
value=_rear_left_tire_pressure_value,
|
||||
),
|
||||
|
@ -160,9 +215,28 @@ SENSOR_ENTITIES = [
|
|||
name_suffix="Rear Right Tire Pressure",
|
||||
icon="mdi:car-tire-alert",
|
||||
native_unit_of_measurement=PRESSURE_PSI,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_rear_right_tire_pressure_supported,
|
||||
value=_rear_right_tire_pressure_value,
|
||||
),
|
||||
MazdaSensorEntityDescription(
|
||||
key="ev_charge_level",
|
||||
name_suffix="Charge Level",
|
||||
device_class=SensorDeviceClass.BATTERY,
|
||||
native_unit_of_measurement=PERCENTAGE,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_ev_charge_level_supported,
|
||||
value=_ev_charge_level_value,
|
||||
),
|
||||
MazdaSensorEntityDescription(
|
||||
key="ev_remaining_range",
|
||||
name_suffix="Remaining Range",
|
||||
icon="mdi:ev-station",
|
||||
unit=_get_distance_unit,
|
||||
state_class=SensorStateClass.MEASUREMENT,
|
||||
is_supported=_ev_remaining_range_supported,
|
||||
value=_ev_remaining_range_value,
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue