Управление 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Умный дом

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

    avatar
    1 Comment threads
    1 Thread replies
    0 Followers
     
    Most reacted comment
    Hottest comment thread
    2 Comment authors
    bondrogeenВладимир Recent comment authors

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

      Subscribe  
    newest oldest most voted
    Notify of
    Владимир
    Гость
    Владимир

    не работает ссылка на set.xhtml и get.xhtml. Исправьте пожалуйста, очень надо!!!