Управляем android устройством (ioBroker.paw II)
Это уже третья попытка подружить умный дом с android, напомню, что первая попытка контролировать android устройства посредством HTTP, была с помощью приложения Paw Server. Данное приложение позволяло с помощью языка BeanShell встраивать свой код в xhtml страницу и взаимодействовать с ним, получать данные или управлять им. Для интеграции с сервером умного дома (ioBroker) был написан драйвер, но для его первой настройки приходилось вручную загружать скрипты. Далее, уже посредством драйвера, происходило обновление скриптов, что позволяло добавлять новые функции и исправлять ошибки, но и накладывала ряд ограничения в попытках отойти от заложенных в Paw Server методов для реализации новых функций.
Второй попыткой, было собрать свое приложение на базе исходников от Paw server. Главной целью которого была упростить для пользователя процесс настройки, а также добавить новые возможности, которые не могли быть реализованы в предыдущей версии.
В этой же версии было решено полностью отказаться от Paw server и переписать приложение и драйвер для ioBroker. Добавить новые способы подключения, кроме уже имеющегося HTTP, еще и MQTT. Добавить больше настроек по выбору событий, как от самой системы, так и от встроенных датчиков. Конечно первым дело приложение будет оптимизировано для ioBroker, но и без особого труда может быть интегрировано и в другие системы.
- Получать состояние системных настроек (яркость подсветки, состояние экрана, уровень громкости, батареи и т.д.)
- Получать данные от входящих сообщений и вызовов, распознавание речи
- Получать данные от встроенных датчиков.
- Получать координаты местоположения.
- Получать список установленных приложения и запускать их.
- Получать список звонков, телефонную книгу, список сообщений. (только HTTP)
- Просматривать фотографии (только HTTP)
- Управлять системными настройками (яркость подсветки, уровень громкости и т.д.)
- Отправлять сообщения, совершать звонки.
- Создавать уведомления и «диалоговые» окна.
- Отправлять текст на синтез речи.
- Взаимодействовать с таскером.
- Отправлять файлы на устройства (только HTTP).
Внешний вид.
Внешний вид приложения не окончательный и может меняться. Многое хотелось бы изменить или добавить, но это все со временем.
С навигацией по приложению, я думаю, не должно возникнуть трудностей. При первом запуске приложение кратко информирует о текущих изменениях в новой версии и предложит воспользоваться «помощником». Перейдя в настройки приложения можно изменить основные параметры работы, выбрать тип подключения, выбрать события которые будут передаваться на сервер, а также разрешить или запретить доступ к некоторым данным (телефонная книга, сообщения, список вызовов и фотографиям)
На главном экране можно увидеть «плитки», пока это пробный вариант, но со временем планирую расширить их возможности. Из доступных «плиток», на данный момент, имеется: кнопка, диммер, время, список, цвет, информация. Главная задача «плиток» отправлять или получать данные (команды) от сервера или управлять другими устройствами. Пока нет общей картины как должно все работать, поэтому не буду сейчас описывать все нюансы.
Подключения.
Теперь про подключения и команды управления, приложение имеет два варианта подключения по протоколу HTTP и MQTT. У каждого способа есть, как свои плюсы, так и недостатки, какой способ подключения выбрать решать вам.
HTTP (Web server)
Данный способ предусматривает подключение по Wi-Fi, к локальной сети. Приложение «поднимает» свой веб сервер (ip-адрес и порт можно посмотреть в уведомлении при подключении) и дает доступ управлять им. Это можно делать как напрямую (через браузер), так и в интеграции с сервером УД, посредством POST или GET запросов.
Для примера, некоторый список GET запросов:
<IP> — это ip адрес устройство в сети, <PORT> — порт (По умолчанию 8080)
http://<IP>:<PORT>/api/get.json Получить данные об устройстве.
http://<IP>:<PORT>/api/set.json?brightness=30 Регулировка уровня подсветки от 4 до 100 %
http://<IP>:<PORT>/api/set.json?brightnessMode=auto Установка режима подсветки.
http://<IP>:<PORT>/api/set.json?link=google.com Открыть ссылку в браузере устройства.
http://<IP>:<PORT>/api/set.json?vibrate=1000 Включение вибрации на устройстве. Время указывается в миллисекундах. (1000 == 1сек)
http://<IP>:<PORT>/api/set.json?timeScreenOff=60 Установка времени работы подсветки на устройстве в сек.
http://<IP>:<PORT>/api/set.json?home=1 Перейти на главный экран
http://IP:<PORT>/api/set.json?alert=message&title=Title&negativeButton=no&positiveButton=yes&neutralButton=Yes%20and%20no&cancel=true Создать alert dialog, это окно с предупреждением которое вы можете конфигурировать на ваше усмотрение
http://IP:<PORT>/api/set.json?newNoti=Text&title=Title1&id=1&light=true&sound=true&vibrate=true&contentInfo=textLeft&progress=40 Отправить уведомление на устройство.
http://IP:<PORT>/api/set.json?delNoti=all Удалить все уведомления
http://IP:<PORT>/api/set.json?delNoti=2 Удалить одно уведомление с id = 2
http://<IP>:8080/set.json?call=89876543201 Позвонить по номеру.
http://<IP>:<PORT>/api/set.json?callEnd=true Завершить разговор,
http://<IP>:<PORT>/api/set.json?sms=9876543210&text=Test Отправить сообщение с текстом на номер
http://<IP>:<PORT>/api/set.json?volume=12&type=notification Установка уровня громкости.
http://<IP>:<PORT>/api/set.json?tts=Привет Отправка текста на синтез речи.
http://<IP>:<PORT>/api/set.json?ttsStop=true Остановить синтез речи.
Ответы от запросов будут возвращаться в JSON формате, в теле ответа передается имя устройства, ip адрес и статус команды. Некоторые запросы вызывают дополнительно «обратный вызов», например при отправки текста на синтез речи, приложение отправит запрос серверу о начале проговаривания текста и его завершение. Таким же способом приложение передает данные о событиях и показания встроенных датчиков на сервер. Поэтому для полноценной работы, требуется чтобы сервер УД умел обрабатывать их.
MQTT
Протокол MQTT достаточно популярен и поддерживается различными системами УД, это позволяет легко интегрировать приложение в них. При выборе данного способа подключения, можно использовать как локальный, так внешний MQTT брокер.
При подключении к MQTT брокеру создается основная ветка /PAW/, далее идет имя устройств (для каждого устройство оно должно быть свое), которые в свою очередь делятся на две ветки топика /info/ и /comm/, из названия можно догадаться, что в ветке info (information) публикуется вся поступающая информация от устройства, а в ветке comm (command) топики для управления им. Это сделано для наглядности, чтобы лучше понимать какой топик за что отвечает.
Также в основной ветки есть /all_devices/ в данной ветке находятся топики на которые подписываются все устройства, что позволяет управлять всеми устройствами сразу.
Для универсальности, в тех топиках значения которых может быть истинное (true) или ложное (false), могут принимать разные значения, то есть 1, on, auto, true — это истинное значение, а 0, off, false, manual — это ложное. Еще одной особенностью работы приложения является то, что для проверки выполнения команды, в случае успешной ее выполнения, в тот же топик публикуется пустое значение. А если значение после публикации не исчезло, это говорит о том, что при выполнении команды возникла ошибка или значение не соответствует корректному для данного топика. Например, при изменении уровня громкости, если значение будет не соответствовать числу или выйдет за пределы максимального, для данного типа уровня громкости, вернет ошибку.
Также в данной версии был расширен набор команд для уведомлений и «диалогов», они позволяют выводить более подробную информацию, а также взаимодействовать с пользователем, если устройство используется как информер. При их построение требуется большое количество параметров, поэтому необходимо в соответствующий топик публиковать значение в JSON формате.
Для уведомлений топик /comm/notification/create (ниже пример значения)
1 2 3 4 5 6 7 8 9 |
{ "noti":"Any text", "title":"Title 2", "info":"Any text", "vibrate":true, "sound":true, "light":true, "id":2 } |
Для «диалогов» топик /comm/notification/alert. Ответ от «диалогов» приходит в JSON формате и публикуется в топике /info/alert/response
1 2 3 4 5 6 7 8 9 |
{ "alert":"Turn the lights off?", "title":"Light", "negative":"No", "positive":"Yes", "neutral":"Neutral", "sound":true, "id":2 } |
Интеграция с ioBroker
Встраивая в приложения возможность работы через протоком MQTT, я как раз хотел упростить интеграцию с системой и избавиться от написания отдельного драйвера. Но некоторые функции не могут быть реализованы через протокол MQTT и по этой причине без драйвера не обойтись.
Структура объектов драйвера похоже на структуру MQTT, и так же разделены на две ветки /info/ и /comm/, имеет схожие команды для управления и такую же реакцию на некорректные данные. Я не буду тут описывать настройку и работу драйвера, вся актуальная информацию будет обновляться на GitHub.
Примечания.
Что касается управлением системными настройками (управления яркостью подсветки, выход из сна и т.д.) — разные устройства будут по-разному реагировать, или же не реагировать, на команды. Из-за большого разнообразия устройств, версий SDK, прошивок сложно задать одну модель поведение на команду. Тут нужно подбирать действие согласно вашему устройству, так например для большинства устройств отключения экрана (отправить его в сон) достаточно изменить время тайм-аута подсветки, но на некоторых устройствах это не сработает. Такая же ситуация и с другими системными настройками, для большинства устройств сразу произойдут изменения, а для других же необходимо отправить устройство в сон и затем разбудить его, что бы изменения вступили в силу. Наименьших проблем такого рода возникает с SDK 19 (Android 4.4), но это не точно.) Так же не забывайте, что есть поддержка Tasker, и если вам какой-то функции не хватает вы можете ее добавить, и взаимодействовать через приложение.
Разработка приложения, исправления багов, добавления новых функций отнимает достаточно много свободного времени, так что прошу отнестись с понимание, если в один прекрасный день я перестану его обновлять или добавлю рекламу и сделаю его платным.
Hi, good work for your android application.
I would like to know if there is an HTTP api to get the sensor data such as accelerometer, light, barometer, etc
Thank in advance.
Hi
It is impossible to receive this data by request, I refused this implementation.
The application itself sends data from sensors in JSON format to the server (:/api/ )
Добрый день! Отличное приложение, очень давно искал подобное! Но вот небольшая проблемка: на одном из девайсов при попытке зайти в /controls.html перебрасывает как и положено на /login.html, но его не открывает, пишет «Page not found». команды наподобие «/api/set.json?brightness=100» работают отлично, а в Control зайти не могу. В чем может быть проблема, не подскажете?
Добрый день.
1) Почистить кеш браузера.
2) Удалить каталог /paw_2/ и переустановить приложение.
Спасибо большое, попробую! )
и еще вопрос, в тексте не нашел — из Controls я запустить приложение могу, а какой командой get запустить его через HTTP — не нашел.
P.S. «Documentation» не открывается ни на одном планшете, пишет «Oops.. You just found an error page..»
Документация не работает, нет времени на нее.
Посмотрите описание драйвера для ioBroker на github, там команды все есть.
https://github.com/bondrogeen/ioBroker.paw
Например
// run the application. You can enter a package name ‘ru.codedevice.iobrokerpawii’ or title name ‘ioBroker.PAW II’
sendTo(«paw.0»,’all’,{startApp:’lcf.clock’});
get запрос будет такой IP:8080/api/set.json?startApp=ioBroker.PAW II
Отлично! Спасибо еще раз! Благодоря вашим советам приближаю свою систему к идеалу. Остался на данный момент один вопрос: обычное приложения я запускать научился, а «веб приложение» — как его называет андроид — нет. Это веб страничка, отправленная на рабочий стол средствами Chrome при нажатии на ярлык открывается на весь экран, вот мне бы научиться её средствами ioBroker или запускать, или хотя бы переключаться на неё. Есть специальные приложения для запуска этой странички, но они и неудобны на планшете, да и ставится на андрои 4.2.2 как то не хотят.
Заранее спасибо!
С уважением, Алексей.
Если это обычная веб страница, то можно открывать chrome, а в нем уже настроить стартовую на ваше приложение.:/api/set.json?link=google.com
ну или можно запустить ссылку в браузере командой
http://
В том то и дело, что открыть могу хоть как ссылку хоть хром со стартовой, но тогда остается интерфейс хрома. а если в хроме делаю «Добавить на главный экран», то там появляется ярлык, с которого она открывается на весь экран, без интерфейса хрома.
Это создается виджет, возможность запуска виджета через paw нет.:/api/set.json?root=input tap 100 100
Напрямую скорей всего ничего не получится, нужно искать какие нибудь «костыли»:
Запуск через другое приложение (например создать задачу в таскер и уже через paw запустить ее)
Эмулировать тап по экрану для запуска вашего виджета (нужен рут)
http://
100 100 это координаты x y
Спасибо, буду разбираться с таскером ). И напоследок вопрос — для android 4.0 (ядро 3.0.8+) существует сборка paw? Спасибо!
Можете попробовать приложение paw server читаем тут
https://codedevice.ru/archives/821
далее по инструкции
https://github.com/bondrogeen/ioBroker.paw/blob/9334ac245d1e407dc690950870b2d1e7502aca20/docs/ru/paw.md
файлы брать тут
https://github.com/bondrogeen/ioBroker.paw/tree/cbbaef86d44f5b83b9a26a4b4ba101fbd997a2f2/www
P.S. url и команды отличаются, читаем внимательно