133 lines
9.7 KiB
Markdown
133 lines
9.7 KiB
Markdown
---
|
||
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»)
|