Skip to content

Commit 9d904c3

Browse files
wollewfrenck
authored andcommitted
fix rain sensor for Velux GPU windows (home-assistant#151857)
1 parent 99b0479 commit 9d904c3

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

homeassistant/components/velux/binary_sensor.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,6 @@ async def async_update(self) -> None:
5959
LOGGER.error("Error fetching limitation data for cover %s", self.name)
6060
return
6161

62-
# Velux windows with rain sensors report an opening limitation of 93 when rain is detected.
63-
self._attr_is_on = limitation.min_value == 93
62+
# Velux windows with rain sensors report an opening limitation of 93 or 100 (Velux GPU) when rain is detected.
63+
# So far, only 93 and 100 have been observed in practice, documentation on this is non-existent AFAIK.
64+
self._attr_is_on = limitation.min_value in {93, 100}

tests/components/velux/test_binary_sensor.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,14 @@ async def test_rain_sensor_state(
4040
assert state is not None
4141
assert state.state == STATE_OFF
4242

43-
# simulate rain detected
43+
# simulate rain detected (Velux GPU reports 100)
44+
mock_window.get_limitation.return_value.min_value = 100
45+
await update_polled_entities(hass, freezer)
46+
state = hass.states.get(test_entity_id)
47+
assert state is not None
48+
assert state.state == STATE_ON
49+
50+
# simulate rain detected (other Velux models report 93)
4451
mock_window.get_limitation.return_value.min_value = 93
4552
freezer.tick(timedelta(minutes=5))
4653
async_fire_time_changed(hass)
@@ -49,6 +56,13 @@ async def test_rain_sensor_state(
4956
assert state is not None
5057
assert state.state == STATE_ON
5158

59+
# simulate no rain detected again
60+
mock_window.get_limitation.return_value.min_value = 95
61+
await update_polled_entities(hass, freezer)
62+
state = hass.states.get(test_entity_id)
63+
assert state is not None
64+
assert state.state == STATE_OFF
65+
5266

5367
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
5468
@pytest.mark.usefixtures("mock_module")

0 commit comments

Comments
 (0)