Привет, это снова Егор. Сегодня я подведу итоги моей попытки интегрировать ресивер с умным домом Яндекса.
В этой статье я расскажу о тех сложностях, которые пришлось преодолеть для того, чтобы мой проект - 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 - это вполне себе полноценная ОС, на базе Линукса. И этим я и горжусь, что моё любимое ядро есть везде дома - на мобильных устройствах, на роутерах, и на ресивере.
