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

Я упоминал уже о приложении для управления android устройствами, необходимость в таком приложении появилась с "часами", об которых я писал. Изначально я пользовался tasker - это приложение для автоматизации android устройства, но пользуясь им я столкнулся с рядом неудобств:

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

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

    String\[\] opts = { "BOARD", "BRAND", "DISPLAY", "MODEL", "PRODUCT",
    "TIME", "TYPE", "USER", "VERSION.INCREMENTAL",
        "VERSION.RELEASE", "VERSION.SDK"};

    for(o : opts) {
     print("<b>" + o + ":</b>" + eval("android.os.Build." + o) + "<br>");
    }

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

  import java.io.\*;
  import org.json.\*;
  import de.fun2code.android.pawserver.AndroidInterface;
  pawHome = server.props.get("serviceContext").pawHome;  
  json = new JSONObject();
  
  // разбиваем get-запрос и преобразуем в json
  set = parameters.entrySet();
  for (me : set) {
      try {
          json.put(me.getKey(), me.getValue());
      } catch(e) {
          json.put("error", e);
      }
  }
  
  request.sendResponse(json.toString().getBytes(), "text/plain; charset=UTF-8");
  request.out.flush();
  request.out.close();

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

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

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

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

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

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

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

Android Smart Home
(0.0) / 0
Прежде чем оставить комментарий, пожалуйста, ознакомьтесь с правилами комментирования. Оставляя комментарий, вы подтверждаете ваше согласие с данными правилами и осознаете возможную ответственность за их нарушение. Все комментарии премодерируются.
0
Рубрики
Свежие записи