Сделал приложение для управление "умным" домом через Яндекс Станцию
Как-то давным давно я читал интересную статью про построение умного дома - с использованием Ipad. Мне так понравилась эта идея что я тоже задумался над чем-то похожим, к тому же давным давно валялся старый планшет на Андроиде, который в принципе не плохо подошел бы на замену Айпаду, но естественно в гораздо меньших масштабах.
В прошлом году я купил себе Яндекс Станцию, и почти сразу же решил немного добавить умности своему дому. По сути мой умный дом - это умная лампа, умная розетка (которая чаще даже не подключена к сети), и робот-пылесос - который запускается по фразе "Алиса включи пылесос", но управлять его мощностью Алиса не может, и потому приходится пользоваться еще и пультом. Ах да, так как станция макс, то она еще и умеет включать-выключать телевизор через режим HDMI CEC, настраиваемый в телевизоре, ну и соответственно показывать каналы или фильмы по подписке.
Позднее я снова вернулся к версии управления устройствами при помощи стационарного планшета, поскольку хотелось при выходе из дома тупо жмакнуть кнопку выключить все, чтобы не орать в зал Алисе эти команды. И вот только недавно я созрел чтобы это реализовать, и оказалось совсем не сложно.
Перво-наперво пошел в Гугл Яндекс и начал искать "API Яндекс станции", и он привел меня на страницу Протокол программного управления устройствами. Там все довольно просто, но для первого раза все же нужно было поразбираться. Из ссылки в статье переходим в панель создания приложения и там забиваем необходимые данные:
Сохраняем приложение и далее в его настройках получаем идентификатор приложения. Для получения токена, делаем все по инструкции: https://yandex.ru/dev/id/doc/ru/tokens/debug-token. Правда это только отладочный токен, но для экспериментов сойдет. далее возвращаемся на странуцу API и видим внизу пример CURL запроса для получения информации об умном доме пользователя:
curl -i -X GET 'https://api.iot.yandex.net/v1.0/user/info' \ -H 'Authorization: Bearer YOUR_OAUTH_TOKEN'
Проблема этого запроса в том что он рассчитан для curl под Linux - формат запросов под винду отличается, этот же запрос в винде будет таким (естественно нужно вставить свой токен внутри кавичек в заголовке авторизации):
curl -H "Authorization: Bearer y0_123qw...s" -ik https://api.iot.yandex.net/v1.0/user/info -X GET -o output.txt
Вконце я еще добавил вывод в файл, чтобы скопировать ответ из него и можно было проанализировать. Поскольку данные в тексте будут не отформатированы, то очень придется кстати сервис https://jsonformatter.org/
Но и это еще не все, т.к. хочется не просто заполучить некие данные а поуправлять например той же лампой то идем на странуцу Управление умениями устройств копируем оттуда код запроса, подставляем ID лампы, токен авторизации и делаем новый запрос. проблема в том что более сложный запрос curl преобразовать в виндовый формат сложнее, но и это не проблема, можно воспользоваться сервисом https://curlconverter.com/ и хотя там еще нет такого преобразования, но зато есть преобразование в Power Shell и уже из-под него отправлять запросы. Я проверил, это работает отлично.
Теперь начинается чуть больше танцев с бубном, поскольку надо как-то писать приложение - и это действительно для новичка сущий ад. Тем не менее у меня получилось. В первую очередь скачал андроид студию, а потом там создал новый проект по такой инструкции: Создание простейшего приложения. Обязательно нужно скомпилить все и попробовать запустить, чтобы понять что описанное все действительно работает. После того как убеждаемся, что кнопка обрабатывает нажатия, и выводится тот текст который нам нужен, мы можем добавить функционал по отправке HTPP запросов на сервер Яндекса - то есть делать ровно то что делали при помощи скриптов, но уже в Java. Эта задача тоже оказалась не самой тривиальной - я к тому что внятных инструкций нет, я нашел одну, но для новичка было не совсем ясно как это работает, но тем не менее, все получилось: https://coderlessons.com/articles/mobilnaia-razrabotka-articles/http-klient-android-get-post-zagruzka-vygruzka-mnogochastnyi-zapros
В общем немного переработав тот код, удалось делать запросы из эмулятора и получать ожидаемую реакцию - и уже на этом можно умыть руки - программа минимум выполнена) И да - "выключить все" это запуск сценария, который добавляется через приложение яндекса. Чтобы получить список и ID сценариев нужно покурить мануал, там просто))
Полный код, есть на моем гитхабе: GetHTTP-Android
Взято отсюда


ИТ-проекты пикабушников
592 поста3.4K подписчиков
Правила сообщества
0. Запрещены посты вне тематики сообщества
1. Уважайте труд людей, пишите только конструктивную критику,
2. Не выкладывайте информацию по своему проекту чаще 2ух раз в месяц