Управление умным домом Яндекс через Stream Deck
Очень давно болит голова на эту тему. Особенно после покупки Stream Deck
Я использую эту магическую вещь и в работе, и в стриминге: управление микрофоном, звуком, музыкой, прямой трансляцией, записью экрана и многим другим.
И у Elgato есть плагины, позволяющие управлять источниками света от Elgato или производителей, которые популярны где-то там, далеко от нас.
Так сложилось, что у нас дома все устройства завязаны на умный дом Яндекса: лампочки, кондиционер, пылесос, вентилятор.
К сожалению, я не нашел штатных/проприетарных плагинов или способов управлять своими устройствами через Stream Deck.
Но буквально на днях меня осенило. У меня уже есть опыт ковыряния в API различных платформ (Telegram, VK, Discord), так почему же мне не написать что-то свое, ведь у Яндекса точно должен быть API к умному дому.
Так и получилось. API есть.
Какая схема зародилась в моей голове?
- Пишем python-скрипты по управлению устройствами (post-запросы)
- Завязываем эти скрипты на кнопочки Stream Deck
- Радуемся
Вкратце расскажу, что нужно сделать, чтобы "и быстро, и хорошо".
Просто так взять и начать слать запросы, включая/выключая лампочки не выйдет. Наши скрипты - условное приложение, которое будет взаимодействовать с платформой умного дома Яндекса. Поэтому нам нужен API для приложений
1. Создаем/регистрируем приложение на сервере авторизации Яндекс OAuth
Здесь есть неочевидные моменты, на которых я потерял время. Поэтому сразу раскрываю карты.
В качестве платформы приложения выбираем Веб-сервисы, а в строке Redirect URI выбираем пункт "Подставить URL для отладки"
В доступах к данным сами прописываем два доступа: iot:view, iot:control (я завис в этом месте, потому что выпадающий список по умолчанию не предлагает таких вариантов)
2. Получаем токен для нашего приложения
После того, как приложение будет создано, нужно перейти по адресу:
https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>
https://oauth.yandex.ru/authorize?response_type=token&client_id=<идентификатор приложения>
В качестве идентификатора приложения подставляем ClientID нашего приложения:
После перехода по этой ссылке, мы попадаем на страницу с токеном - копируем его и сохраняем в укромном месте!
На странице своего приложения мы можем увидеть длительность этого токена - у меня написано "Не менее 1 года".
Как я понимаю, через год нужно будет повторить манипуляции, описанные в пункте 2, чтобы получить новый токен.
Как я понимаю, через год нужно будет повторить манипуляции, описанные в пункте 2, чтобы получить новый токен.
[НИЖЕ ИНФОРМАЦИЯ ДЛЯ ОЗНАКОМЛЕНИЯ - ДЛЯ УПРАВЛЕНИЯ СЦЕНАРИЯМИ РЕКОМЕНДУЕТСЯ ИСПОЛЬЗОВАТЬ МОЙ ГОТОВЫЙ ПЛАГИН]
3. Пишем python-скрипты
Я решил пойти по самому простому пути, ибо "зачем всё усложнять?"
Я создал в приложении умного дома нужные мне сценарии:
- Включить/выключить свет
- Включить кондиционер на обогрев
- Включить кондиционер на охлаждение
- Выключить кондиционер
- Выключить робот-пылесос
Сценарий - это уже готовые инструкции, что нужно сделать с устройством и как именно. Поэтому всё, что мне нужно - "дёрнуть" нужный сценарий из python-скрипта
Для выполнения веб-запросов я использую python. Его нужно установить, если у вас его нет.
Помимо самого python нужна еще библиотека request. По умолчанию она не установлена, поэтому ее нужно скачать. К примеру, такой командой (знак $ копировать не нужно):
$ python -m pip install requests
Сперва получим всю информацию об умном доме с помощью такого скрипта:
py
get_home_info.py254 Byte
В качестве ответа мы получаем JSON-файл со всей нужной информацией. Открываем его и находим блок scenarios. Во вложенном списке будут все наши созданные сценарии, останется лишь сохранить id нужного нам сценария:
Теперь пишем вот такой скрипт с post-запросом, в котором мы указываем идентификатор нужного сценария:
py
run_scenario.py326 Byte
Готово. Теперь наши python-скрипты умеют запускать сценарии умного дома.
Но не будем же мы запускать их через консоль? Мы же не пещерные люди. Мы пещерные люди с умной пещерой.
4. Настройка Stream Deck
Самое простое и приятное - привязка клавиш Deck'и к нужным скриптам. Вот такой список скриптов в итоге (на каждый сценарий, да):
И простейшая настройка Deck'и:
In bundle
умный дом
умный дом яндекс
яндекс
stream deck
python
api умного дома яндекс
UP2: Удалось запуститься, это что-то невероятное, спасибо большое за инструкцию, дека с каждым днем играет все более яркими красками)