Files
obsidian-vault/family/tech/kitchen-hood-domain-conversion.md
T

133 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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»)