Smart Ring - система для управления умным домом, которая состоит из 3-х частей:
- Носимое устройство
- Мобильное приложение
- Сервер
- Видео с примером интерфейса приложения и работы всей системы (здесь еще не само устройство, а отладочная плата)
- Презентация (более подробная информация в заметках докладчика)
Устройство представляет собой кольцо из Bluetooth модуля, кнопки, батареи и зарядки. При нажатии на кнопку, сигнал передается по Bluetooth на смартфон. Такой принцип позволяет включать устройство только при нажатии на кнопку, что снижает энергопотребление и позволяет перезаряжать девайс как можно реже.
Для компиляции прошивки требуется установить nRF5 SDK 15.0.0 в папку /device.
Мобильное приложение используется для настройки устройства, обработки нажатий на его кнопку и отправки данных на сервер. Приложение состоит из 3 основных разделов:
- Раздел настройки устройства
- Раздел настройки команд
- Раздел настройки локаций
При считывании данных с устройства, приложение определяет текущую локацию пользователя и на основании полученных данных формирует событие, отправляемое на сервер.
- Для интерфейса:
- 'com.google.android.gms:play-services-maps:16.1.0'
- 'androidx.appcompat:appcompat:1.1.0'
- 'androidx.transition:transition:1.3.1'
- 'com.google.android.material:material:1.1.0'
- 'androidx.constraintlayout:constraintlayout:1.1.3'
- 'androidx.vectordrawable:vectordrawable:1.1.0'
- 'androidx.navigation:navigation-fragment:2.2.2'
- 'androidx.navigation:navigation-ui:2.2.2'
- 'androidx.recyclerview:recyclerview:1.1.0'
- Для работы с Bluetooth:
- 'no.nordicsemi.android.support.v18:scanner:1.4.3'
- 'no.nordicsemi.android:ble-livedata:2.2.0'
- 'no.nordicsemi.android:log:2.2.0'
- Для работы с базой данных:
- 'androidx.room:room-runtime:2.2.5'
- 'androidx.room:room-compiler:2.2.5'
- Для http запросов:
- 'com.android.volley:volley:1.1.1'
- Остальные:
- 'androidx.lifecycle:lifecycle-extensions:2.2.0'
- 'androidx.preference:preference:1.1.1'
- 'androidx.legacy:legacy-support-v4:1.0.0'
Сервер используется для интеграции устройства с какой-либо системой управления умным домом (на данный момент реализована интеграция со SmartThings).
Сервер получает обновления состояния кнопки от мобильного приложения и отсылает их в систему SmartThings.
На данный момент система использует сервер, который запущен на glitch.
Для запуска сервера локально выполните:
$ cd server
$ npm install
$ node start- На данный момент не реализованы двойные, тройные, длинные и другие нажатия, вместо этого отладочная плата просто обрабатывает нажатия на 4 разные кнопки.
- Раздел "устройства" не функционирует полностью, интерфейс реализован, но не передает настройки устройству
- Требуется выполнить рефакторинг сервиса и возможно его требуется разделить на 2 отдельных (Location и Ble Service)
- Требуется оптимизировать сканирование устройств и настроить фильтры, чтобы снизить энергопотребление
- Некоторые списки реализованы не через RecyclerAdapter'ы, нужно это исправить
- Сделать внедрение зависимостей через Dagger
- Заменить Mock-авторизацию на настоящую
- При перезапуске сервера слетает
accessTokenи устройство требуется передобавлять. Для исправления такой проблемы стоит написать метод, позволяющий перезапрашивать токены и загрузить сервер на более удобный хостинг. - Требуется добавить базу данных (или хотя бы текстовый файл) для хранения текущего состояния кнопки
- На данный момент реализована поддержка одного устройства. Нужно сделать поддержку нескольких и придумать, как генерировать
externalDeviceIdна основании локации и комнаты, в которой будет работать устройство