mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 11:17:21 +00:00
Add Renault hvac sensors (#65993)
* Add hvac sensors to renault * Adjust fixtures * Adjust tests * Use icon_fn * Use lambda Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
55d8314093
commit
86ab500afd
@ -1,6 +1,7 @@
|
|||||||
"""Support for Renault binary sensors."""
|
"""Support for Renault binary sensors."""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Callable
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from renault_api.kamereon.enums import ChargeState, PlugState
|
from renault_api.kamereon.enums import ChargeState, PlugState
|
||||||
@ -37,6 +38,8 @@ class RenaultBinarySensorEntityDescription(
|
|||||||
):
|
):
|
||||||
"""Class describing Renault binary sensor entities."""
|
"""Class describing Renault binary sensor entities."""
|
||||||
|
|
||||||
|
icon_fn: Callable[[RenaultBinarySensor], str] | None = None
|
||||||
|
|
||||||
|
|
||||||
async def async_setup_entry(
|
async def async_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
@ -68,6 +71,13 @@ class RenaultBinarySensor(
|
|||||||
return None
|
return None
|
||||||
return data == self.entity_description.on_value
|
return data == self.entity_description.on_value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def icon(self) -> str | None:
|
||||||
|
"""Icon handling."""
|
||||||
|
if self.entity_description.icon_fn:
|
||||||
|
return self.entity_description.icon_fn(self)
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
BINARY_SENSOR_TYPES: tuple[RenaultBinarySensorEntityDescription, ...] = (
|
BINARY_SENSOR_TYPES: tuple[RenaultBinarySensorEntityDescription, ...] = (
|
||||||
RenaultBinarySensorEntityDescription(
|
RenaultBinarySensorEntityDescription(
|
||||||
@ -86,4 +96,12 @@ BINARY_SENSOR_TYPES: tuple[RenaultBinarySensorEntityDescription, ...] = (
|
|||||||
on_key="chargingStatus",
|
on_key="chargingStatus",
|
||||||
on_value=ChargeState.CHARGE_IN_PROGRESS.value,
|
on_value=ChargeState.CHARGE_IN_PROGRESS.value,
|
||||||
),
|
),
|
||||||
|
RenaultBinarySensorEntityDescription(
|
||||||
|
key="hvac_status",
|
||||||
|
coordinator="hvac_status",
|
||||||
|
icon_fn=lambda e: "mdi:fan" if e.is_on else "mdi:fan-off",
|
||||||
|
name="HVAC",
|
||||||
|
on_key="hvacStatus",
|
||||||
|
on_value="on",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
@ -305,6 +305,24 @@ SENSOR_TYPES: tuple[RenaultSensorEntityDescription, ...] = (
|
|||||||
native_unit_of_measurement=TEMP_CELSIUS,
|
native_unit_of_measurement=TEMP_CELSIUS,
|
||||||
state_class=SensorStateClass.MEASUREMENT,
|
state_class=SensorStateClass.MEASUREMENT,
|
||||||
),
|
),
|
||||||
|
RenaultSensorEntityDescription(
|
||||||
|
key="hvac_soc_threshold",
|
||||||
|
coordinator="hvac_status",
|
||||||
|
data_key="socThreshold",
|
||||||
|
entity_class=RenaultSensor[KamereonVehicleHvacStatusData],
|
||||||
|
name="HVAC SOC Threshold",
|
||||||
|
native_unit_of_measurement=PERCENTAGE,
|
||||||
|
),
|
||||||
|
RenaultSensorEntityDescription(
|
||||||
|
key="hvac_last_activity",
|
||||||
|
coordinator="hvac_status",
|
||||||
|
device_class=SensorDeviceClass.TIMESTAMP,
|
||||||
|
data_key="lastUpdateTime",
|
||||||
|
entity_class=RenaultSensor[KamereonVehicleHvacStatusData],
|
||||||
|
entity_registry_enabled_default=False,
|
||||||
|
name="HVAC Last Activity",
|
||||||
|
value_lambda=_get_utc_value,
|
||||||
|
),
|
||||||
RenaultSensorEntityDescription(
|
RenaultSensorEntityDescription(
|
||||||
key="location_last_activity",
|
key="location_last_activity",
|
||||||
coordinator="location",
|
coordinator="location",
|
||||||
|
@ -54,6 +54,7 @@ FIXED_ATTRIBUTES = (
|
|||||||
DYNAMIC_ATTRIBUTES = (ATTR_ICON,)
|
DYNAMIC_ATTRIBUTES = (ATTR_ICON,)
|
||||||
|
|
||||||
ICON_FOR_EMPTY_VALUES = {
|
ICON_FOR_EMPTY_VALUES = {
|
||||||
|
"binary_sensor.reg_number_hvac": "mdi:fan-off",
|
||||||
"select.reg_number_charge_mode": "mdi:calendar-remove",
|
"select.reg_number_charge_mode": "mdi:calendar-remove",
|
||||||
"sensor.reg_number_charge_state": "mdi:flash-off",
|
"sensor.reg_number_charge_state": "mdi:flash-off",
|
||||||
"sensor.reg_number_plug_state": "mdi:power-plug-off",
|
"sensor.reg_number_plug_state": "mdi:power-plug-off",
|
||||||
@ -89,7 +90,7 @@ MOCK_VEHICLES = {
|
|||||||
"battery_status": "battery_status_charging.json",
|
"battery_status": "battery_status_charging.json",
|
||||||
"charge_mode": "charge_mode_always.json",
|
"charge_mode": "charge_mode_always.json",
|
||||||
"cockpit": "cockpit_ev.json",
|
"cockpit": "cockpit_ev.json",
|
||||||
"hvac_status": "hvac_status.json",
|
"hvac_status": "hvac_status.1.json",
|
||||||
},
|
},
|
||||||
Platform.BINARY_SENSOR: [
|
Platform.BINARY_SENSOR: [
|
||||||
{
|
{
|
||||||
@ -104,6 +105,12 @@ MOCK_VEHICLES = {
|
|||||||
ATTR_STATE: STATE_ON,
|
ATTR_STATE: STATE_ON,
|
||||||
ATTR_UNIQUE_ID: "vf1aaaaa555777999_charging",
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_charging",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: "binary_sensor.reg_number_hvac",
|
||||||
|
ATTR_ICON: "mdi:fan-off",
|
||||||
|
ATTR_STATE: STATE_OFF,
|
||||||
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_hvac_status",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
Platform.BUTTON: [
|
Platform.BUTTON: [
|
||||||
{
|
{
|
||||||
@ -209,6 +216,19 @@ MOCK_VEHICLES = {
|
|||||||
ATTR_UNIQUE_ID: "vf1aaaaa555777999_outside_temperature",
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_outside_temperature",
|
||||||
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
|
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: "sensor.reg_number_hvac_soc_threshold",
|
||||||
|
ATTR_STATE: STATE_UNKNOWN,
|
||||||
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_hvac_soc_threshold",
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ATTR_DEFAULT_DISABLED: True,
|
||||||
|
ATTR_DEVICE_CLASS: SensorDeviceClass.TIMESTAMP,
|
||||||
|
ATTR_ENTITY_ID: "sensor.reg_number_hvac_last_activity",
|
||||||
|
ATTR_STATE: STATE_UNKNOWN,
|
||||||
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_hvac_last_activity",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_PLUG_STATE,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_PLUG_STATE,
|
||||||
ATTR_ENTITY_ID: "sensor.reg_number_plug_state",
|
ATTR_ENTITY_ID: "sensor.reg_number_plug_state",
|
||||||
@ -237,7 +257,7 @@ MOCK_VEHICLES = {
|
|||||||
"battery_status": "battery_status_not_charging.json",
|
"battery_status": "battery_status_not_charging.json",
|
||||||
"charge_mode": "charge_mode_schedule.json",
|
"charge_mode": "charge_mode_schedule.json",
|
||||||
"cockpit": "cockpit_ev.json",
|
"cockpit": "cockpit_ev.json",
|
||||||
"hvac_status": "hvac_status.json",
|
"hvac_status": "hvac_status.2.json",
|
||||||
"location": "location.json",
|
"location": "location.json",
|
||||||
},
|
},
|
||||||
Platform.BINARY_SENSOR: [
|
Platform.BINARY_SENSOR: [
|
||||||
@ -253,6 +273,12 @@ MOCK_VEHICLES = {
|
|||||||
ATTR_STATE: STATE_OFF,
|
ATTR_STATE: STATE_OFF,
|
||||||
ATTR_UNIQUE_ID: "vf1aaaaa555777999_charging",
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_charging",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: "binary_sensor.reg_number_hvac",
|
||||||
|
ATTR_ICON: "mdi:fan-off",
|
||||||
|
ATTR_STATE: STATE_OFF,
|
||||||
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_hvac_status",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
Platform.BUTTON: [
|
Platform.BUTTON: [
|
||||||
{
|
{
|
||||||
@ -360,11 +386,24 @@ MOCK_VEHICLES = {
|
|||||||
{
|
{
|
||||||
ATTR_DEVICE_CLASS: SensorDeviceClass.TEMPERATURE,
|
ATTR_DEVICE_CLASS: SensorDeviceClass.TEMPERATURE,
|
||||||
ATTR_ENTITY_ID: "sensor.reg_number_outside_temperature",
|
ATTR_ENTITY_ID: "sensor.reg_number_outside_temperature",
|
||||||
ATTR_STATE: "8.0",
|
ATTR_STATE: STATE_UNKNOWN,
|
||||||
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
|
||||||
ATTR_UNIQUE_ID: "vf1aaaaa555777999_outside_temperature",
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_outside_temperature",
|
||||||
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
|
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: "sensor.reg_number_hvac_soc_threshold",
|
||||||
|
ATTR_STATE: "30.0",
|
||||||
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_hvac_soc_threshold",
|
||||||
|
ATTR_UNIT_OF_MEASUREMENT: PERCENTAGE,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ATTR_DEFAULT_DISABLED: True,
|
||||||
|
ATTR_DEVICE_CLASS: SensorDeviceClass.TIMESTAMP,
|
||||||
|
ATTR_ENTITY_ID: "sensor.reg_number_hvac_last_activity",
|
||||||
|
ATTR_STATE: "2020-12-03T00:00:00+00:00",
|
||||||
|
ATTR_UNIQUE_ID: "vf1aaaaa555777999_hvac_last_activity",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
ATTR_DEVICE_CLASS: DEVICE_CLASS_PLUG_STATE,
|
ATTR_DEVICE_CLASS: DEVICE_CLASS_PLUG_STATE,
|
||||||
ATTR_ENTITY_ID: "sensor.reg_number_plug_state",
|
ATTR_ENTITY_ID: "sensor.reg_number_plug_state",
|
||||||
|
11
tests/components/renault/fixtures/hvac_status.2.json
Normal file
11
tests/components/renault/fixtures/hvac_status.2.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"type": "Car",
|
||||||
|
"id": "VF1AAAAA555777999",
|
||||||
|
"attributes": {
|
||||||
|
"socThreshold": 30.0,
|
||||||
|
"hvacStatus": "off",
|
||||||
|
"lastUpdateTime": "2020-12-03T00:00:00Z"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user