diff --git a/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/const.cpython-312.pyc b/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/const.cpython-312.pyc new file mode 100644 index 0000000..4b7df88 Binary files /dev/null and b/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/const.cpython-312.pyc differ diff --git a/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/coordinator.cpython-312.pyc b/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/coordinator.cpython-312.pyc index 7485788..88c6fa1 100644 Binary files a/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/coordinator.cpython-312.pyc and b/sternwarte-homeassistant-integration/custom_components/sternwarte/__pycache__/coordinator.cpython-312.pyc differ diff --git a/sternwarte-homeassistant-integration/custom_components/sternwarte/const.py b/sternwarte-homeassistant-integration/custom_components/sternwarte/const.py index 14e53e1..0e061ad 100644 --- a/sternwarte-homeassistant-integration/custom_components/sternwarte/const.py +++ b/sternwarte-homeassistant-integration/custom_components/sternwarte/const.py @@ -17,6 +17,7 @@ DEFAULT_PASSWORD = "sowo2009" UPDATE_INTERVAL_SECONDS = 1 POWER_ON_DELAY_SECONDS = 30 +OPEN_SCHEDULE_MAX_AGE_SECONDS = 6 * 60 * 60 WIND_INTERVAL_SECONDS = 30 WIND_COUNTER_INDEX = 4 WIND_FACTOR = (2 / 3) * 3.6 diff --git a/sternwarte-homeassistant-integration/custom_components/sternwarte/coordinator.py b/sternwarte-homeassistant-integration/custom_components/sternwarte/coordinator.py index cd15afb..76da6d5 100644 --- a/sternwarte-homeassistant-integration/custom_components/sternwarte/coordinator.py +++ b/sternwarte-homeassistant-integration/custom_components/sternwarte/coordinator.py @@ -23,6 +23,7 @@ from .const import ( CONF_PASSWORD, CONF_PORT, DEFAULT_NAME, + OPEN_SCHEDULE_MAX_AGE_SECONDS, POWER_ON_DELAY_SECONDS, ROOF_COUNTER_CLOSE_INDEX, ROOF_COUNTER_OPEN_INDEX, @@ -586,6 +587,24 @@ class SternwarteDataUpdateCoordinator(DataUpdateCoordinator[SternwarteState]): changed = True open_power_on_at = self._schedule_datetime(self.schedule.open_power_on_at) + open_at = self._schedule_datetime(self.schedule.open_at) + if ( + open_at is not None + and not self.schedule.open_done + and now - open_at > timedelta(seconds=OPEN_SCHEDULE_MAX_AGE_SECONDS) + ): + LOGGER.warning( + "Veraltete Öffnungsplanung verworfen: open_at=%s now=%s", + open_at.isoformat(), + now.isoformat(), + ) + self.schedule.open_at = "" + self.schedule.open_done = True + self.schedule.open_power_on_at = "" + changed = True + open_power_on_at = None + open_at = None + if open_power_on_at is not None and not self.schedule.open_done and now >= open_power_on_at: if self._is_roof_open(state): LOGGER.info("Automatisches Öffnen bereits erfüllt") @@ -645,7 +664,6 @@ class SternwarteDataUpdateCoordinator(DataUpdateCoordinator[SternwarteState]): ) changed = True - open_at = self._schedule_datetime(self.schedule.open_at) if open_at is not None and not self.schedule.open_done and now >= open_at and not self.schedule.open_power_on_at: if self._is_roof_open(state): LOGGER.info("Automatisches Öffnen übersprungen, Dach ist bereits offen")