From a368ad4ab50264b0ada0cedc082935a4a16b4ff5 Mon Sep 17 00:00:00 2001 From: Manu <4445816+tr4nt0r@users.noreply.github.com> Date: Thu, 11 Sep 2025 18:38:33 +0200 Subject: [PATCH] Set sensors to unknown when no next alarm is set in Sleep as Android (#150558) --- .../components/sleep_as_android/sensor.py | 6 +++ .../sleep_as_android/test_sensor.py | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/homeassistant/components/sleep_as_android/sensor.py b/homeassistant/components/sleep_as_android/sensor.py index 966e851f633..67b52ae9153 100644 --- a/homeassistant/components/sleep_as_android/sensor.py +++ b/homeassistant/components/sleep_as_android/sensor.py @@ -85,6 +85,12 @@ class SleepAsAndroidSensorEntity(SleepAsAndroidEntity, RestoreSensor): ): self._attr_native_value = label + if ( + data[ATTR_EVENT] == "alarm_rescheduled" + and data.get(ATTR_VALUE1) is None + ): + self._attr_native_value = None + self.async_write_ha_state() async def async_added_to_hass(self) -> None: diff --git a/tests/components/sleep_as_android/test_sensor.py b/tests/components/sleep_as_android/test_sensor.py index 760df1e0181..f8706b29f6b 100644 --- a/tests/components/sleep_as_android/test_sensor.py +++ b/tests/components/sleep_as_android/test_sensor.py @@ -122,3 +122,45 @@ async def test_webhook_sensor( assert (state := hass.states.get("sensor.sleep_as_android_alarm_label")) assert state.state == "label" + + +async def test_webhook_sensor_alarm_unset( + hass: HomeAssistant, + config_entry: MockConfigEntry, + hass_client_no_auth: ClientSessionGenerator, +) -> None: + """Test unsetting sensors if there is no next alarm.""" + + config_entry.add_to_hass(hass) + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + assert config_entry.state is ConfigEntryState.LOADED + + client = await hass_client_no_auth() + + response = await client.post( + "/api/webhook/webhook_id", + json={ + "event": "alarm_rescheduled", + "value1": "1582719660934", + "value2": "label", + }, + ) + assert response.status == HTTPStatus.NO_CONTENT + + assert (state := hass.states.get("sensor.sleep_as_android_next_alarm")) + assert state.state == "2020-02-26T12:21:00+00:00" + + assert (state := hass.states.get("sensor.sleep_as_android_alarm_label")) + assert state.state == "label" + + response = await client.post( + "/api/webhook/webhook_id", + json={"event": "alarm_rescheduled"}, + ) + assert (state := hass.states.get("sensor.sleep_as_android_next_alarm")) + assert state.state == STATE_UNKNOWN + + assert (state := hass.states.get("sensor.sleep_as_android_alarm_label")) + assert state.state == STATE_UNKNOWN