Управление android устройством POST и GET-запросами.

Опубликовано bondrogeen

Я упоминал уже о приложении для управления android устройствами, сегодня постараюсь рассказать написать о нем. Необходимость в таком приложении появилась с «часами», об которых я писал тут. Изначально я пользовался  tasker — это приложение для автоматизации android устройства, но пользуясь им, я столкнулся с рядом неудобств.

  1. Чтобы настроить одно устройство (даже перенеся backup с уже настроенного), уходит много времени.
  2. При увеличении функционала, становится трудно разбираться во всем этом разнообразии  профилей, задач и переменных.
  3. Плагины не всегда поддерживают различными версиями android.
  4. В случаи изменения функционала, необходимо перестроить все устройства в доме.
  5. Все подобного типа приложения, рассчитаны на человека далекого от программирования, но пока разберешься во всех тонкостях и нюансах — уйдет достаточно много времени.

Я перепробовал разные приложения для автоматизации, но все они не давали того базового функционала, который нужен был мне. Во время одного из таких поисков, я наткнулся на приложение PAW Server. Установив и «поигравшись» им, я понял, это то, что мне нужно. PAW Server предоставляет доступ к android устройству через web-интерфейс, позволяет управлять им и получать информацию, по средствам скриптового языка BeanShell. Код встраивается  непосредственно в xhtml страницу, по аналогии с PHP, но с синтаксисом языка JAVA. Таким образом, можно создать xhtml файлы с нужным мне кодом и получить возможность управлять android устройством. На тот момент я мало, что знал о языке JAVA, но по мере изучения и добавления функционала для моих «хотелок», пришлось знакомиться с ним поближе.

Например вот так, можно вывести на страницу информацию об устройстве.

Так можно обработать полученные данные от GET или POST запроса, преобразовать их JSON формат и вывести их на страницу.

Написав несколько файлов ( скачать можно тут set.xhtml (для управления устройством), get.xhtml (для получения информации от устройства) и скопировать их в папку где хранятся файлы веб сервера (память устройство/paw/html), я получил доступ к android устройству из своей локальной сети, и по средствам POST и GET запросов мог получать данные и управлять им.

Так отправив GET запрос  по адресу http://<IP>:8080/get.xhtml можно получить основную информацию от устройства в формате JSON. На картинках ниже, можно увидеть информацию от телефона Samsung I9300 о состоянии батареи, количество памяти, показаний датчиков и многое другое.  Некоторые данные, в частности у объекта «sensors», могут отличаться от данных вашего устройства, так как разные устройства имею разный набор датчиков, в остальном все будут идентично(кроме значений, естественно).

 

Для того чтобы управлять устройством, нужно также отправить запрос по адресу http://<IP>:8080/set.xhtml, но в зависимости от команды, передать соответствующие параметры. Ответ выполнения команды, вернется в формате JSON.

Список доступных команд :

  •  http://<IP>:8080/set.xhtml?send=volume&number=15&mode=STREAM_NOTIFICATIONустановка громкости от 0 до 15 (максимальная громкость устанавливается системой, также проверяется чтобы не выходило за пределы установленных значений) mode= может быть (STREAM_NOTIFICATION, STREAM_MUSIC ,STREAM_ALARM, STREAM_RING, STREAM_SYSTEM, STREAM_VOICE_CALLесли не указан, то по умолчанию стоит STREAM_MUSIC
  • http://<IP>:8080/set.xhtml?send=say&text=привет текст отправляем на синтез речи.
  • http://<IP>:8080/set.xhtml?send=app_start&value=lcf.clock запуск программы Tablet Clock value=lcf.clock
  • http://<IP>:8080/set.xhtml?send=apps получить список установленных приложений «название»:»системное название».
  • http://<IP>:8080/set.xhtml?send=sms&text=привет&number=123456789 отправить смс на номер = number text = текст сообщения
  • http://<IP>:8080/set.xhtml?send=call&number=123456789 (Позвонить) на номер number (для USSD запросов символ # меняем на %23 )
  • http://IP:8080/set.xhtml?send=dial&number=123456789 (Набрать)на номер number (для USSD запросов символ # меняем на %23 )
  • http://<IP>:8080/set.xhtml?send=vibrate&number=1000 включает вибрацию number (время в миллисекундах)
  • http://<IP>:8080/set.xhtml?send=noti&texthead=название уведомления&text=текст уведомления
  • http://<IP>:8080/set.xhtml?send=alert&texthead=название предупреждения&text=текст предупреждения
  • http://<IP>:8080/set.xhtml?send=alertinput&texthead=название предупреждения&text=текст предупреждения ответ вернет в json «return»:»данные»
  • http://<IP>:8080/set.xhtml?send=openurl&text=http://ya.ru откроет страницу в браузере
  • http://<IP>:8080/set.xhtml?send=speech&texthead=Говорите texthead=название (можно не указывать тогда по у молчанию будет равно texthead=Говорите) ответ вернет в json «return»:»текст»
  • http://<IP>:8080/set.xhtml?send=endсall положить трубку
  • http://<IP>:8080/set.xhtml?send=screen_off_time&number=5000 установка времени подсветки экрана в миллисек. -1 — не гасить экран (работает не на всех уст.)
  • http://<IP>:8080/set.xhtml?send=task&text=test&value=1111,,1212 запустить задачу [test] таскер и передать параметры %par1 = 1111 %par2 = 1212 и т.д (,,) разделение
  • http://<IP>:8080/set.xhtml?send=lcd_on активировать экран на устройстве
  • http://<IP>:8080/set.xhtml?send=gong Проигрывает файл ..paw/html/gong.mp3
  • http://<IP>:8080/set.xhtml?send=sound_noti проигрывает стандартный звук уведомления
  • http://<IP>:8080/set.xhtml?send=sound_ring проигрывает стандартный звук звонка
  • http://<IP>:8080/set.xhtml?send=brightness&number=30 уровень яркости подсветки от 1-255
  • http://<IP>:8080/set.xhtml?send=exec&text=input tap 100 100 выполнить команду (нужен root) «input tap 100 100» эмитирует нажатие на экран
  • http://<IP>:8080/set.xhtml?send=clipboard&text=тест отправить text в буфер обмена
  • http://<IP>:8080/set.xhtml?send=rec&number=5000 включить диктофон. number = время записи в миллисекундах. записи сохраняются ../paw/voice/
  • http://<IP>:8080/set.xhtml?send=server&text=restart перезагрузка paw сервера
  • http://<IP>:8080/set.xhtml?send=server&text=kill остановка paw сервера
  • http://<IP>:8080/set.xhtml?send?send=delete_sms_thread&number=36 удалить ветку сообщений с thred_id = 36
  • http://<IP>:8080/set.xhtml?send?send=delete_sms_id&number=171 удалить сообщение с id = 171
  • http://<IP>:8080/set.xhtml?send?send=mark_all_read&number=36 пометить как прочитанные с thred_id = 34
  • http://<IP>:8080/set.xhtml?send?send=scan запускает сканер штрих кода
  • http://<IP>:8080/call.xhtml?send=all&date=01-05-2017 Получить все контакты «all» за число (date) 01-05-2017

Подключив к серверу умного дома, я понял, что управлять и получать информацию (когда поступит команда от сервер) — я могу, а вот получать данные о событиях в реальном времени, например при поступлении звонка, смс или датчиков, уже с помощью PAW Server не получится. Так я пришел к выводу, что нужно делать свое приложение. Перечитывая доки на PAW Server, я наткнулся на его исходники, взяв их за основу, написал cвое приложение — ioBroker.paw. (ioBroker потому, что использую эту платформу в качестве сервера умного дома). ioBroker.paw имеет весь функционал PAW Server, но и новые возможности, которые не могли быть реализованы в предыдущей версии. Конечно, теперь в приложении сделан упор на интеграцию с ioBroker, но оно также работает через GET и POST запросы, что позволяет использовать его в других системах УД.

    Рубрики: AndroidУмный дом

    Отправить ответ

    avatar

    Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

      Subscribe  
    Notify of