Перейти к содержанию

Ярлык с токеном на несколько сценариев (Android): различия между версиями

Материал из Wiki yaboard
м Ark rusinov-9121383 переименовал страницу "Получение токена и запуск сценария в одно нажатие (Android)" в "[[Несколько сценар…
Нет описания правки
Строка 1: Строка 1:
{{metadesc| Получение CSRF-токена по сookie из браузера и дальнейший запуск одного или нескольких сценариев с этим токеном по ярлыку с рабочего стола }}
{{metadesc| Получение CSRF-токена по сookie из браузера и дальнейший запуск одного или нескольких сценариев с этим токеном по ярлыку с рабочего стола }}
__NOEDITSECTION__
__TOC__


{{Hands}}
{{Unofficial}}
{{Unofficial}}


== Введение ==
 
Возникла у меня необходимость запускать несколько сценариев "по одной кнопке", например, чтобы при возвращении домой можно в одно нажатие включить свет в квартире и музыку/телевизор/кофеварку/etc.
== Проблема ==
Это было бы можно объединить всё в один сценарий, но не хотелось каждый раз проделывать путь "найти приложение Яндекс->зайти в устройства->Управление->Сценарии->запуск сценария 1->запуск сценария 2->запуск сценария 3".
 
Решения было найдено следующее, на телефон устанавливается приложение HTTP Shortcuts ([https://play.google.com/store/apps/details?id=ch.rmy.android.http_shortcuts Google Play], [https://http-shortcuts.rmy.ch/ офф.сайт]), настраивается отдельными сценариями получение токена и запуск сценариев, на рабочий стол выносится ярлык для запуска.
 
Иногда возникает необходимость запуска нескольких сценариев "по одной кнопке", чтобы не множить их сходные копии и не создавать сложные схемы их взаимодействия. с другой стороны, не хочется каждый раз кликать "Найти приложение Яндекс->Зайти в устройства->Управление->Сценарии->Запуск сценария 1->Запуск сценария 2->Запуск сценария 3..." или запускать все эти сценарии голосом.
 
 
== Решение ==
 
 
* На смартфон устанавливается приложение "HTTP Shortcuts" ([https://play.google.com/store/apps/details?id=ch.rmy.android.http_shortcuts Google Play], [https://http-shortcuts.rmy.ch/ оф. сайт]);
* Настраивается получение токена;
* Настраивается запуск сценариев;
* На рабочий стол выносится ярлык для запуска всей цепочки.
 
Текущая реализация использует cookie из браузера, срок действия которых до конца не проверен.
По мере получения новой информации статья будет обновляться.




== Реализация ==
== Получаем токен ==
Данная реализация, на текущий момент, основана на использовании файлов cookie из браузера, срок действия которых до конца не проверен, по мере получения новой информации статья будет обновляться.




=== Получение токена ===
* Открываем в браузере DevTools (CTRL+Shift+I или F12).
* Открываем в браузере DevTools (CTRL+Shift+I), раздел Network.
* Переключаемся на вкладку Network.
* Переходим на https://yandex.ru/quasar?storage=1 (Вы должны быть авторизованы под своей УЗ Яндекс)
* Открываем https://yandex.ru/quasar?storage=1 (конечно, с авторизацией под аккаунтом Яндекса, которому привязан умный дом).
* Видим запрос с названием "quasar?storage=1", кликаем на него ПКМ, выбираем "Copy -> Copy as curl"
* В DevToole видим запрос с названием "quasar?storage=1", кликаем правой кнопкой мыши, выбираем "Copy -> Copy as curl".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script copy curl quasar.png|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script copy curl quasar.png|500px]] }}
* Скопированное содержимое передаем любым удобным способом на телефон (например отправив в Избранное через Телеграм, не забыв экранировать содержимое символами ``` перед и после сообщения)
* Скопированное содержимое передаем любым удобным способом на смартфон: например, через email, или "Избранное" в Телеграм (в этом случае обязательно поставьте символы ``` до и после скопированного текста, чтобы оно отправилось без искажений).
* Копируем содержимое на телефоне в буфер обмена.
* Полученный текст копируем в буфер обмена смартфона.
* Открываем на телефоне [https://play.google.com/store/apps/details?id=ch.rmy.android.http_shortcuts HTTP Shortcuts]
* Открываем (на смартфоне же) программу "[https://play.google.com/store/apps/details?id=ch.rmy.android.http_shortcuts HTTP Shortcuts]".
* Нажимаем 3 точки в правом верхнем углу, выбираем "Переменные"
* Нажимаем 3 точки в правом верхнем углу, выбираем "Переменные".
* Нажимаем + в правом нижнем углу, выбираем "Константа"
* Нажимаем (+) в правом нижнем углу, выбираем "Константа".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add variable.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add variable.jpg|500px]] }}
* В поле Name пишем "token" и нажимаем галочку в правом верхнем углу
* В поле "Name" пишем "token", и нажимаем галочку в правом верхнем углу.
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add variable 2.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add variable 2.jpg|500px]] }}
* Возвращаемся на главный экран нажатием стрелочки в левом верхнем углу
* Возвращаемся на главный экран нажатием стрелочки в левом верхнем углу.
* Нажимаем + в правом нижнем углу, выбираем "Из команды cURL"
* Нажимаем (+) в правом нижнем углу, выбираем "Из команды cURL".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script create request from curl.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script create request from curl.jpg|500px]] }}
* Вставляем содержимое из буфера и нажимаем галочку в правом верхнем углу
* Вставляем содержимое из буфера и нажимаем галочку в правом верхнем углу.
* В открывшемся меню в поле "Название ярлыка" пишем как мы хотим его назвать.
* В открывшемся меню в поле "Название ярлыка" пишем любое удобное нам название.
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request set name.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request set name.jpg|500px]] }}
* Далее открываем раздел "Response Handling"  
* Далее открываем раздел "Response Handling".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script change responce handling.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script change responce handling.jpg|500px]] }}
* И меняем значение поля "On Success" с "Show the response" на "Show nothing (run silently)"
* Меняем значение поля "On Success" с "Show the response" на "Show nothing (run silently)".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script change responce handling 2.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script change responce handling 2.jpg|500px]] }}
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
* Переходим в раздел "писать сценарии"
* Переходим в раздел "Писать сценарии".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request add scenario.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request add scenario.jpg|500px]] }}
* Добавляем следующий код в поле посередине "Запустить при успешном выполнении":
* Добавляем следующий код в поле "Запустить при успешном выполнении":
  a=JSON.parse(response.body)
  a=JSON.parse(response.body)
  token=a.storage.csrfToken2
  token=a.storage.csrfToken2
Строка 47: Строка 61:
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request add scenario 2.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request add scenario 2.jpg|500px]] }}
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
* Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу
* Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу.
 
Готово!
 
 
== Пример запуска сценария с полученным ранее токеном ==




=== Пример запуска сценария с полученным ранее токеном ===
* Возвращаемся к браузеру на компьютере.
* Возвращаемся к браузеру на ПК
* Открываем в браузере https://yandex.ru/quasar/iot
* Открываем в браузере https://yandex.ru/quasar/iot (Вы должны быть авторизованы под своей УЗ Яндекс)
* Переключаем вкладку сверху на "Сценарии"
* Переключаем вкладку сверху на "Сценарии"
* Открываем в браузере DevTools (CTRL+Shift+I), раздел Network.
* Открываем в браузере DevTools (CTRL+Shift+I), раздел Network.
* В блоке "Сценарии" находим который мы хотим запустить и зажимаем "Start" (треугольник справа от сценария).
* В блоке "Сценарии" находим тот, который хотим запустить, и зажимаем "Start" (треугольник справа от сценария).
* Видим 2 запроса с названием "actions", кликаем на второй ПКМ, выбираем "Copy -> Copy as curl"
* Видим 2 запроса с названием "actions", кликаем правой кнопкой мыши на второй (!), выбираем "Copy -> Copy as curl".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script copy scenario curl.png|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script copy scenario curl.png|500px]] }}
* Скопированное содержимое передаем любым удобным способом на телефон (например отправив в Избранное через Телеграм, не забыв экранировать содержимое символами ``` перед и после сообщения)
* Скопированное содержимое снова передаем на смартфон и там копируем в буфер обмена.
* Копируем содержимое на телефоне в буфер обмена.
* Снова открываем "[https://play.google.com/store/apps/details?id=ch.rmy.android.http_shortcuts HTTP Shortcuts]".
* Открываем на телефоне [https://play.google.com/store/apps/details?id=ch.rmy.android.http_shortcuts HTTP Shortcuts]
* Нажимаем (+) в правом нижнем углу, выбираем "Из команды cURL".
* Нажимаем + в правом нижнем углу, выбираем "Из команды cURL"
* Вставляем содержимое из буфера, и нажимаем галочку в правом верхнем углу.
* Вставляем содержимое из буфера и нажимаем галочку в правом верхнем углу
* В открывшемся меню в поле "Название ярлыка" пишем удобное нам название.
* В открывшемся меню в поле "Название ярлыка" пишем как мы хотим его назвать.
* Переходим в раздел "Заголовки запроса".
* Переходим в раздел "Заголовки запроса"
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change headers.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change headers.jpg|500px]] }}
* Открываем заголовок "x-csrf-token"
* Открываем заголовок "x-csrf-token".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token 2.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token 2.jpg|500px]] }}
* Удаляем значение и нажимаем на фигурные скобки справа
* Удаляем значение и нажимаем на фигурные скобки справа.
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token set value.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token set value.jpg|500px]] }}
* В открывшемся меню выбираем созданную ранее переменную "token"
* В открывшемся меню выбираем созданную ранее переменную "token".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token set variable.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token set variable.jpg|500px]] }}
* Нажимаем  "OK"
* Нажимаем  "Ok".
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token set variable 2.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request change token set variable 2.jpg|500px]] }}
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
* Далее открываем раздел "Response Handling" и меняем значение поля "On Success" с "Show the response" на "Show nothing (run silently)"
* Далее открываем раздел "Response Handling", и меняем значение поля "On Success" с "Show the response" на "Show nothing (run silently)".
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
* Переходим в раздел "писать сценарии" и добавляем следующий код в поле в верхнее поле "Запустить до выполнения":
* Переходим в раздел "Писать сценарии", и добавляем в верхнее поле "Запустить до выполнения" команду задержки на 2 секунды:
  wait(2000)
  wait(2000)
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
* Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
* Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу
* Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу.
 
 
== Создание ярлыка для мультискрипта ==




=== Создание ярлыка для мультискрипта ===
* Нажимаем + в правом нижнем углу, выбираем "Multi-Shortcut"
* Нажимаем + в правом нижнем углу, выбираем "Multi-Shortcut"
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request add multi shortcut.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add request add multi shortcut.jpg|500px]] }}
Строка 94: Строка 113:
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add shortcus to desktop.jpg|500px]] }}
{{#spoiler:show=Показать скриншот | hide=Скрыть скриншот | [[Файл:Get token and run script add shortcus to desktop.jpg|500px]] }}
* Запускаем ярлык с рабочего стола и наслаждаемся
* Запускаем ярлык с рабочего стола и наслаждаемся


[[Category:Умный дом]]
[[Category:Умный дом]]
[[Category:Неофициальная информация]]
[[Category:Неофициальная информация]]

Версия от 18:01, 26 февраля 2021

Неофициальная информация Методы и программы могут перестать функционировать в любой момент
...а также повредить оборудование и/или нарушить работу систем.
Любые действия и программы вы применяете на свой собственный страх и риск.

Проблема

Иногда возникает необходимость запуска нескольких сценариев "по одной кнопке", чтобы не множить их сходные копии и не создавать сложные схемы их взаимодействия. с другой стороны, не хочется каждый раз кликать "Найти приложение Яндекс->Зайти в устройства->Управление->Сценарии->Запуск сценария 1->Запуск сценария 2->Запуск сценария 3..." или запускать все эти сценарии голосом.

Решение

  • На смартфон устанавливается приложение "HTTP Shortcuts" (Google Play, оф. сайт);
  • Настраивается получение токена;
  • Настраивается запуск сценариев;
  • На рабочий стол выносится ярлык для запуска всей цепочки.
Текущая реализация использует cookie из браузера, срок действия которых до конца не проверен. 
По мере получения новой информации статья будет обновляться.

Получаем токен

  • Открываем в браузере DevTools (CTRL+Shift+I или F12).
  • Переключаемся на вкладку Network.
  • Открываем https://yandex.ru/quasar?storage=1 (конечно, с авторизацией под аккаунтом Яндекса, которому привязан умный дом).
  • В DevToole видим запрос с названием "quasar?storage=1", кликаем правой кнопкой мыши, выбираем "Copy -> Copy as curl".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Скопированное содержимое передаем любым удобным способом на смартфон: например, через email, или "Избранное" в Телеграм (в этом случае обязательно поставьте символы ``` до и после скопированного текста, чтобы оно отправилось без искажений).
  • Полученный текст копируем в буфер обмена смартфона.
  • Открываем (на смартфоне же) программу "HTTP Shortcuts".
  • Нажимаем 3 точки в правом верхнем углу, выбираем "Переменные".
  • Нажимаем (+) в правом нижнем углу, выбираем "Константа".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • В поле "Name" пишем "token", и нажимаем галочку в правом верхнем углу.
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Возвращаемся на главный экран нажатием стрелочки в левом верхнем углу.
  • Нажимаем (+) в правом нижнем углу, выбираем "Из команды cURL".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Вставляем содержимое из буфера и нажимаем галочку в правом верхнем углу.
  • В открывшемся меню в поле "Название ярлыка" пишем любое удобное нам название.
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Далее открываем раздел "Response Handling".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Меняем значение поля "On Success" с "Show the response" на "Show nothing (run silently)".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
  • Переходим в раздел "Писать сценарии".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Добавляем следующий код в поле "Запустить при успешном выполнении":
a=JSON.parse(response.body)
token=a.storage.csrfToken2
setVariable('token',token)
showToast(token)
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
  • Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу.

Готово!

Пример запуска сценария с полученным ранее токеном

  • Возвращаемся к браузеру на компьютере.
  • Открываем в браузере https://yandex.ru/quasar/iot
  • Переключаем вкладку сверху на "Сценарии"
  • Открываем в браузере DevTools (CTRL+Shift+I), раздел Network.
  • В блоке "Сценарии" находим тот, который хотим запустить, и зажимаем "Start" (треугольник справа от сценария).
  • Видим 2 запроса с названием "actions", кликаем правой кнопкой мыши на второй (!), выбираем "Copy -> Copy as curl".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Скопированное содержимое снова передаем на смартфон и там копируем в буфер обмена.
  • Снова открываем "HTTP Shortcuts".
  • Нажимаем (+) в правом нижнем углу, выбираем "Из команды cURL".
  • Вставляем содержимое из буфера, и нажимаем галочку в правом верхнем углу.
  • В открывшемся меню в поле "Название ярлыка" пишем удобное нам название.
  • Переходим в раздел "Заголовки запроса".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Открываем заголовок "x-csrf-token".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Удаляем значение и нажимаем на фигурные скобки справа.
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • В открывшемся меню выбираем созданную ранее переменную "token".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Нажимаем "Ok".
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
  • Далее открываем раздел "Response Handling", и меняем значение поля "On Success" с "Show the response" на "Show nothing (run silently)".
  • Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
  • Переходим в раздел "Писать сценарии", и добавляем в верхнее поле "Запустить до выполнения" команду задержки на 2 секунды:
wait(2000)
  • Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу.
  • Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу.

Создание ярлыка для мультискрипта

  • Нажимаем + в правом нижнем углу, выбираем "Multi-Shortcut"
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • В открывшемся меню в поле "Название ярлыка" пишем как мы хотим его назвать.
  • Далее открываем раздел "Trigger Shortcuts" и добавляем созданные ранее скрипты
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Возвращаемся на предыдущий экран нажатием стрелочки в левом верхнем углу
  • Сохраняем запрос и возвращаемся на предыдущий экран нажатием галочки в правом верхнем углу
  • Нажимаем и удерживаем на наш скрипт пока не всплывет меню, в меню выбираем "Разместить на главном экране"
<button type="button" class="spoilers-button" aria-expanded="false">Показать скриншот</button>
  • Запускаем ярлык с рабочего стола и наслаждаемся