--- aliases: - haos local addon - MQTT discovery HA - датчики HA из аддона - HAOS addon sensors created: '2026-09-17' namespace: family related: - '[[family/tech/t610-hw-metrics-addon]]' - '[[family/how-to/home-automation]]' - '[[family/how-to/ha-automations]]' tags: - family - tech - smarthome - haos - skill title: "🧩 HAOS: локальный аддон → датчики в HA UI (skill)" type: tech updated: '2026-09-17' --- # 🧩 HAOS: локальный аддон → датчики в HA UI > **Зеркало скилла** `haos-local-addon-publish-sensors` (категория `devops`). > Путь: `~/.hermes/hermes-whale/skills/devops/haos-local-addon-publish-sensors/SKILL.md`. > Дополняет скилл `ha-automation-debugging`. Загружать, когда нужно **завести свои данные > как сенсоры HA, видимые в UI** (метрики хоста, скрейпинг, всё, что не покрыто интеграцией). > Практический пример применения — [[family/tech/t610-hw-metrics-addon]]. --- ## 0. Главное решение: MQTT discovery, НЕ REST | | `POST /api/states/` | **MQTT discovery** ✅ | |---|---|---| | В `entity_registry` | ❌ **нет** | ✅ да | | `unique_id` / `device` | ❌ / ❌ | ✅ / ✅ | | Назначить `area_id` | ❌ **невозможно** (нет записи в реестре) | ✅ да | | Видно на дашбордах зон | ❌ нет | ✅ да | | История в recorder | пишется, запись осиротевшая | ✅ нормально | **REST-сущности живут только в state machine.** Отвечают по `/api/states`, видны в Developer Tools → States, но **отсутствуют в `config/entity_registry/list`**. Проверено фактом: `POST /api/states/sensor.x` → 200, затем `find ` в реестре → 0. > 🔴 **Проверять по реестру, а не по `/api/states`.** «Отвечает по API» ≠ «сущность настоящая». > Grep по `config/entity_registry/list` через WebSocket — это и есть приёмка. > Если пользователь говорит «покажи в UI» — REST уже не подходит. **Следствие:** блок `mqtt:` в `configuration.yaml` **не нужен**, если интеграция `mqtt` уже настроена (обычно так и есть — проверять `/api/config` → `.components` содержит `mqtt`). --- ## 1. MQTT изнутри контейнера — адресовать правильно `mosquitto_pub` внутри контейнера аддона **работает** — но только по правильному адресу: | Адрес | Результат | |---|---| | `core-mosquitto` ✅ | **работает** (Docker DNS; резолвится в IPv6 `fd0c:ac1e:2100::7`) | | `127.0.0.1` / `localhost` ❌ | `Bad file descriptor` — у аддона свой netns, на 1883 никто не слушает | | `192.168.2.176` (LAN IP хоста) ❌ | та же ошибка | ```bash getent hosts core-mosquitto # DNS резолвится? nc -z core-mosquitto 1883 && echo OPEN ``` > ⚠️ **Неверный питфолл размножается:** ранее в доке было записано «MQTT из контейнера не > работает вообще». Это был **баг адреса**, а не MQTT. `Bad file descriptor` от > `mosquitto_pub` = **неверный хост**, а не сломанный клиент. --- ## 2. Структура файлов локального аддона ``` /addons// # chmod 600 каждому файлу config.yaml # манифест: slug, version, options, schema, map, host_network Dockerfile # FROM alpine:3.20 + apk add bash jq mosquitto-clients coreutils