Блог

Подключение и автоматизация радио на Xiaomi Gateway с помощью Home Assistant

После того, как большинcтво утройств в умном доме переехали на стики Z-wave (Aeotec) и RaspBee (deConz), гейтевей Xiaomi остался не у дел и стал выполнять исключительно функцию ночника, до тех пор, пока не вспомнилось другое его предназначение - возможность проигрывать радио. Соответственно сразу же захотелось добавить и эту функцию в Home Assistant, с целью использовать радио в автоматизациях. Оказалось это не так и сложно, стоит лишь проделать следующие действия:

1. Добавьте радиостанции в Favorites хаба используя данные с сайта ximiraga.ru Для владельцев iPhone достаточно  изменить настройки WiFi и использовать ручной ввод DNS. После добавления станций DNS сервер можно удалить и вернуть настройки сети как было. Радиостанции добавленные в Favorites всё равно будут работать.

2. Получите Токен самого гейтевея, это тоже осуществимо и описано не раз и даже не два в интеренете. Даже есть инструкция на этом портале - вот здесь.

3. Устанавливаем кастомный компонент для Home Assistant отсюда. Для этого создаем папку custom_components и помещаем туда наш компонент. Внимание! Папка должна находиться в том же каталоге где находиться файл configurations.yaml. Так как у меня настроен SMB доступ к малине, то это простой Drag&Drop. Если у вас HASS.io или система в докере, то ищете инструкцию по установки кастом компонентов для вашего конкретного случая.

4. Прописываем новую платформу в файл configurations.yaml согласно инструкции на гитхабе, а именно:

media_player: - platform: xiaomi_miio_gateway host: <ip of gateway> token: <gateway token>

Будьте бдительны, так как другая платформа xiaomi_aqara использует ключ (key) вместо токена. Нам же нужно добавить именно token, чтобы все заработало.

5. Перезапускаем HA и можем добавлять карточку media_player для управления радио. Компонент поддерживает включение/выключение, регулировку громкости и переключение на следующую станцию.

6. Опционально добавляем кнопку включения радио в HomeKit, для этого в файле configurations.yaml прописываем следующие строки:

homekit: filter: include_domains: - media_player entity_config: media_player.xiaomi_miio_gateway: feature_list: - feature: on_off

Появилась полноценная возможность использовать радио из хаба в автоматизациях. Например, установить хаб в ванной, а датчик протечки в душевую кабину. Так при приеме душа мы сможем автоматически слушать музыку или новости. Вопросы и интересные идеи автоматизаций с радио, оставляйте в комментариях.

Если эта запись наберет 25 лайков, то обязательно расскажу, как подключить Homepod к Home Assistant и использовать его для TTS сообщений, а также прослушивания интернет радиостанций.

Hey, Siri! Turn on Eckho Moskvi!

Bonus - Лайфхаки:

1. Если вы используете датчик протечки в душе для автоматизации, то могли заметить, что если просто положить его на пол в душевой, то состояние "протечка" активно намного дольше чем вы там находитесь, так как как вода остаётся "запертой" под датчиком. Решить эту проблему можно путем небольшого приподнятия датчика над поверхностью, для этого используйте что-то вроде Blue tack.

2. Нет датчика протечки? Принимаете душ в ванной? Можно использовать датчик температуры и влажности, например Aqara. При приеме душа влажность резко вырастет и поэтому можно будет сделать numeric_state trigger для автоматизации.

Решение для Home Assistant версии 0.88 и выше

В последних версиях  ХА изменили зависимости для custom_components и  к сожалению xiaomi_gateway_radio компонент перестал работать. К счастью есть возможность с легкостью его починить, для этого открываем файл xiaomi_miio_gateway.py в любом редакторе кода, таком как например Visual Code или Notepad++ и правим кусок со строки номер 10. Конечный кусок должен выглядеть вот так:

import homeassistant.helpers.config_validation as cv from homeassistant.components.media_player import ( MediaPlayerDevice, MEDIA_PLAYER_SCHEMA, PLATFORM_SCHEMA) from homeassistant.components.media_player.const import ( SUPPORT_TURN_ON, SUPPORT_TURN_OFF, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_STEP, SUPPORT_VOLUME_SET, SUPPORT_NEXT_TRACK) from homeassistant.const import (CONF_HOST, CONF_NAME, CONF_TOKEN, STATE_OFF, STATE_ON)

Тaкже нужно переименовать файл и папки согласно новой политике HA по работе с кастомным компонентами. Подробнее можно почитать здесь, а для того что все работало нужно в внутри папки custom_components:

  1. Переименовать папку media_player в xiaomi_miio_gateway
  2. Переименовать файл xiaomi_miio_gateway.py в media_player.py

Теперь перезапускаем ХА и все должно заработать.

Добавляем управление громкостью и переключение станций в Homekit

Для того чтобы добавить громкость и переключение станций на гейтевее в программу Дом от Apple нужно будет немного потрудиться. Для начала создаем input_boolean в файле configuration.yaml

#Xiaomi Radio Controls xiaomi_volume_up: name: Xiaomi Radio Volume Up initial: off xiaomi_volume_down: name: Xiaomi Radio Volume Down initial: off xiaomi_next_radio: name: Xiaomi Radio Next Station initial: off

Также не забываем добавить все эти выключатели в Homekit в том же файле:

homekit: filter: include_entities: - input_boolean.xiaomi_volume_up - input_boolean.xiaomi_volume_down - input_boolean.xiaomi_next_radio

Чтобы все правильно работало, нам нужно создать автоматизации для управления Xiaomi Gateway с помощью наших выключателей. Для этого в файле automations.yaml прописываем следующее:

#Xiaomi Radio Controls (Next Station) - alias: Xiaomi Radio Next Station initial_state: 'on' trigger: - platform: state entity_id: input_boolean.xiaomi_next_radio to: 'on' condition: [] action: - service: media_player.media_next_track data: entity_id: media_player.xiaomi_gateway_radio - service: input_boolean.turn_off data: entity_id: input_boolean.xiaomi_next_radio #Xiaomi Radio Controls (Volume Up) - alias: Xiaomi Radio Volume Up initial_state: 'on' trigger: - platform: state entity_id: input_boolean.xiaomi_volume_up to: 'on' condition: [] action: - service: media_player.volume_up data: entity_id: media_player.xiaomi_gateway_radio - service: input_boolean.turn_off data: entity_id: input_boolean.xiaomi_volume_up #Xiaomi Radio Controls (Volume Down) - alias: Xiaomi Radio Volume Down initial_state: 'on' trigger: - platform: state entity_id: input_boolean.xiaomi_volume_down to: 'on' condition: [] action: - service: media_player.volume_down data: entity_id: media_player.xiaomi_gateway_radio - service: input_boolean.turn_off data: entity_id: input_boolean.xiaomi_volume_down


В версии Home Assistant 0.88 изменили алгоритм работы с custom_components. Из-за этого в данный момент компонент xiaomi_miio_gateway radio не работает. Разработчик пообещал исправить ситуацию. Ждем обновления...

хорошее замечание, тоже заметил

Странная фигня у меня получается)) Два шлюза настроил, но теперь они иногда меняются местами. т.е включаю первый, а играет второй и наоборот))

Почему у меня ошибка в конфигурации: Integration xiaomi_miio_gateway not found when trying to verify its media_player platform.

как написано здесь 
https://developers.home-assistant.io/blog/2019/02/19/the-great-migration.html">https://developers.home-assist...
что кроме переименования папки в папке custom_components в название кастомного компонента (в данном случае с media_player в xiaomi_miio_gateway) и переименования файла (в данном случае с xiaomi_miio_gateway.py в media_player.py) необходимо "Всегда убедитесь, что вы создали хотя бы пустой __init__.pyфайл в этой папке"

Спасибо получилось, теперь как добавить это в НА:

- 5. Перезапускаем HA и можем добавлять карточку media_player для управления радио. Компонент поддерживает включение/выключение, регулировку громкости и переключение на следующую станцию.

Была такая же проблема на 0.92 и 0.93, даже с добавлением файла


__init__.py


После обновления на 0.94 все пофиксилось

Что т не работает( ошибка 

Integration xiaomi_miio_gateway not found when trying to verify its media_player platform. Версия 

0.94.3

Да, теперь всё работает.

https://github.com/VedgeKonn/xiaomi_miio_gateway">https://github.com/VedgeKonn/xiaomi_miio_gateway


Вот нормальный компонент, с правильным распределением каталогов и правильным конфигом для новой версии. Все работает если полностью заменить на этот компонент.

только у меня не работает?


взял файл из тикета выше, версия 

0.97.2


ERROR (MainThread) [homeassistant.components.hassio] Integration xiaomi_gateway_radio not found when trying to verify its media_player platform.


путь \\HASSIO\config\custom_components\xiaomi_gateway_radio\media_player.py
Как было сказано выше - добавлял пустой файл 

__init__.py, результат один

Версия homeassistant 0.100.2

Правильно ли я понимаю, что скрипт нужно поместить в Home Assistant по пути /config/custom_components/xiaomi_gateway_radio/media_player.py и после добавить инициализацию в /config/configuration.yaml :


media_player:
- platform: xiaomi_gateway_radio
host: 10.255.254.150
token: XXXXXXXXXXXXXXXXXXXXXXXXX

Если да, то при попытке проверить конфиг выдает:
Platform error media_player.xiaomi_gateway_radio - Integration 'xiaomi_gateway_radio' not found.

Обновил версию на бета ветку - проблема ушла. 

Я только вчера узнал о существовании Home Assistant, поставил и сразу принялся прикручивать туда радио от Xiaomi Gateway. Столкнулся с той же самой ошибкой. что и вы.
Подскажите пожалуйста, хотя бы в общих чертах, как вы решили проблему? Как можно обновить версию на бета ветку?

Если возникает ошибка "Platform error media_player.xiaomi_gateway_radio - Integration 'xiaomi_gateway_radio' not found." 

Нужно сначала поместить скрипт в 
/config/custom_components/xiaomi_gateway_radio/media_player.py ,

перезагрузить сервер

и только после этого

добавить инициализацию в /config/configuration.yaml

И никто не написал, что имя платформы надо поменять на

media_player:

     - platform: xiaomi_gateway_radio


Вернуться назад
Вернуться назад