[2026-09-17] eagle: family/how-to/gitea-config.md family/how-to/home-automation.md family/how-to/zont-config-compiler.md family/tech/t610-hang-investigation.md family/tech/t610-hw-metrics-addon.md family/tech/t610-relay-off-log-forensics.md family/tech/zont-api.md family/tech/zont-config-object-types.md family/tech/zont-scenario-logic-11109.md personal/projects/zont-config-compiler.md

This commit is contained in:
Alexey Martemyanov
2026-09-17 19:52:35 +06:00
parent 8d5824d6fa
commit 00a2c54954
10 changed files with 962 additions and 2777 deletions
+58 -1
View File
@@ -2,7 +2,7 @@
title: "🔴 t610: зависания — диагностика (незакрыто)"
aliases: [t610 hang, t610 зависание, t610 freeze, RCU stall investigation, MemTotal деградация, UMA frame buffer, BIOS update t610, CMOS батарейка]
tags: [family, tech, smarthome, t610, incident]
updated: 2026-09-17b
updated: 2026-09-17c
---
# 🔴 t610 — зависания: состояние расследования
@@ -11,6 +11,8 @@ updated: 2026-09-17b
> ✅ **2026-09-17: следы больше не теряются** — заведён сбор метрик аддоном `local_hw_metrics`:
> 11 датчиков в HA + строка на диск со `sync` каждые 60 с → **[[family/tech/t610-hw-metrics-addon]]**.
> Каждый следующий инцидент оставит данные за последнюю минуту жизни хоста.
> 🆕 **2026-09-17: ВТОРОЙ рестарт за сутки** — HA Core стартовал 02:44:33 UTC (09:44:33 +07),
> причина **неизвестна**. Разбор ложного «выключения реле котла» — **§1.1**.
> **Три кандидата:** (A) 🔴 **память** — стоит 4 ГБ, оба слота заняты, видно 1.44 ГБ
> (§3.1.0) + 🔑 **UMA Frame Buffer в BIOS** как документированный механизм потери (§3.1.3)
> + 🔑 **батарейка CMOS** (§3.1.4) · (B) деградация носителя → SQLite disk I/O (§5).
@@ -34,6 +36,61 @@ updated: 2026-09-17b
Alex перезапустил t610 вручную (сброс питанием) **2026-09-17 ~09:38 +07**.
Хост поднялся заново; HA Core стартовал ~09:4109:43.
### 1.1. 🔴 Второй инцидент за сутки: рестарт HA Core 2026-09-17 02:44:33 UTC (09:44:33 +07)
> **Повод:** Alex спросил «посмотри в логе, почему последний раз выключалось реле адаптера котла».
> Разбор — фактом по логбуку, **без версий**.
**Симптом:** `switch.boiler_controller_power` (розетка питания контроллера котла) — выключилось.
**Что показал логбук (окно 02:3002:48 UTC):**
```
02:44:26 sensor.sm_s931b_battery_state → discharging ← телефон Alex, не связано
02:44:32.658 switch.boiler_controller_power → unavailable
02:44:33.033 switch.recirculation_pump → off
02:44:33.663 - (null) message=started ← 🔑 ЗАПУСК HA CORE
02:44:40.946 switch.sauna → off
02:44:42.104 switch.heating_cable_plug → off
02:44:42.172 light.dushevaia_night_light → off
02:45:09.291 switch.boiler_controller_power → on ← вернулось САМО через 36 с
02:45:10.254 switch.boiler_controller_power_child_lock → off
```
> ✅ **ВЫВОД: реле физически НЕ выключалось.** Выключился/перезапустился **HA Core**,
> ZHA на время потеряла связь с Zigbee-устройствами, и HA записала дефолтные состояния.
>
> **Доказательства (четыре независимых):**
> 1. **`message=started`** в 02:44:33 — запись о **старте HA Core** вклинилась ровно
> между пропаданием и возвратом реле.
> 2. **Все Zigbee-реле ушли в `off`/`unavailable` одним окном** 02:44:3342
> (`recirculation_pump`, `sauna`, `heating_cable_plug`, `dushevaia_night_light`) —
> это потеря связи, а не выключение каждого реле.
> 3. **`boiler_controller_power` вернулось в `on` само через 36 с** без команды.
> Реальное выключение реле так себя не ведёт.
> 4. В атрибутах `select.boiler_controller_power_power_outage_memory` = **`LastState`** —
> Zigbee-реле при потере связи **сохраняют последнее состояние**. Котёл продолжал питаться.
**Практический вывод для Alex:** реле адаптера котла всё время оставалось под питанием,
отопительный контур не прерывался. Тревога ложная по существу.
> 🔴 **Что осталось неизвестным:** **почему HA Core перезапустился в 02:44:33 UTC.**
> Логбук фиксирует факт старта, но не причину. Копать: `ha core logs`,
> `ha supervisor logs`, журнал рестартов ядра.
> ⚠️ Это **второй рестарт за сутки** (первый — ручной сброс питанием ~09:38 +07, §1).
> Совпадение по времени с общей нестабильностью хоста — **кандидат в общее расследование.**
> 📌 **Метод (воспроизводимо, оба способа дали результат):**
> ```bash
> # история с АТРИБУТАМИ (без minimal_response — иначе нет деталей)
> curl -s -H @/tmp/h1 "$B/api/history/period/<ISO>+00:00?end_time=<ISO>%2B00:00&filter_entity_id=switch.boiler_controller_power" | jq -r '.[] | .[] | "\(.last_changed) \(.state)"'
>
> # логбук по окну — видно .message ("started") и весь контекст дома
> curl -s -H @/tmp/h1 "$B/api/logbook/<ISO>+00:00?end_time=<ISO>%2B00:00" | jq -r '.[] | "\(.when) \(.entity_id // "-") \(.state) \(.message // "")"'
> ```
> 🔑 **Логбук по ВСЕМУ дому, а не по одной сущности** — именно так нашлась запись
> `message=started`, которой нет в истории отдельной сущности.
### 1.0. 📋 ФОРМУЛИРОВКА ЗАДАЧИ (согласованная формулировка сессии)
> Alex несколько раз требовал переписать формулировку — без ссылок на доки, только