История Одного Геймера

История Одного Геймера 

Игровой канал🎮

60subscribers

98posts

Showcase

3
goals1
4 of 50 paid subscribers
На данное событие сделаем розыгрыш среди платных подписчиков Boosty

Управление умным домом Яндекс через 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=<идентификатор приложения>
В качестве идентификатора приложения подставляем ClientID нашего приложения:
После перехода по этой ссылке, мы попадаем на страницу с токеном - копируем его и сохраняем в укромном месте! 
На странице своего приложения мы можем увидеть длительность этого токена - у меня написано "Не менее 1 года".
Как я понимаю, через год нужно будет повторить манипуляции, описанные в пункте 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'и:
Comment removed
LETSI40K, мой скрипт менял как-то?) свой токен подставил?
LETSI40K, выглядит так, будто бы с токеном что-то не так. Чуть позже еще гляну у себя и подумаю, что могло привести к такому ответу
Да, друже, скрипт на получение "информации об умном доме" не работает как нужно, ответа в JSON нет. Есть варианты решения? UP: Извиняюсь, я - чайник в программировании))) Запускать скрипт через cmd и ждать ответа, идея плохая)) Это для тех, кто мб с такой же проблемой столкнулся. Но, кроме как на IDLE скрипт больше нигде ответа не дает, жалуясь на отсутствие модуля "requests" в первой строке.
UP2: Удалось запуститься, это что-то невероятное, спасибо большое за инструкцию, дека с каждым днем играет все более яркими красками)
alex6rt, очень рад, что все получилось и помогла статья!)))
alex6rt, дружище, уже много времени прошло, конечно, но вдруг ты не видел - я сделал полноценный плагин для stream deck - https://github.com/onegamerstory/Stream-Deck-Yandex.Home-Plugin посмотри, если интересно и актуально. Также, есть приложение на ПК - https://github.com/onegamerstory/Desktop-Yandex.Home-App
Subscription levels3

Шиноби

$0.15 per month
Подписка Шиноби!

Ронин

$0.73 per month
Ронины — самураи, потерявшие своего господина

Сёгун

$1.45 per month
Сёгун — высшая должность, выходец из высших самурайских слоёв
Go up