|
3 | 3 | Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/), |
4 | 4 | версионирование — [семантическое](https://semver.org/lang/ru/). |
5 | 5 |
|
| 6 | +## [1.3.0] — 2026-08-03 |
| 7 | + |
| 8 | +Вторая ночь на реальном железе. Машина зарядилась до 100 %, но неправильно: |
| 9 | +семь часов из восьми автоматизация считала собственную зарядку чужой, |
| 10 | +не регулировала ток и не остановилась в конце окна — заряд лился ещё |
| 11 | +двадцать три минуты после 06:55. |
| 12 | + |
| 13 | +Причина — двухсекундный обрыв связи со станцией. Все её сущности уходят |
| 14 | +в недоступность разом, а возвращаются по очереди, за четыре такта. В первом |
| 15 | +такте выключатель «не включён» — и уборка прочитала это как «зарядку |
| 16 | +выключили руками», погасив флаг сессии. Через полторы секунды выключатель |
| 17 | +вернулся, флаг остался опущенным, и выхода из этого состояния не было: |
| 18 | +поднять флаг умела только ветка включения, а она требует выключенной станции. |
| 19 | + |
| 20 | +### Исправлено |
| 21 | + |
| 22 | +- **Обрыв связи больше не отдаёт сессию.** Появилось различие между |
| 23 | + «выключатель выключен» и «выключателя нет на связи» |
| 24 | + (`switch_off_confirmed`). Сброс флага теперь требует подтверждённого |
| 25 | + выключения при живой связи, читаемом статусе и выдержанной паузе — |
| 26 | + мигание сущности под это не подходит. |
| 27 | +- **Потерянный флаг возвращается.** Если зарядка идёт, флаг опущен, а уставка |
| 28 | + сходится с расчётом, автоматизация забирает владение обратно |
| 29 | + (`session_lost`). Признак выбран по уликам, а не по времени: возрасты |
| 30 | + сущностей после обрыва неотличимы от любых других, а вот ток, совпадающий |
| 31 | + с планом, человек выставляет разве что случайно. |
| 32 | +- **Конец окна больше не единственная жертва потерянного флага.** Раньше все |
| 33 | + причины остановки висели на одном признаке, и ложная «чужая сессия» |
| 34 | + отключала их разом. Теперь неисправность, уехавшая машина, выдернутый |
| 35 | + кабель, достигнутая цель и рапорт «заряжено» останавливают зарядку |
| 36 | + независимо от того, кто её начал: к выбору человека они отношения не имеют. |
| 37 | + Ток и конец окна по-прежнему остаются за владельцем сессии. |
| 38 | +- **Флаг сессии поднимается до включения станции, а не после.** Включение |
| 39 | + само меняет статус — то есть срабатывает триггер и обрывает |
| 40 | + последовательность в режиме `restart`. Существовало окно, в котором станция |
| 41 | + уже включена, а владение не отмечено; это был второй, независимый путь |
| 42 | + к той же потере сессии, не требующий никакого обрыва связи. |
| 43 | +- **Ложная неисправность при обрыве.** Сенсор проблемы читается только при |
| 44 | + живой связи и читаемом статусе: при обрыве интеграция успевает отдать |
| 45 | + `on` там, где ничего не сломано. За ночь это трижды поднимало тревогу |
| 46 | + и вдобавок блокировало зарядку. |
| 47 | +- **Недоступный флаг сессии больше не означает чужую сессию.** При |
| 48 | + перезапуске Home Assistant `input_boolean` проходит через `unknown`, |
| 49 | + а триггер `ha_start` гарантирует прогон именно в этот момент — то есть |
| 50 | + каждый перезапуск посреди зарядки отдавал сессию. |
| 51 | +- **Обрыв связи не порождает шторм прогонов.** Переходы в недоступность |
| 52 | + отфильтрованы у триггеров статуса и уставки. Обратный переход остаётся: |
| 53 | + это единственный момент, когда можно узнать о восстановлении станции. |
| 54 | +- **Уведомление «зарядка началась» больше не приходит на каждый обрыв.** |
| 55 | + Команда включения теперь требует подтверждённо выключенного выключателя, |
| 56 | + а не просто «не включённого»: иначе она уходила в отсутствующую |
| 57 | + интеграцию, а вместе с ней срабатывал хук старта. |
| 58 | +- **Моргание сущности не сбрасывает уставку заряжающейся машины.** Уборка |
| 59 | + после остановки читала недоступный выключатель как выключенный и роняла |
| 60 | + ток к минимуму — до следующего пересчёта машина заряжалась на шести |
| 61 | + амперах. |
| 62 | + |
| 63 | +### Добавлено |
| 64 | + |
| 65 | +- **Недодача тока видна в журнале и диагностике.** Станция стабильно отдаёт |
| 66 | + меньше заказанного — на реальном железе 1.3 А при любой уставке, что стоит |
| 67 | + около восьми процентов плана. Величина измеряется и показывается |
| 68 | + (`недодача 1.29 А`), но не компенсируется автоматически: прибавка к расчёту |
| 69 | + попадает в сравнение с уставкой и заставила бы переписывать её на каждом |
| 70 | + пересчёте, а при машине, ограничившей приём, раскачивала бы ток до потолка. |
| 71 | + Вывод — занизить КПД в настройках — остаётся за человеком. |
| 72 | +- **`tools/trace_report.py` подсказывает, что пошло не так.** К журналу |
| 73 | + и списку команд добавилась секция «на что обратить внимание»: обрывы связи, |
| 74 | + периоды, когда автоматизация считала зарядку чужой, и средняя недодача |
| 75 | + тока. На разбор ночи это отвечает тремя строками вместо девяноста. |
| 76 | + |
6 | 77 | ## [1.2.1] — 2026-08-02 |
7 | 78 |
|
8 | 79 | Сплошной разбор кода: блюпринт, тесты, документация, CI и вспомогательный |
|
0 commit comments