Фикс зависания: async_create_stream() обёрнут в wait_for с таймаутом; вокруг ожидания задачи записи обрабатывается CancelledError; при выключении/force-stop зависшие задачи гасятся в единой точке.
Хелперы _is_blocked(), _idle_or_disabled_state(), _force_disable() заменили 5 дублей проверок и два почти идентичных тела set_enabled(False) / _activate_force_stop.
Кэш флага _control_should_be_on в управлении устройствами: опрос states.get и вызовы сервисов только при смене логического флага.
Магические числа вынесены в константы модуля.
В очистке один stat() на файл и dt_util.now() вместо naive-времени.
Убрана двойная публикация в set_enabled; атрибут last_motion_time теперь публикуется сразу.
Ранний выход из _motion_state_changed при блокировке, чтобы не плодить задачи вхолостую.
- Фикс зависания: `async_create_stream()` обёрнут в `wait_for` с таймаутом; вокруг ожидания задачи записи обрабатывается `CancelledError`; при выключении/force-stop зависшие задачи гасятся в единой точке.
- Хелперы `_is_blocked()`, `_idle_or_disabled_state()`, `_force_disable()` заменили 5 дублей проверок и два почти идентичных тела `set_enabled(False)` / `_activate_force_stop`.
- Кэш флага `_control_should_be_on` в управлении устройствами: опрос `states.get` и вызовы сервисов только при смене логического флага.
- Магические числа вынесены в константы модуля.
- В очистке один `stat()` на файл и `dt_util.now()` вместо naive-времени.
- Убрана двойная публикация в `set_enabled`; атрибут `last_motion_time` теперь публикуется сразу.
- Ранний выход из `_motion_state_changed` при блокировке, чтобы не плодить задачи вхолостую.
- Фикс зависания: `async_create_stream()` обёрнут в `wait_for` с таймаутом; вокруг ожидания задачи записи обрабатывается `CancelledError`; при выключении/force-stop зависшие задачи гасятся в единой точке.
- Хелперы `_is_blocked()`, `_idle_or_disabled_state()`, `_force_disable()` заменили 5 дублей проверок и два почти идентичных тела `set_enabled(False)` / `_activate_force_stop`.
- Кэш флага `_control_should_be_on` в управлении устройствами: опрос `states.get` и вызовы сервисов только при смене логического флага.
- Магические числа вынесены в константы модуля.
- В очистке один `stat()` на файл и `dt_util.now()` вместо naive-времени.
- Убрана двойная публикация в `set_enabled`; атрибут `last_motion_time` теперь публикуется сразу.
- Ранний выход из `_motion_state_changed` при блокировке, чтобы не плодить задачи вхолостую.
sirmrak
merged commit 81f176ef2b into main2026-07-24 13:58:23 +03:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
async_create_stream()обёрнут вwait_forс таймаутом; вокруг ожидания задачи записи обрабатываетсяCancelledError; при выключении/force-stop зависшие задачи гасятся в единой точке._is_blocked(),_idle_or_disabled_state(),_force_disable()заменили 5 дублей проверок и два почти идентичных телаset_enabled(False)/_activate_force_stop._control_should_be_onв управлении устройствами: опросstates.getи вызовы сервисов только при смене логического флага.stat()на файл иdt_util.now()вместо naive-времени.set_enabled; атрибутlast_motion_timeтеперь публикуется сразу._motion_state_changedпри блокировке, чтобы не плодить задачи вхолостую.