Suggest hours as unit of measurement for Google Health sleep duration sensors (#180929)

Co-authored-by: Home Assistant Developer <hello@home-assistant.io>
This commit is contained in:
Allen Porter
2026-09-01 11:33:49 +02:00
committed by Bram Kragten
co-authored by Home Assistant Developer
parent b76392272a
commit e9dd5befeb
3 changed files with 27 additions and 12 deletions
@@ -158,6 +158,8 @@ SLEEP_SENSORS: list[
key="sleep_asleep",
translation_key="sleep_asleep",
native_unit_of_measurement=UnitOfTime.MINUTES,
suggested_unit_of_measurement=UnitOfTime.HOURS,
suggested_display_precision=2,
device_class=SensorDeviceClass.DURATION,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda data: (
@@ -170,6 +172,8 @@ SLEEP_SENSORS: list[
key="sleep_awake",
translation_key="sleep_awake",
native_unit_of_measurement=UnitOfTime.MINUTES,
suggested_unit_of_measurement=UnitOfTime.HOURS,
suggested_display_precision=2,
device_class=SensorDeviceClass.DURATION,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda data: (
@@ -182,6 +186,8 @@ SLEEP_SENSORS: list[
key="sleep_in_bed",
translation_key="sleep_in_bed",
native_unit_of_measurement=UnitOfTime.MINUTES,
suggested_unit_of_measurement=UnitOfTime.HOURS,
suggested_display_precision=2,
device_class=SensorDeviceClass.DURATION,
state_class=SensorStateClass.MEASUREMENT,
value_fn=lambda data: (
@@ -690,6 +690,9 @@
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
}),
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
'original_icon': None,
@@ -700,7 +703,7 @@
'supported_features': 0,
'translation_key': 'sleep_asleep',
'unique_id': '01J0BC4QM2YBRP6H5G933CETT7_sleep_asleep',
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
})
# ---
# name: test_all_entities[sensor.google_health_time_asleep-state]
@@ -709,14 +712,14 @@
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'duration',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'Google Health Time asleep',
<SensorEntityCapabilityAttribute.STATE_CLASS: 'state_class'>: <SensorStateClass.MEASUREMENT: 'measurement'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfTime.MINUTES: 'min'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfTime.HOURS: 'h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.google_health_time_asleep',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '420',
'state': '7.0',
})
# ---
# name: test_all_entities[sensor.google_health_time_awake-entry]
@@ -748,6 +751,9 @@
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
}),
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
'original_icon': None,
@@ -758,7 +764,7 @@
'supported_features': 0,
'translation_key': 'sleep_awake',
'unique_id': '01J0BC4QM2YBRP6H5G933CETT7_sleep_awake',
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
})
# ---
# name: test_all_entities[sensor.google_health_time_awake-state]
@@ -767,14 +773,14 @@
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'duration',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'Google Health Time awake',
<SensorEntityCapabilityAttribute.STATE_CLASS: 'state_class'>: <SensorStateClass.MEASUREMENT: 'measurement'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfTime.MINUTES: 'min'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfTime.HOURS: 'h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.google_health_time_awake',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '60',
'state': '1.0',
})
# ---
# name: test_all_entities[sensor.google_health_time_in_bed-entry]
@@ -806,6 +812,9 @@
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
}),
}),
'original_device_class': <SensorDeviceClass.DURATION: 'duration'>,
'original_icon': None,
@@ -816,7 +825,7 @@
'supported_features': 0,
'translation_key': 'sleep_in_bed',
'unique_id': '01J0BC4QM2YBRP6H5G933CETT7_sleep_in_bed',
'unit_of_measurement': <UnitOfTime.MINUTES: 'min'>,
'unit_of_measurement': <UnitOfTime.HOURS: 'h'>,
})
# ---
# name: test_all_entities[sensor.google_health_time_in_bed-state]
@@ -825,14 +834,14 @@
<EntityStateAttribute.DEVICE_CLASS: 'device_class'>: 'duration',
<EntityStateAttribute.FRIENDLY_NAME: 'friendly_name'>: 'Google Health Time in bed',
<SensorEntityCapabilityAttribute.STATE_CLASS: 'state_class'>: <SensorStateClass.MEASUREMENT: 'measurement'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfTime.MINUTES: 'min'>,
<EntityStateAttribute.UNIT_OF_MEASUREMENT: 'unit_of_measurement'>: <UnitOfTime.HOURS: 'h'>,
}),
'context': <ANY>,
'entity_id': 'sensor.google_health_time_in_bed',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '480',
'state': '8.0',
})
# ---
# name: test_all_entities[sensor.google_health_time_to_fall_asleep-entry]
@@ -119,15 +119,15 @@ async def test_sensor_in_progress_sleep(
time_asleep_state = hass.states.get("sensor.google_health_time_asleep")
assert time_asleep_state is not None
assert time_asleep_state.state == "420"
assert time_asleep_state.state == "7.0"
time_awake_state = hass.states.get("sensor.google_health_time_awake")
assert time_awake_state is not None
assert time_awake_state.state == "60"
assert time_awake_state.state == "1.0"
time_in_bed_state = hass.states.get("sensor.google_health_time_in_bed")
assert time_in_bed_state is not None
assert time_in_bed_state.state == "480"
assert time_in_bed_state.state == "8.0"
time_to_fall_asleep_state = hass.states.get(
"sensor.google_health_time_to_fall_asleep"