Перейти к содержанию

8. Интеграция NOEMA Alice в Home Assistant

Интеграция noema_alice добавляется через интерфейс HA, сама находит колонку на мосту и создаёт устройство с сущностью media_player.alisa. Через неё работают tts.speak, медиабраузер, радио, пауза и громкость. YAML и rest_command не нужны.

1. Установка

Положите папку custom_components/noema_alice в /config/custom_components/ на HA (Samba, Studio Code Server или File editor):

/config/custom_components/noema_alice/
├── __init__.py
├── config_flow.py
├── const.py
├── manifest.json
├── media_player.py
├── binary_sensor.py
├── button.py
├── coordinator.py
├── select.py
└── translations/
    ├── en.json
    └── ru.json

Перезапустите HA.

2. Добавление

Настройки → Устройства и службы → Добавить интеграцию → NOEMA Alice. Мастер спросит адрес моста (http://192.168.1.49) и имя колонки («Алиса»). Затем запросит у моста /_status и возьмёт device_id подключённой колонки сам; если колонок несколько, предложит выбрать.

Ошибки мастера:

  • «Мост не отвечает» — не запущена служба alice-ha или неверный адрес.
  • «Колонка не подключена» — мост работает, но колонка к нему ещё не переподключилась. Подождите 30 секунд.

ID сущности (media_player.alisa) — автоматическая транслитерация имени «Алиса». Если задать другое имя, ID изменится.

3. Проверка

action: tts.speak
target:
  entity_id: tts.piper
data:
  media_player_entity_id: media_player.alisa
  message: "Плеер подключён"
action: media_player.volume_set
target:
  entity_id: media_player.alisa
data:
  volume_level: 0.3

Сущность становится «недоступной», когда колонка не подключена к мосту: интеграция раз в 10 секунд проверяет /_status.

Датчики, кнопка и выбор движков

Кроме плеера интеграция создаёт на устройстве ещё пять сущностей:

Сущность Что показывает
binary_sensor «Мост» вкл — мост отвечает на /_status
binary_sensor «Колонка на связи» вкл — колонка подключена к мосту
button «Перезапустить мост» перезапускает службу alice-ha через POST /_restart
select «Движок речи» какой TTS-движок HA использует мост (tts.piper, tts.silero_tts_enhanced, …); рекомендуем Silero
select «Распознавание речи» какой STT-движок HA использует мост (stt.vosk, …)

Датчики опрашиваются раз в 10 секунд. «Мост» выкл — мост не работает или неверен адрес. «Мост» вкл, а «Колонка на связи» выкл — колонка не подключилась (после перезапуска ждите около 30 секунд). Кнопка требует патч apply_restart.py на мосту, выбор движков — apply_config.py (часть 7). Список вариантов HA берёт из установленных TTS и STT. Выбор применяется сразу, без перезапуска, и сохраняется в ha.env моста. Без патча apply_config.py эти два списка недоступны.

Сообщение через play_media (формат интеграции AlexxIT)

Старые автоматизации с media_content_type: dialog работают без правок. Допустимые типы: dialog, text, tts.

action: media_player.play_media
target:
  entity_id: media_player.alisa
data:
  media_content_type: dialog
  media_content_id: Принтер закончил печать
  extra:
    volume_level: 0.2

extra.volume_level необязателен. Громкость колонки меняется на время сообщения, затем возвращается к значению, которое последним задавали через HA (volume_set или предыдущее сообщение). Если громкость через HA ещё ни разу не задавалась, прежнее значение неизвестно, и после сообщения остаётся новая. Момент конца речи мост не знает, поэтому возврат происходит по таймеру, пропорциональному длине текста.

4. Карточка радио

Подходит custom:mini-media-player с entity: media_player.alisa и кнопками type: music, где id — ссылка на поток (http или https, с ICY или без). media_player.media_play только снимает с паузы: если ничего не запущено, звука не будет.

Как устроена интеграция

Файл Что делает
manifest.json описание, config_flow: true
config_flow.py мастер: адрес моста, имя, поиск колонки через /_status
coordinator.py опрос /_status раз в 10 секунд
binary_sensor.py, button.py, select.py датчики, кнопка перезапуска, выбор движков речи
media_player.py сущность: play_media → /_play, пауза, стоп, громкость → /_cmd
__init__.py подключает платформу media_player
translations/ тексты мастера на русском и английском

TTS и файлы из медиабраузера HA превращаются в ссылку (media_source → URL), которую мост отдаёт колонке.

Дальше: 9. Изоляция от интернета.