Removed rounding of durations in Here Travel Time sensors (#146838)

* Removed rounding of durations

* Set duration sensors unit to seconds

* Updated Here Travel Time tests

* Update homeassistant/components/here_travel_time/sensor.py

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>

* Update homeassistant/components/here_travel_time/sensor.py

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>

* Updated Here Travel Time tests

---------

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
Etienne C. 2025-06-16 22:20:01 +02:00 committed by GitHub
parent c5d93e5456
commit ad3dac0373
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 23 additions and 19 deletions

View File

@ -133,8 +133,8 @@ class HERERoutingDataUpdateCoordinator(DataUpdateCoordinator[HERETravelTimeData]
def _parse_routing_response(self, response: dict[str, Any]) -> HERETravelTimeData:
"""Parse the routing response dict to a HERETravelTimeData."""
distance: float = 0.0
duration: float = 0.0
duration_in_traffic: float = 0.0
duration: int = 0
duration_in_traffic: int = 0
for section in response["routes"][0]["sections"]:
distance += DistanceConverter.convert(
@ -167,8 +167,8 @@ class HERERoutingDataUpdateCoordinator(DataUpdateCoordinator[HERETravelTimeData]
destination_name = names[0]["value"]
return HERETravelTimeData(
attribution=None,
duration=round(duration / 60),
duration_in_traffic=round(duration_in_traffic / 60),
duration=duration,
duration_in_traffic=duration_in_traffic,
distance=distance,
origin=f"{mapped_origin_lat},{mapped_origin_lon}",
destination=f"{mapped_destination_lat},{mapped_destination_lon}",
@ -271,13 +271,13 @@ class HERETransitDataUpdateCoordinator(
UnitOfLength.METERS,
UnitOfLength.KILOMETERS,
)
duration: float = sum(
duration: int = sum(
section["travelSummary"]["duration"] for section in sections
)
return HERETravelTimeData(
attribution=attribution,
duration=round(duration / 60),
duration_in_traffic=round(duration / 60),
duration=duration,
duration_in_traffic=duration,
distance=distance,
origin=f"{mapped_origin_lat},{mapped_origin_lon}",
destination=f"{mapped_destination_lat},{mapped_destination_lon}",

View File

@ -56,7 +56,8 @@ def sensor_descriptions(travel_mode: str) -> tuple[SensorEntityDescription, ...]
key=ATTR_DURATION,
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.MINUTES,
native_unit_of_measurement=UnitOfTime.SECONDS,
suggested_unit_of_measurement=UnitOfTime.MINUTES,
),
SensorEntityDescription(
translation_key="duration_in_traffic",
@ -64,7 +65,8 @@ def sensor_descriptions(travel_mode: str) -> tuple[SensorEntityDescription, ...]
key=ATTR_DURATION_IN_TRAFFIC,
state_class=SensorStateClass.MEASUREMENT,
device_class=SensorDeviceClass.DURATION,
native_unit_of_measurement=UnitOfTime.MINUTES,
native_unit_of_measurement=UnitOfTime.SECONDS,
suggested_unit_of_measurement=UnitOfTime.MINUTES,
),
SensorEntityDescription(
translation_key="distance",

View File

@ -150,10 +150,10 @@ async def test_sensor(
duration = hass.states.get("sensor.test_duration")
assert duration.attributes.get("unit_of_measurement") == UnitOfTime.MINUTES
assert duration.attributes.get(ATTR_ICON) == icon
assert duration.state == "26"
assert duration.state == "26.1833333333333"
assert float(hass.states.get("sensor.test_distance").state) == pytest.approx(13.682)
assert hass.states.get("sensor.test_duration_in_traffic").state == "30"
assert hass.states.get("sensor.test_duration_in_traffic").state == "29.6"
assert hass.states.get("sensor.test_origin").state == "22nd St NW"
assert (
hass.states.get("sensor.test_origin").attributes.get(ATTR_LATITUDE)
@ -501,13 +501,13 @@ async def test_restore_state(hass: HomeAssistant) -> None:
"1234",
attributes={
ATTR_LAST_RESET: last_reset,
ATTR_UNIT_OF_MEASUREMENT: UnitOfTime.MINUTES,
ATTR_UNIT_OF_MEASUREMENT: UnitOfTime.SECONDS,
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
},
),
{
"native_value": 1234,
"native_unit_of_measurement": UnitOfTime.MINUTES,
"native_unit_of_measurement": UnitOfTime.SECONDS,
"icon": "mdi:car",
"last_reset": last_reset,
},
@ -518,13 +518,13 @@ async def test_restore_state(hass: HomeAssistant) -> None:
"5678",
attributes={
ATTR_LAST_RESET: last_reset,
ATTR_UNIT_OF_MEASUREMENT: UnitOfTime.MINUTES,
ATTR_UNIT_OF_MEASUREMENT: UnitOfTime.SECONDS,
ATTR_STATE_CLASS: SensorStateClass.MEASUREMENT,
},
),
{
"native_value": 5678,
"native_unit_of_measurement": UnitOfTime.MINUTES,
"native_unit_of_measurement": UnitOfTime.SECONDS,
"icon": "mdi:car",
"last_reset": last_reset,
},
@ -596,12 +596,12 @@ async def test_restore_state(hass: HomeAssistant) -> None:
# restore from cache
state = hass.states.get("sensor.test_duration")
assert state.state == "1234"
assert state.state == "20.5666666666667"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfTime.MINUTES
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
state = hass.states.get("sensor.test_duration_in_traffic")
assert state.state == "5678"
assert state.state == "94.6333333333333"
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfTime.MINUTES
assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT
@ -799,10 +799,12 @@ async def test_multiple_sections(
await hass.async_block_till_done()
duration = hass.states.get("sensor.test_duration")
assert duration.state == "18"
assert duration.state == "18.4833333333333"
assert float(hass.states.get("sensor.test_distance").state) == pytest.approx(3.583)
assert hass.states.get("sensor.test_duration_in_traffic").state == "18"
assert (
hass.states.get("sensor.test_duration_in_traffic").state == "18.4833333333333"
)
assert hass.states.get("sensor.test_origin").state == "Chemin de Halage"
assert (
hass.states.get("sensor.test_origin").attributes.get(ATTR_LATITUDE)