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

13 февраля 2019, 22:00

После того, как большин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

Вот так выглядит готовое решение. Так как мы дополнительно прописали turn_off action, то наш выключатель не будет залипать, а отработает как toggle switch. Если у вас все получилось, то жду лайк и подписку.


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? 
Мы в Telegram - @Soprut
Мы в Instagram - @Sprut666666

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Григорий Абрамов (grishmanCH)
    Григорий Абрамов (grishmanCH) 8 месяцев назад

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

  2. (Brain)
    (Brain) 8 месяцев назад

    А как у вас датчик протечки распознает ваше желание очищения в плане санитарно-гигиеническом от потопа ?

    • Григорий Абрамов (grishmanCH)
      Григорий Абрамов (grishmanCH) 8 месяцев назад

      Датчик протечки конечно же в этом случае уже не используеться для своего основного применения. Тут либо одно либо другое. 

  3. (alex3g)
    (alex3g) 7 месяцев назад

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

  4. (alfovit)
    (alfovit) отредактировано 5 месяцев назад

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

    • (Chapayyy)
      (Chapayyy) 5 месяцев назад
      как написано здесь 
      https://developers.home-assist...
      что кроме переименования папки в папке custom_components в название кастомного компонента (в данном случае с media_player в xiaomi_miio_gateway) и переименования файла (в данном случае с xiaomi_miio_gateway.py в media_player.py) необходимо "Всегда убедитесь, что вы создали хотя бы пустой __init__.pyфайл в этой папке"
      • (alfovit)
        (alfovit) отредактировано 5 месяцев назад

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

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

    • Григорий Абрамов (grishmanCH)
      Григорий Абрамов (grishmanCH) 5 месяцев назад

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

      • (man1ac)
        (man1ac) 5 месяцев назад

        Что т не работает( ошибка  Integration xiaomi_miio_gateway not found when trying to verify its media_player platform. Версия  0.94.3

  5. (alfovit)
    (alfovit) 5 месяцев назад

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

  6. (sayplz)
    (sayplz) 3 месяца назад

    https://github.com/VedgeKonn/xiaomi_miio_gateway


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

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

    взял файл из тикета выше, версия  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, результат один

  8. (koznov)
    (koznov) месяц назад

    Версия 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.

    • (koznov)
      (koznov) месяц назад

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

      • (awe007)
        (awe007) 27 дней назад

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

К списку блогов

Скидки для сообщества

MI-DOM

+7 977 282-80-53
Промокод:
SPRUTAI
Размер скидки:
5%

Интернет-магазин yourhomekit.ru

+7 914 550-51-11
Промокод:
SPRUT-BLG
Размер скидки:
8%
Cамый большой ассортимент в России аксессуаров Apple HomeKit

Похожие записи

20 января 2019, 17:39
Создание очень бюджетной автоматизации рулонных штор
25 марта 2019, 05:02
Нативный Homekit на ESP8266 Relay_8CH
19 апреля 2019, 20:53
Требуется ваше мнение!
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
04 апреля 2019, 12:45
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
21 марта 2019, 11:59
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
07 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.87 от 06.02.19.
19 января 2019, 20:49
Делюсь новостями по проекту.