Привет, это снова Егор. Сегодня я подведу итоги моей попытки интегрировать ресивер с умным домом Яндекса.

В этой статье я расскажу о тех сложностях, которые пришлось преодолеть для того, чтобы мой проект - StingrayTV Alice - смог связать Алису и мой GS B523L, а также подведу итоги моего пет-проекта.

Поехали!

Главная проблема: нужен домен, SSL, и внешний IP

Дело в том, что "Дому с Алисой" требуется внешний доступ к серверу - внешний IP, SSL-сертификат (причём самоподписанный не пойдёт!), а также доменное имя. Это связано с архитектурой данного сервиса - Яндекс как бы "звонит" к вашему серверу сама.

Как решить эту проблему?

Дело в том, что мой местный провайдер (Связист) просит за белый IP более 400 рублей в месяц. Поэтому я решил эту проблему просто и элегантно.

Дело в том, что у меня дома есть роутер Keenetic Start. Поэтому я решил воспользоваться сервисом CrazeDNS, который позволяет "прокидывать" внутренний сервис за пределами LAN, даже с серым IP, а также (самое главное!) предоставляет доменное имя, и SSL-сертификат от Let's Encrypt.

И да - Keycloak без проблем работает через CrazeDNS.

Как получить номер канала для Алисы?

Тут тоже есть заморочки - нам надо воспользоваться Spring WebClient (не RestClient!), чтобы получать данные о текущем канале через SSE-запросы.

Кроме этого, Алиса не умеет работать с названиями каналов - только с их номерами. Но это сильно облегчает задачу - не нужно передавать Яндексу список всех 200+ каналов Триколора, вместе с их номерами :)

Защита API

Изначально я хотел накостылить свой механизм аутентификации на основе специального кода, выводимого на консоль сервера, но потом решил применить адекватный механизм аутентификации пользователя и клиента - а именно Keycloak.

Это также сильно облегчило мне жизнь :)

Что умеет StingrayTV Alice?

  • Переключение канала и громкости - как через +/-, так и по конкретному значению

  • Получение информации о номере канала, уровне громкости, состоянии ресивера (находится ли оно в StandBy, или нет)

  • Mute и пауза эфира - но оно работает по аналогии с ПДУ, без получения текущего состояния

  • Переход в StandBy, и обратно

Фактически, я реализовал практически полный набор рекомендуемого Яндексом функционала.

Итоги

Я не пожалел, что накодил это. Это был интересный челлендж по тому, как подрубить к Алисе не только "умную" лампочку, но и более продвинутые устройства.

Напомню, что StingrayTV - это вполне себе полноценная ОС, на базе Линукса. И этим я и горжусь, что моё любимое ядро есть везде дома - на мобильных устройствах, на роутерах, и на ресивере.