Skip to content

Commit

Permalink
Merge pull request #393 from alandtse/dev
Browse files Browse the repository at this point in the history
fix: set default pressure to PSI (#391)
  • Loading branch information
alandtse authored Dec 3, 2022
2 parents 1f60bd5 + e4adef7 commit 886899c
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 25 deletions.
28 changes: 17 additions & 11 deletions custom_components/tesla_custom/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@
SPEED_MILES_PER_HOUR,
TEMP_CELSIUS,
TIME_HOURS,
PRESSURE_BAR,
UnitOfPressure,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers.icon import icon_for_battery_level
from homeassistant.util.unit_conversion import DistanceConverter
from homeassistant.util.unit_conversion import DistanceConverter, PressureConverter
from homeassistant.util import dt

from . import TeslaDataUpdateCoordinator
Expand All @@ -37,10 +37,10 @@
BATTERY_SITE_SENSORS = SOLAR_SITE_SENSORS + ["battery power"]

TPMS_SENSORS = {
"TPMS front left": 'tpms_pressure_fl',
"TPMS front right": 'tpms_pressure_fr',
"TPMS rear left": 'tpms_pressure_rl',
"TPMS rear right": 'tpms_pressure_rr',
"TPMS front left": "tpms_pressure_fl",
"TPMS front right": "tpms_pressure_fr",
"TPMS rear left": "tpms_pressure_rl",
"TPMS rear right": "tpms_pressure_rr",
}

TPMS_SENSOR_ATTR = {
Expand Down Expand Up @@ -69,7 +69,9 @@ async def async_setup_entry(hass: HomeAssistant, config_entry, async_add_entitie
entities.append(TeslaCarTemp(hass, car, coordinator, inside=True))
entities.append(TeslaCarTimeChargeComplete(hass, car, coordinator))
for tpms_sensor in TPMS_SENSORS:
entities.append(TeslaCarTpmsPressureSensor(hass, car, coordinator, tpms_sensor))
entities.append(
TeslaCarTpmsPressureSensor(hass, car, coordinator, tpms_sensor)
)

for energysite in energysites.values():
if (
Expand Down Expand Up @@ -515,6 +517,7 @@ def native_value(self) -> Optional[datetime]:
return self._value
return None


class TeslaCarTpmsPressureSensor(TeslaCarEntity, SensorEntity):
"""Representation of the Tesla car TPMS Pressure sensor."""

Expand All @@ -531,19 +534,22 @@ def __init__(
self.type = tpms_sensor
self._attr_device_class = SensorDeviceClass.PRESSURE
self._attr_state_class = SensorStateClass.MEASUREMENT
self._attr_native_unit_of_measurement = PRESSURE_BAR
self._attr_native_unit_of_measurement = UnitOfPressure.BAR
self._attr_suggested_unit_of_measurement = UnitOfPressure.PSI
self._attr_icon = "mdi:gauge-full"

@property
def native_value(self) -> float:
"""Return TPMS Pressure."""
return getattr(self._car, TPMS_SENSORS.get(self._tpms_sensor))
return round(getattr(self._car, TPMS_SENSORS.get(self._tpms_sensor)), 2)

@property
def extra_state_attributes(self):
"""Return device state attributes."""
timestamp = self._car._vehicle_data.get("vehicle_state", {}).get(TPMS_SENSOR_ATTR.get(self._tpms_sensor))
timestamp = self._car._vehicle_data.get("vehicle_state", {}).get(
TPMS_SENSOR_ATTR.get(self._tpms_sensor)
)

return {
"tpms_last_seen_pressure_timestamp": timestamp,
}
}
8 changes: 4 additions & 4 deletions tests/mock_data/car.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,10 +227,10 @@
},
"summon_standby_mode_enabled": False,
"timestamp": 1661641175268,
"tpms_pressure_fl": 2.4,
"tpms_pressure_fr": 2.575,
"tpms_pressure_rl": 2.6,
"tpms_pressure_rr": 2.7,
"tpms_pressure_fl": 2.40,
"tpms_pressure_fr": 2.58,
"tpms_pressure_rl": 2.62,
"tpms_pressure_rr": 2.71,
"tpms_hard_warning_fl": False,
"tpms_hard_warning_fr": False,
"tpms_hard_warning_rl": False,
Expand Down
80 changes: 70 additions & 10 deletions tests/test_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,15 @@
SPEED_MILES_PER_HOUR,
STATE_UNKNOWN,
TEMP_CELSIUS,
PRESSURE_BAR,
UnitOfPressure,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from homeassistant.util.unit_conversion import DistanceConverter, SpeedConverter
from homeassistant.util.unit_conversion import (
DistanceConverter,
SpeedConverter,
PressureConverter,
)

from .common import setup_platform
from .mock_data import car as car_mock_data
Expand Down Expand Up @@ -386,13 +390,27 @@ async def test_tpms_pressure_sensor(hass: HomeAssistant) -> None:
await setup_platform(hass, SENSOR_DOMAIN)

state_fl = hass.states.get("sensor.my_model_s_tpms_front_left")
prec = (
len(state_fl.state) - state_fl.state.index(".") - 1
if "." in state_fl.state
else 0
)
assert state_fl.state == str(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_fl"]
round(
PressureConverter.convert(
round(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_fl"], 2
),
UnitOfPressure.BAR,
UnitOfPressure.PSI,
),
prec,
),
)

assert state_fl.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PRESSURE
assert state_fl.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
assert state_fl.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PRESSURE_BAR
assert state_fl.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfPressure.PSI

assert (
state_fl.attributes.get("tpms_last_seen_pressure_timestamp")
Expand All @@ -402,13 +420,27 @@ async def test_tpms_pressure_sensor(hass: HomeAssistant) -> None:
)

state_fr = hass.states.get("sensor.my_model_s_tpms_front_right")
prec = (
len(state_fr.state) - state_fr.state.index(".") - 1
if "." in state_fr.state
else 0
)
assert state_fr.state == str(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_fr"]
round(
PressureConverter.convert(
round(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_fr"], 2
),
UnitOfPressure.BAR,
UnitOfPressure.PSI,
),
prec,
),
)

assert state_fr.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PRESSURE
assert state_fr.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
assert state_fr.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PRESSURE_BAR
assert state_fr.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfPressure.PSI

assert (
state_fr.attributes.get("tpms_last_seen_pressure_timestamp")
Expand All @@ -418,13 +450,27 @@ async def test_tpms_pressure_sensor(hass: HomeAssistant) -> None:
)

state_rl = hass.states.get("sensor.my_model_s_tpms_rear_left")
prec = (
len(state_rl.state) - state_rl.state.index(".") - 1
if "." in state_rl.state
else 0
)
assert state_rl.state == str(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_rl"]
round(
PressureConverter.convert(
round(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_rl"], 2
),
UnitOfPressure.BAR,
UnitOfPressure.PSI,
),
prec,
),
)

assert state_rl.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PRESSURE
assert state_rl.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
assert state_rl.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PRESSURE_BAR
assert state_rl.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfPressure.PSI

assert (
state_rl.attributes.get("tpms_last_seen_pressure_timestamp")
Expand All @@ -434,13 +480,27 @@ async def test_tpms_pressure_sensor(hass: HomeAssistant) -> None:
)

state_rr = hass.states.get("sensor.my_model_s_tpms_rear_right")
prec = (
len(state_rr.state) - state_rr.state.index(".") - 1
if "." in state_rr.state
else 0
)
assert state_rr.state == str(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_rr"]
round(
PressureConverter.convert(
round(
car_mock_data.VEHICLE_DATA["vehicle_state"]["tpms_pressure_rr"], 2
),
UnitOfPressure.BAR,
UnitOfPressure.PSI,
),
prec,
),
)

assert state_rr.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.PRESSURE
assert state_rr.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
assert state_rr.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PRESSURE_BAR
assert state_rr.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfPressure.PSI

assert (
state_rr.attributes.get("tpms_last_seen_pressure_timestamp")
Expand Down

0 comments on commit 886899c

Please sign in to comment.