Skip to content

Commit 97a0a4e

Browse files
authored
Add tyre pressure to Renault integration (home-assistant#154377)
1 parent b494074 commit 97a0a4e

File tree

8 files changed

+536
-2
lines changed

8 files changed

+536
-2
lines changed

homeassistant/components/renault/renault_vehicle.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,4 +260,9 @@ async def set_charge_schedules(
260260
key="res_state",
261261
update_method=lambda x: x.get_res_state,
262262
),
263+
RenaultCoordinatorDescription(
264+
endpoint="pressure",
265+
key="pressure",
266+
update_method=lambda x: x.get_tyre_pressure,
267+
),
263268
)

homeassistant/components/renault/sensor.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
KamereonVehicleHvacStatusData,
1414
KamereonVehicleLocationData,
1515
KamereonVehicleResStateData,
16+
KamereonVehicleTyrePressureData,
1617
)
1718

1819
from homeassistant.components.sensor import (
@@ -26,6 +27,7 @@
2627
UnitOfEnergy,
2728
UnitOfLength,
2829
UnitOfPower,
30+
UnitOfPressure,
2931
UnitOfTemperature,
3032
UnitOfTime,
3133
UnitOfVolume,
@@ -337,4 +339,44 @@ def _get_utc_value(entity: RenaultSensor[T]) -> datetime:
337339
entity_registry_enabled_default=False,
338340
translation_key="res_state_code",
339341
),
342+
RenaultSensorEntityDescription(
343+
key="front_left_pressure",
344+
coordinator="pressure",
345+
data_key="flPressure",
346+
device_class=SensorDeviceClass.PRESSURE,
347+
entity_class=RenaultSensor[KamereonVehicleTyrePressureData],
348+
native_unit_of_measurement=UnitOfPressure.MBAR,
349+
state_class=SensorStateClass.MEASUREMENT,
350+
translation_key="front_left_pressure",
351+
),
352+
RenaultSensorEntityDescription(
353+
key="front_right_pressure",
354+
coordinator="pressure",
355+
data_key="frPressure",
356+
device_class=SensorDeviceClass.PRESSURE,
357+
entity_class=RenaultSensor[KamereonVehicleTyrePressureData],
358+
native_unit_of_measurement=UnitOfPressure.MBAR,
359+
state_class=SensorStateClass.MEASUREMENT,
360+
translation_key="front_right_pressure",
361+
),
362+
RenaultSensorEntityDescription(
363+
key="rear_left_pressure",
364+
coordinator="pressure",
365+
data_key="rlPressure",
366+
device_class=SensorDeviceClass.PRESSURE,
367+
entity_class=RenaultSensor[KamereonVehicleTyrePressureData],
368+
native_unit_of_measurement=UnitOfPressure.MBAR,
369+
state_class=SensorStateClass.MEASUREMENT,
370+
translation_key="rear_left_pressure",
371+
),
372+
RenaultSensorEntityDescription(
373+
key="rear_right_pressure",
374+
coordinator="pressure",
375+
data_key="rrPressure",
376+
device_class=SensorDeviceClass.PRESSURE,
377+
entity_class=RenaultSensor[KamereonVehicleTyrePressureData],
378+
native_unit_of_measurement=UnitOfPressure.MBAR,
379+
state_class=SensorStateClass.MEASUREMENT,
380+
translation_key="rear_right_pressure",
381+
),
340382
)

homeassistant/components/renault/strings.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,18 @@
166166
},
167167
"res_state_code": {
168168
"name": "Remote engine start code"
169+
},
170+
"front_left_pressure": {
171+
"name": "Front left tyre pressure"
172+
},
173+
"front_right_pressure": {
174+
"name": "Front right tyre pressure"
175+
},
176+
"rear_left_pressure": {
177+
"name": "Rear left tyre pressure"
178+
},
179+
"rear_right_pressure": {
180+
"name": "Rear right tyre pressure"
169181
}
170182
}
171183
},

tests/components/renault/conftest.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ def _get_fixtures(vehicle_type: str) -> MappingProxyType:
131131
if "res_state" in mock_vehicle["endpoints"]
132132
else load_fixture("renault/no_data.json")
133133
).get_attributes(schemas.KamereonVehicleResStateDataSchema),
134+
"pressure": schemas.KamereonVehicleDataResponseSchema.loads(
135+
load_fixture(f"renault/{mock_vehicle['endpoints']['pressure']}")
136+
if "pressure" in mock_vehicle["endpoints"]
137+
else load_fixture("renault/no_data.json")
138+
).get_attributes(schemas.KamereonVehicleTyrePressureDataSchema),
134139
}
135140

136141

@@ -157,6 +162,9 @@ def patch_get_vehicle_data() -> Generator[dict[str, AsyncMock]]:
157162
patch(
158163
"renault_api.renault_vehicle.RenaultVehicle.get_res_state"
159164
) as get_res_state,
165+
patch(
166+
"renault_api.renault_vehicle.RenaultVehicle.get_tyre_pressure"
167+
) as get_tyre_pressure,
160168
):
161169
yield {
162170
"battery_status": get_battery_status,
@@ -166,6 +174,7 @@ def patch_get_vehicle_data() -> Generator[dict[str, AsyncMock]]:
166174
"location": get_location,
167175
"lock_status": get_lock_status,
168176
"res_state": get_res_state,
177+
"pressure": get_tyre_pressure,
169178
}
170179

171180

tests/components/renault/const.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"location": "location.json",
3232
"lock_status": "lock_status.1.json",
3333
"res_state": "res_state.1.json",
34+
"pressure": "pressure.1.json",
3435
},
3536
},
3637
"captur_phev": {
@@ -58,6 +59,7 @@
5859
"cockpit": "cockpit_ev.json",
5960
"hvac_status": "hvac_status.3.json",
6061
"location": "location.json",
62+
"pressure": "pressure.1.json",
6163
},
6264
},
6365
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"data": {
3+
"type": "Car",
4+
"id": "VF1AAAAA555777999",
5+
"attributes": {
6+
"flPressure": 2730,
7+
"frPressure": 2790,
8+
"rlPressure": 2340,
9+
"rrPressure": 2460,
10+
"flStatus": 0,
11+
"frStatus": 0,
12+
"rlStatus": 0,
13+
"rrStatus": 0
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)