Skip to content

Commit 5b17f81

Browse files
Исправления после второй ночи реального использования
1 parent 626fcf0 commit 5b17f81

11 files changed

Lines changed: 1232 additions & 94 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ body:
7171
attributes:
7272
label: Версия блюпринта
7373
description: Указана в конце описания блюпринта.
74-
placeholder: "1.2.1"
74+
placeholder: "1.3.0"
7575
validations:
7676
required: true
7777

CHANGELOG.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,77 @@
33
Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/),
44
версионирование — [семантическое](https://semver.org/lang/ru/).
55

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+
677
## [1.2.1] — 2026-08-02
778

879
Сплошной разбор кода: блюпринт, тесты, документация, CI и вспомогательный

0 commit comments

Comments
 (0)