Управляем android устройством (ioBroker.paw II)

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

Это уже третья попытка подружить умный дом с android, напомню, что первая попытка контролировать android  устройства посредством HTTP, была с помощью приложения Paw Server. Данное приложение позволяло с помощью языка BeanShell встраивать свой код в xhtml страницу и взаимодействовать с ним, получать данные или управлять им. Для интеграции с сервером умного дома (ioBroker) был написан драйвер, но для его первой настройки приходилось вручную загружать скрипты. Далее, уже посредством драйвера, происходило обновление скриптов, что позволяло добавлять новые функции и исправлять ошибки, но и накладывала ряд ограничения в попытках отойти от заложенных в Paw Server методов для реализации новых функций.

Второй попыткой, было собрать свое приложение на базе исходников от Paw server. Главной целью которого была упростить для пользователя процесс настройки, а также добавить новые возможности, которые не могли быть реализованы в предыдущей версии.

В этой же версии было решено полностью отказаться от Paw server и переписать приложение и драйвер для ioBroker. Добавить новые способы подключения, кроме уже имеющегося HTTP,  еще и MQTT. Добавить больше настроек по выбору событий, как от самой системы, так и от встроенных датчиков. Конечно первым дело приложение будет оптимизировано для ioBroker, но и без особого труда может быть интегрировано и в другие системы.


Get it on Google Play

Приложение позволяет:

  1. Получать состояние системных настроек (яркость подсветки, состояние экрана, уровень громкости, батареи и т.д.)
  2. Получать данные от входящих сообщений и вызовов, распознавание речи
  3. Получать данные от встроенных датчиков.
  4. Получать координаты местоположения.
  5. Получать список установленных приложения и запускать их.
  6. Получать список звонков, телефонную книгу, список сообщений.  (только HTTP)
  7. Просматривать фотографии (только HTTP)
  8. Управлять системными настройками (яркость подсветки, уровень громкости и т.д.)
  9. Отправлять сообщения, совершать звонки.
  10. Создавать уведомления и «диалоговые» окна.
  11. Отправлять текст на синтез речи.
  12. Взаимодействовать с таскером.
  13. Отправлять файлы на устройства (только 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 (ниже пример значения)

Для «диалогов» топик /comm/notification/alert.  Ответ от «диалогов» приходит в JSON формате и публикуется в топике /info/alert/response

 

Интеграция с ioBroker

Встраивая в приложения возможность работы через протоком MQTT, я как раз хотел упростить интеграцию с системой и избавиться от написания отдельного драйвера. Но некоторые функции не могут быть реализованы через протокол MQTT и по этой причине без драйвера не обойтись.

Структура объектов драйвера похоже на структуру MQTT, и так же разделены на две ветки /info/ и /comm/, имеет схожие команды для управления и такую же реакцию на некорректные данные. Я не буду тут описывать настройку и работу драйвера, вся актуальная информацию будет обновляться на GitHub.

Примечания.

Что касается управлением системными настройками (управления яркостью подсветки, выход из сна и т.д.) — разные устройства будут по-разному реагировать, или же не реагировать, на команды. Из-за большого разнообразия устройств, версий SDK, прошивок сложно задать одну модель поведение на команду. Тут нужно подбирать действие согласно вашему устройству, так например для большинства устройств отключения экрана (отправить его в сон) достаточно изменить время тайм-аута подсветки, но на некоторых устройствах это не сработает. Такая же ситуация и с другими системными настройками, для большинства устройств сразу произойдут изменения, а для других же необходимо отправить устройство в сон и затем разбудить его, что бы изменения вступили в силу. Наименьших проблем такого рода возникает с SDK 19 (Android 4.4), но это не точно.Так же не забывайте, что есть поддержка Tasker, и если вам какой-то функции не хватает вы можете ее добавить, и взаимодействовать через приложение.

Разработка приложения, исправления багов, добавления новых функций отнимает достаточно много свободного времени, так что прошу отнестись с понимание, если в один прекрасный день я перестану его обновлять или добавлю рекламу и сделаю его платным.

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

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

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
bondrogeenSeb Recent comment authors

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

  Subscribe  
newest oldest most voted
Notify of
Seb
Гость
Seb

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.