From 8d586a36427ce9407ef1f9ebd367b9e9a59559b2 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Wed, 16 Sep 2026 07:14:42 +0600 Subject: [PATCH] [2026-09-16] eagle: family/documents/home-automation-wishlist.md family/how-to/ha-automations.md family/how-to/home-automation.md family/tech/kitchen-hood-domain-conversion.md family/tech/zigbee-t610-z2m-i-zha.md --- family/documents/home-automation-wishlist.md | 1 + family/how-to/ha-automations.md | 1 + family/how-to/home-automation.md | 3 +- family/tech/kitchen-hood-domain-conversion.md | 132 ++++++++++++++++++ family/tech/zigbee-t610-z2m-i-zha.md | 3 + 5 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 family/tech/kitchen-hood-domain-conversion.md diff --git a/family/documents/home-automation-wishlist.md b/family/documents/home-automation-wishlist.md index 1dd3abcf..edbf72ec 100644 --- a/family/documents/home-automation-wishlist.md +++ b/family/documents/home-automation-wishlist.md @@ -38,6 +38,7 @@ related: ### 1. ⭐ Вентиляция по CO₂ — доехать до конца Логика **уже написана** в Node-RED ([[family/how-to/home-automation]]): Demand Aggregator → Intake Allocation → Discretization → Damper Outputs → Exhaust Arbitration → Fans → Kitchen Hood. **Блокер:** `fan.fan_at2_1/2` и `switch.fan_3_*` (slave 10) — `unavailable`, блок закомментирован в `configuration.yaml`. +> 🍳 **Отдельно по вытяжке кухни:** ZHA отдаёт её тремя `light.kitchen_hood_light*` (TS0003 = 3 реле). Узел «Kitchen Hood» в Node-RED ждёт **`fan`/`switch`**, а не `light`. Прямой смены домена в HA нет — нужен Template-fan/switch. Разбор и варианты — [[family/tech/kitchen-hood-domain-conversion]]. **Что нужно:** раскомментировать slave 10 и убедиться, что AT2 отвечает (в §5 доки плана зафиксировано: прямой `nc` на slave 10 даёт `OK`, значение 100 → железо живо). **⚠️ Конфликт:** задача по slave 10 **снята Alex'ом 2026-09-14**. Если решаем не трогать — вентиляция остаётся ручной, и весь CO₂-алгоритм простаивает. **Требует решения.** diff --git a/family/how-to/ha-automations.md b/family/how-to/ha-automations.md index 2bf5eca4..846fa984 100644 --- a/family/how-to/ha-automations.md +++ b/family/how-to/ha-automations.md @@ -18,6 +18,7 @@ > 1. **`device`-триггер батареи — тип `battery_level`, НЕ `battery`.** Иначе `Automation ... failed to setup triggers and has been disabled`. > 2. **`binary_sensor` «battery_low» в ZHA нет** — только numeric `sensor.*_battery`, порог через `below: 10`. > 3. **Домен `entity_id` не меняется переименованием:** `switch.office_table_light_switch_l1` → ZHA-имя `light.tz3000_5gey1ohx_ts0002_osveshchenie`. Автоматизации переписаны на `light.*`. + > 🍳 **Сменить домен у СУЩЕСТВУЮЩЕЙ сущности HA нельзя** (ни реестром, ни customize). Обход — Template-хелпер поверх исходной сущности. `switch_as_x` для этого не годится: принимает **только `switch`**, не `light`. Разбор — [[family/tech/kitchen-hood-domain-conversion]]. > 4. **`reload` — `POST /api/services/automation/reload`** с long-lived JWT, порт 80 (`http://172.30.32.1/api/`). Супервизорский токен → 401. ## 1. Где живёт diff --git a/family/how-to/home-automation.md b/family/how-to/home-automation.md index 8c59150d..19bf9d4b 100644 --- a/family/how-to/home-automation.md +++ b/family/how-to/home-automation.md @@ -455,7 +455,7 @@ ssh -i ~/.ssh/id_rsa root@192.168.2.176 \ | `office_table_light_switch` | TS0002 | выключатель стола кабинета | Кабинет | | `smart_light_office` | TS0012 | свет кабинета (left/right) | Кабинет | | `light_stairs` | TS0002 | подсветка лестницы | Лестница | -| `kitchen_hood` | TS0003 | вытяжка кухни (3 скорости) | Кухня | +| `kitchen_hood` | TS0003 | вытяжка кухни (3 скорости) — ZHA отдаёт как **3 × `light.*`** ⚠️ | Кухня | | `sauna` | TS011F | реле сауны | — | | `heating_cable_plug` | TS011F | розетка греющего кабеля ввода воды | Котельная | | `boiler_controller_power` | TS011F | питание контроллера котла | Котельная | @@ -861,6 +861,7 @@ ssh root@192.168.2.176 'ha apps logs local_modbus-bridge | grep -E "Raw RTU|→ - ⚠️ **Осиротевший `/config/go2rtc.yaml`** (1085 байт) — go2rtc удалён, читать нечем. - ⚠️ **Watchdog `local_ustreamer` не включён** (в отличие от остальных 6 аддонов, §3.7). - ⚠️ **Свет кабинета мигает при перезагрузке HA** — `office_pass_switch_*` с `platform: state` без `to`. Разбор — [[family/how-to/ha-automations]] §3. +- 🍳 **Вытяжка кухни отдаётся как 3 × `light.*` — Alex хочет вывести из категории «свет».** Прямой смены домена нет; рабочий путь — Template-fan/switch поверх `light.*`. Ждёт решения + уточнения маппинга «реле → скорость». Разбор — [[family/tech/kitchen-hood-domain-conversion]]. - ⚠️ **Греющий кабель не проверен физически** — розетка ни разу не включалась. **Справочные факты:** diff --git a/family/tech/kitchen-hood-domain-conversion.md b/family/tech/kitchen-hood-domain-conversion.md new file mode 100644 index 00000000..e354b691 --- /dev/null +++ b/family/tech/kitchen-hood-domain-conversion.md @@ -0,0 +1,132 @@ +--- +title: "🍳 Вытяжка кухни — смена домена сущностей (light → fan/switch)" +aliases: [kitchen hood, kitchen_hood, вытяжка домен, TS0003 fan, hood light to fan, вытяжка категория свет] +tags: [family, tech, smarthome, home-assistant, zigbee, zha] +created: '2026-09-16' +updated: '2026-09-16 — исследование: как перевести вытяжку из категории «свет» в fan/switch' +type: tech +namespace: family +status: 🔬 **ИССЛЕДОВАНИЕ ЗАВЕРШЕНО, ПРАВКА НЕ ВНЕСЕНА.** Ответ: прямого способа сменить домен нет; рабочий путь — Template-хелпер поверх `light.*`. Ждёт решения Alex. +related: + - '[[family/how-to/home-automation]]' + - '[[family/how-to/ha-automations]]' + - '[[family/tech/zigbee-t610-z2m-i-zha]]' + - '[[family/tech/ha-registry-operations]]' +--- + +# 🍳 Вытяжка кухни — смена домена (light → fan / switch) + +> **Вопрос Alex (2026-09-16):** «можно всё-таки кухонную вытяжку перевести из категории свет в другую?» +> **Короткий ответ: да, но не «перевести» существующую сущность, а **подменить её сверху** через Template-хелпер.** Прямой смены домена у сущности ZHA в HA не существует. +> 📄 Техчасть по хосту/Zigbee — [[family/how-to/home-automation]], [[family/tech/zigbee-t610-z2m-i-zha]]. + +--- + +## 1. Живое состояние (проверено фактом 2026-09-16) + +Устройство: **`kitchen_hood`** · `device_id` **`200ea4fb25daaa907279045e47a330b5`** · IEEE `a4:c1:38:07:b6:4c:7f:d4` · зона `kitchen`. + +| Сущность | Роль (`original_name`) | Домен | Состояние | +|---|---|---|---| +| `light.kitchen_hood_light` | Освещение (endpoint 1) | light | **`on`** | +| `light.kitchen_hood_light_2` | Освещение (endpoint 2) | light | `off` | +| `light.kitchen_hood_light_3` | Освещение (endpoint 3) | light | `off` | + +Прочее на том же устройстве: `select.kitchen_hood_indicator_mode` (`LightWhenOn`), `select.kitchen_hood_power_outage_memory` (`Off`), `sensor.kitchen_hood_power` / `_voltage` / `_current` / `_energy` (все `0.0`), `button.kitchen_hood_identify`, `update.kitchen_hood_firmware`, `sensor.kitchen_hood_lqi` / `_rssi` (`disabled_by: integration`). + +**Модель:** `TS0003` · **manufacturer:** `_TZ3000_odzoiovu` · **platform:** `zha`. + +**Атрибуты `light.*`:** `supported_color_modes: ["onoff"]`, `supported_features: 8` — то есть **чистое реле без яркости**. Именно поэтому HA-логика «это лампа» здесь ложная, а Alex хочет переклассификации. + +> 🔴 **`sensor.kitchen_hood_lqi` / `_rssi` → HTTP 404 через `/api/states`.** Это **норма**: `disabled_by: integration` — сущности в реестре есть, в runtime их нет. Не считать поломкой. + +**Скрипт сканирования:** `~/tmp-t610/hood_scan.py` (read-only: devices + entities + device_class + show_as + area + states). + +--- + +## 2. Что НЕ работает (проверено по документации) + +| Способ | Почему нет | +|---|---| +| **`switch_as_x`** (официальный хелпер «Change device type of a switch») | Источник — **только `switch`**. Превращает switch в Light/Cover/Fan/Lock/Siren/Valve. **`light` на вход не принимает.** Для вытяжки бесполезен. → https://www.home-assistant.io/integrations/switch_as_x/ | +| **Смена домена в реестре** (`config/entity_registry/update` с новым `entity_id`) | HA **блокирует смену домена**. Переименование живёт только внутри домена (`light.a` → `light.b`). Подтверждается докой customizing-devices: entity_id = «lowercase letters, numbers, underscores», про смену домена — ничего. | +| **Кастомный quirk в `zhaquirks`** | Технически возможно (подменить Light-cluster на Switch), но: правка файлов **внутри HAOS-контейнера**, ломается при каждом обновлении HA, и **переименует сущности** → отвалятся все ссылки в автоматизациях. Не оправдано. | +| **`homeassistant: customize:`** (device_class/icon override) | Меняет только атрибуты, **не домен**. `light.` останется `light.`. | + +--- + +## 3. Что РАБОТАЕТ — Template-хелпер (Вариант A, рекомендуемый) + +Один YAML-блок в `configuration.yaml`. Даёт настоящий `fan.kitchen_hood_2` с `percentage`: + +```yaml +template: + - fan: + - name: Kitchen hood 2 + unique_id: kitchen_hood_fan_2 + state: "{{ states('light.kitchen_hood_light_2') }}" + percentage: "{{ 100 if is_state('light.kitchen_hood_light_2','on') else 0 }}" + turn_on: + action: light.turn_on + target: {entity_id: light.kitchen_hood_light_2} + turn_off: + action: light.turn_off + target: {entity_id: light.kitchen_hood_light_2} +``` + +**Применение:** `configuration.yaml` → **Developer Tools → Check configuration** → **Перезапуск HA Core**. + +> ⚠️ **Template-fan принимает `light.*` как источник** — блок `action:` может звать любой сервис, ограничения `switch_as_x` (только switch) здесь не действуют. Это и есть обход. + +### Варианты + +| # | Что | Когда | +|---|---|---| +| **A** | Template `fan` поверх `light_2` | ⭐ рекомендуемый старт | +| **B** | Template `switch` — то же без `percentage` | если скорость не нужна, нужен просто «не свет» | +| **C** | Три `fan`/`switch` (`hood_speed_1/2/3`) + взаимоблокировка | если нужны **реальные 3 скорости** | + +--- + +## 4. 🔴 Три скорости вытяжки — как это работает физически + +`TS0003` = **3 независимых реле**. «Скорость 1/2/3» — это три отдельных контакта, включаемых **по одному**. + +- Template-fan с `percentage` **не даст настоящую скорость** — он включит одно реле. +- Правильно: три сущности `hood_speed_1/2/3` + **автоматизация взаимоблокировки** (включил одну → две другие `off`), либо `input_select` + автоматизация. +- Комбинации «реле 1+2 = скорость 4» — проверять по факту, требует замера поведения железа. + +**Оценка работы:** ~20 мин на `input_select` + автоматизацию взаимоблокировки. **Правка боевого `configuration.yaml` → только по явной команде Alex.** + +--- + +## 5. ⚠️ Что нужно уточнить перед правкой + +1. **Какое реле = какая скорость.** Сейчас `light_2` и `light_3` = `off`, `light` = `on`. Неизвестно, какое реле за какую скорость отвечает. +2. **Идёт ли `light` (endpoint 1) на свет вытяжки, а `light_2`/`_3` — на скорости.** Гипотеза требует проверки нажатием. +3. Нужен ли реально `percentage`, или достаточно переключателя «не свет». + +> 🔴 **Не правки ради:** сначала определить физический маппинг реле → скорости, иначе автоматизация будет дёргать не то. + +--- + +## 6. Питфоллы этого исследования + +| # | Питфолл | Обход | +|---|---|---| +| 1 | **`switch_as_x` кажется подходящим, но `light` на вход не берёт** | Источник — только `switch`. Для `light` — Template. | +| 2 | **`sensor.kitchen_hood_lqi` / `_rssi` → 404 в `/api/states`** | `disabled_by: integration` — норма | +| 3 | **Шаблоны проверять только REST `POST /api/template`** | WS `render_template` → `null` даже для `2+2` | +| 4 | 🔴 **REST `POST` без `-H "Content-Type: application/json"` → пустой ответ** | Всегда ставить заголовок | +| 5 | 🔴 **Заголовок авторизации рвётся маскировщиком Hermes** | Собирать по частям либо Python + `urllib` (пример — `hood_scan.py`) | +| 6 | ⚠️ Правка `configuration.yaml` требует **restart HA Core**, не reload | `automation reload` тут не поможет | + +--- + +## 7. Связанные + +- [[family/how-to/home-automation]] — топология, хост, аддоны, Modbus, питфоллы +- [[family/tech/zigbee-t610-z2m-i-zha]] — карта Zigbee-устройств ZHA, `kitchen_hood` в ней +- [[family/tech/ha-registry-operations]] — операции с реестрами HA +- [[family/how-to/ha-automations]] — автоматизации, карта id +- [[family/documents/home-automation-wishlist]] — роадмап (алгоритм вентиляции ждёт «Kitchen Hood») diff --git a/family/tech/zigbee-t610-z2m-i-zha.md b/family/tech/zigbee-t610-z2m-i-zha.md index 134c713c..03eab0a2 100644 --- a/family/tech/zigbee-t610-z2m-i-zha.md +++ b/family/tech/zigbee-t610-z2m-i-zha.md @@ -77,6 +77,9 @@ related: > 📌 **Прихожая** ранее имела ошибочный префикс `tualet_` — исправлено на `prikhozhaia_floor_temperature`. > 📌 **Координатор** `Inswift ZBP-MG21` — 45 диагностических сущностей, все `disabled_by: integration`. +> 🍳 **`kitchen_hood` (`a4c13807b64c7fd4`, `_TZ3000_odzoiovu`) отдаётся ZHA как ТРИ `light.*`, а не `switch.*`:** `light.kitchen_hood_light` / `_light_2` / `_light_3` (endpoint 1/2/3), все `supported_color_modes: ["onoff"]` — чистые реле без яркости. `device_id 200ea4fb25daaa907279045e47a330b5`. +> ❓ **Alex хочет вывести вытяжку из категории «свет».** Прямой смены домена у сущности НЕТ; рабочий путь — Template-fan/switch поверх `light.*` (`switch_as_x` не годится: принимает только `switch`). Разбор, варианты, маппинг «3 реле = 3 скорости», что уточнить перед правкой — [[family/tech/kitchen-hood-domain-conversion]]. + ### 2.1. 🔴 Как переименовывать (проверенный рецепт 2026-09-15) **Смена `name_by_user` у устройства НЕ переименовывает `entity_id`** — HA перегенерирует их только у новых сущностей. Обязательны два шага: