Управляем android устройством

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

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

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

Google Play

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

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

Внешний вид

Внешний вид приложения не окончательный и может меняться. Многое хотелось бы изменить или добавить, но это все со временем.

12121

При первом запуске приложение кратко информирует о текущих изменениях в новой версии и предложит воспользоваться "помощником" для настройки подключения. В настройках приложения можно изменить основные параметры работы, выбрать тип подключения, выбрать события которые будут передаваться на сервер, а также разрешить или запретить доступ к некоторым данным (телефонная книга, сообщения, список вызовов и фотографиям) На главном экране можно увидеть "плитки", пока это пробный вариант, но со временем планирую расширить их возможности. Из доступных "плиток", на данный момент, имеется: кнопка, диммер, время, список, цвет, информация. Главная задача "плиток" отправлять или получать данные (команды) от сервера или управлять другими устройствами. Пока нет общей картины как должно все работать, поэтому не буду сейчас описывать все нюансы.

Подключения

Теперь про подключения и команды управления, приложение имеет два варианта подключения по протоколу HTTP и MQTT. У каждого способа есть, как свои плюсы, так и недостатки, какой способ подключения выбрать решать вам.

HTTP (Web server)

12121
12121

Данный способ предусматривает подключение по Wi-Fi, к локальной сети. Приложение "поднимает" свой веб сервер (ip-адрес и порт можно посмотреть в уведомлении при подключении) и дает доступ управлять им. Это можно сделать как напрямую (через браузер), так и в интеграции с сервером УД, посредством POST или GET запросов.

Для примера, некоторый список GET запросов:

http://<IP>:<PORT>/api/get.json (порт по умолчанию 8080)

/api/get.json Получить данные об устройстве.

/api/set.json?brightness=30 Регулировка уровня подсветки от 4 до 100 %

/api/set.json?brightnessMode=auto Установка режима подсветки.

/api/set.json?link=google.com Открыть ссылку в браузере устройства.

/api/set.json?vibrate=1000 Включение вибрации на устройстве. Время указывается в миллисекундах. (1000 == 1сек)

/api/set.json?timeScreenOff=60 Установка времени работы подсветки на устройстве в сек.

/api/set.json?home=1 Перейти на главный экран

/api/set.json?alert=message&title=Title&negativeButton=no&positiveButton=yes&neutralButton=Yes%20and%20no&cancel=true Создать alert dialog, это окно с предупреждением которое вы можете конфигурировать на ваше усмотрение

/api/set.json?newNoti=Text&title=Title1&id=1&light=true&sound=true&vibrate=true&contentInfo=textLeft&progress=40 Отправить уведомление на устройство.

/api/set.json?delNoti=all Удалить все уведомления

/api/set.json?delNoti=2 Удалить одно уведомление с id = 2

/api/set.json?call=89876543201 Позвонить по номеру.

/api/set.json?callEnd=true Завершить разговор,

/api/set.json?sms=9876543210&text=Test Отправить сообщение с текстом на номер

/api/set.json?volume=12&type=notification Установка уровня громкости.

/api/set.json?tts=Привет Отправка текста на синтез речи.

/api/set.json?ttsStop=true Остановить синтез речи.

Ответы от запросов будут возвращаться в JSON формате, в теле ответа передается имя устройства, ip адрес и статус команды. Некоторые запросы вызывают дополнительно "обратный вызов", например при отправки текста на синтез речи, приложение отправит запрос серверу о начале проговаривания текста и его завершение. Таким же способом приложение передает данные о событиях и показания встроенных датчиков на сервер. Поэтому для полноценной работы, требуется чтобы сервер УД умел обрабатывать их.

MQTT

Протокол MQTT достаточно популярен и поддерживается различными системами УД, это позволяет легко интегрировать приложение в них. При выборе данного способа подключения, можно использовать как локальный, так внешний MQTT брокер. При подключении к MQTT брокеру создается основная ветка /PAW/, далее идет имя устройств (для каждого устройство оно должно быть свое), которые в свою очередь делятся на две ветки топика /info/ и /comm/, из названия можно догадаться, что в ветке info (information) публикуется вся поступающая информация от устройства, а в ветке comm (command) топики для управления им. Это сделано для наглядности, чтобы лучше понимать какой топик за что отвечает.

Также в основной ветки есть /all_devices/ в данной ветке находятся топики на которые подписываются все устройства, что позволяет управлять всеми устройствами сразу.

12121

Для универсальности, в тех топиках значения которых может быть истинное (true) или ложное (false), могут принимать разные значения, то есть 1, on, auto, true - это истинное значение, а 0, off, false, manual - это ложное. Еще одной особенностью работы приложения является то, что для проверки выполнения команды, в случае успешной ее выполнения, в тот же топик публикуется пустое значение. А если значение после публикации не исчезло, это говорит о том, что при выполнении команды возникла ошибка или значение не соответствует корректному для данного топика. Например, при изменении уровня громкости, если значение будет не соответствовать числу или выйдет за пределы максимального, для данного типа уровня громкости, вернет ошибку.

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

12121

Для уведомлений топик /comm/notification/create (ниже пример значения)

{
 "noti":"Any text",
 "title":"Title 2",
 "info":"Any text",
 "vibrate":true,  
 "sound":true,    
 "light":true,     
 "id":2
}

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

{
 "alert":"Turn the lights off?",
 "title":"Light",
 "negative":"No",  
 "positive":"Yes",  
 "neutral":"Neutral",  
 "sound":true,      
 "id":2
}

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

12121

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

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

Примечания

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

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

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