mirror of
https://github.com/Electric-Special/ha-core.git
synced 2026-03-21 03:03:17 +01:00
fix rain sensor for some rare velux windows (#160504)
This commit is contained in:
@@ -74,6 +74,8 @@ class VeluxRainSensor(VeluxEntity, BinarySensorEntity):
|
||||
|
||||
self._attr_available = True
|
||||
|
||||
# Velux windows with rain sensors report an opening limitation of 93 or 100 (Velux GPU) when rain is detected.
|
||||
# So far, only 93 and 100 have been observed in practice, documentation on this is non-existent AFAIK.
|
||||
self._attr_is_on = limitation.min_value in {93, 100}
|
||||
# Velux windows with rain sensors report an opening limitation when rain is detected.
|
||||
# So far we've seen 89, 91, 93 (most cases) or 100 (Velux GPU). It probably makes sense to
|
||||
# assume that any large enough limitation (we use >=89) means rain is detected.
|
||||
# Documentation on this is non-existent AFAIK.
|
||||
self._attr_is_on = limitation.min_value >= 89
|
||||
|
||||
@@ -49,15 +49,29 @@ async def test_rain_sensor_state(
|
||||
assert state is not None
|
||||
assert state.state == STATE_ON
|
||||
|
||||
# simulate rain detected (other Velux models report 93)
|
||||
# simulate rain detected (most Velux models report 93)
|
||||
mock_window.get_limitation.return_value.min_value = 93
|
||||
await update_polled_entities(hass, freezer)
|
||||
state = hass.states.get(test_entity_id)
|
||||
assert state is not None
|
||||
assert state.state == STATE_ON
|
||||
|
||||
# simulate rain detected (other Velux models report 89)
|
||||
mock_window.get_limitation.return_value.min_value = 89
|
||||
await update_polled_entities(hass, freezer)
|
||||
state = hass.states.get(test_entity_id)
|
||||
assert state is not None
|
||||
assert state.state == STATE_ON
|
||||
|
||||
# simulate other limits which do not indicate rain detected
|
||||
mock_window.get_limitation.return_value.min_value = 88
|
||||
await update_polled_entities(hass, freezer)
|
||||
state = hass.states.get(test_entity_id)
|
||||
assert state is not None
|
||||
assert state.state == STATE_OFF
|
||||
|
||||
# simulate no rain detected again
|
||||
mock_window.get_limitation.return_value.min_value = 95
|
||||
mock_window.get_limitation.return_value.min_value = 0
|
||||
await update_polled_entities(hass, freezer)
|
||||
state = hass.states.get(test_entity_id)
|
||||
assert state is not None
|
||||
@@ -144,7 +158,7 @@ async def test_rain_sensor_unavailability(
|
||||
|
||||
# Simulate recovery
|
||||
mock_window.get_limitation.side_effect = None
|
||||
mock_window.get_limitation.return_value.min_value = 95
|
||||
mock_window.get_limitation.return_value.min_value = 0
|
||||
await update_polled_entities(hass, freezer)
|
||||
|
||||
# Entity should be available again
|
||||
|
||||
Reference in New Issue
Block a user