Перейти к содержанию

Сводка по сессии: trace_report.py

Через интерфейс «Активность» журнал не выгружается — кнопки скачивания там нет. Но выгружать его отдельно и не нужно: записи журнала лежат прямо внутри трассировок, вместе с временем. Скачайте нужные трассировки в одну папку и запустите:

python3 tools/trace_report.py ~/Downloads

Скрипт разберёт их и покажет то, ради чего трассировки обычно и скачивают:

Прогонов: 47

=== ЖУРНАЛ ===
08-02 23:05:00  запускаем зарядку | план=soc | заряд=53.0% | нужно 23.97 кВт·ч за 455 мин | ...
08-03 00:21:24  зарядка начата вручную, не вмешиваемся | план=soc | заряд=60.0% | ...

=== ОТПРАВЛЕННЫЕ КОМАНДЫ ===
08-02 23:05:00  number.set_value
08-02 23:06:26  switch.turn_on, input_boolean.turn_on
08-03 00:21:22  input_boolean.turn_off

=== НА ЧТО ОБРАТИТЬ ВНИМАНИЕ ===
08-03 00:21:22 станция теряла связь
08-03 00:21 — 02:46 (2.4 ч) сессия считалась чужой: ток не регулировался
станция отдавала на 10 % меньше уставки (по 31 замерам) — сверьте с «Запасом
по току»; на других токах доля будет иной, разрыв в амперах постоянен

Список команд полезен сам по себе: сразу видно, сколько раз за сессию автоматизация вообще что-то сделала и когда.

Последняя секция отвечает на вопрос «а что вообще пошло не так», не заставляя вчитываться в девяносто строк журнала. Она замечает четыре вещи: обрывы связи со станцией, длительные периоды, когда автоматизация считала зарядку чужой (обычно это признак потерянного флага сессии, а не ручного включения), систематическую недодачу тока и гонку триггеров — два прогона, стартовавших почти одновременно и пославших станции одну и ту же команду (лечится обновлением до 1.4.4). Пример выше — настоящая сессия, и именно эти строки объясняли всё, что в ней случилось.

Недодача считается по этой конкретной сессии, поэтому число отличается от типичного «около 1.3 А», приведённого в разделе «Станция отдаёт меньше, чем просили»: там речь о величине, устоявшейся за несколько сессий, здесь — о среднем за одну.

Ключ Что делает
--vars добавляет таблицу решений по каждому пересчёту
--tz 3 часовой пояс, часов от UTC (по умолчанию 3, московский)
--json машинночитаемый вывод целиком, включая все переменные

Ничего устанавливать не нужно — только системный Python 3.9 или новее (проверено на 3.9). Скрипт работает локально и никуда ничего не отправляет.

Для отчёта об ошибке достаточно двух-трёх трассировок вокруг проблемного момента — выгружать всю сессию целиком не требуется.