Статьи

Быстрая разработка IoT с помощью приложения-ретранслятора Android и SDK

IoTWeek_Gray

Это неделя Интернета вещей в SitePoint! Всю неделю мы публикуем статьи, ориентированные на пересечение интернета и физического мира, поэтому следите за последними обновлениями в теге IoT .

relayr — это платформа IoT как услуга, призванная помочь разработчикам IoT централизовать и агрегировать данные, генерируемые подключенными к IoT устройствами. Устанавливая их аппаратные и программные SDK, вам не нужно беспокоиться о конкретных SDK и типах данных, генерируемых различными устройствами, а вместо этого создавать код для API-интерфейсов ретранслятора.

relayr начался с Wunderbar , пользовательского инструмента прототипирования IoT, который предоставляет множество датчиков и адаптеров. В мае компания выпустила Android-приложение Proto IoT, и я встретился с двумя из их команды (Бернард и Маркос) здесь, в Берлине, чтобы обсудить, почему они создали приложение и что разработчики могут с ним сделать.

Бернард и Маркос

Хотя Wunderbar — хорошее устройство, команда ретрансляторов обнаружила, что они не достигли столько разработчиков, сколько хотели. Нестандартные аппаратные устройства по-прежнему являются высоким барьером для входа, и для их работы требуется множество кабелей и сложной конфигурации. Команда поняла, что датчики и измерения, необходимые тем, кто делал прототипы IoT, уже были доступны в устройстве, к которому почти каждый имеет доступ. Их мобильные телефоны.

Приложение доступно для Android, а iOS скоро появится (поверьте, я видел бета-версию). Приложение позволяет отслеживать ускорение, гироскоп, яркость, местоположение, касания экрана, уровень заряда батареи и сигнал Wi-Fi, и все они автоматически регистрируются на облачной панели реле.

Скриншот приложения

Веб-панель инструментов

Вы также можете перейти к более долгосрочному обзору истории:

Детальный просмотр данных

Создание ретранслятора Powered Cat Monitor

Пришло время создать приложение, которое использует приложение и релейный SDK. Я использую слегка модифицированную версию демоверсии из недавнего Droidcon здесь, в Берлине. Вы можете найти окончательный проект на GitHub .

Наш кот Джинджер ненавидит закрывать дверь гостиной. Именно здесь она может поцарапать коврик, сесть на мой стол и покататься в своей кошачьей мяте. Мне часто хотелось, чтобы дверь закрылась, чтобы она не могла этого сделать. Проблема в том, что она вскакивает на дверную ручку, чтобы опустить ее и позволить себе войти.

В этом примере приложения я буду использовать гироскоп телефона, чтобы определить, находится ли ручка вниз (в этом случае изменение ориентации на 90 градусов), потому что она висит на нем. Затем отобразите текущий результат в приложении для Android. Конечно, приложение вывода может быть на любом из языков, которые поддерживает relayr, и в «реальном мире» я бы заменил свой телефон на соответствующий датчик, я не оставляю свой телефон приклеенным к дверной ручке. Суть приложения Proto исключительно для тестирования.

Примечание : в проекте также есть папка с оборудованием , это для Wunderbar, но вам может быть интересно покопаться. Теперь я буду ссылаться на файлы, найденные в папке protoIoT .

Примечание . В коде используется Butterknife для аккуратного внедрения кода. В 2015 году у SitePoint была статья, в которой более подробно освещалась библиотека.

При разработке приложения для Android для платформы relayr вы фактически используете два разных SDK, Java SDK содержит много подкрепляющего кода, а в Android SDK добавлены специальные API, относящиеся к разработке Android.

Добавьте их как зависимости в build.gradle (Модуль: ProtoIoT) :

dependencies { ... compile 'io.relayr:android-sdk:1.0.3' compile 'io.relayr:java-sdk:1.2.1' } 

Откройте файл Constants.java и измените константу PROTO_IOT__DEVICE_ID на идентификатор вашего устройства. Этот идентификатор можно найти, щелкнув значок PROTO_IOT__DEVICE_ID в обзоре вашего устройства:

 public static final String PROTO_IOT__DEVICE_ID = "59b7da98-b2cb-4018-a9ff-aa48f83652e4"; 

Идентификатор устройства

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

Переверните ваш телефон на 90 градусов, вы должны увидеть изображения и изменения текста, чтобы отразить изменение в состоянии. Переверните его обратно, и оригинальное изображение вернется.

Откройте TabCurrent.java . Когда вы открываете эту вкладку, она запускает loadUserInfo() для загрузки пользовательских данных и в случае успеха загружает устройство смартфона, которое вы добавили выше, в приложение с помощью функции loadProtoIotDevice() . Если эта функция успешно загружается, то пришло время начать прослушивание данных IoT, сгенерированных устройством с помощью функции subscribeToProtoIotData() .

SDK позволяет подписаться на устройство и реагировать на изменения с помощью функции .subscribeToCloudReadings() :

 private void subscribeToProtoIotData() { if (mDevice == null) return; mDevice.subscribeToCloudReadings() .timeout(Constants.DEFAULT_TIMEOUT, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new SimpleObserver<Reading>() { @Override public void error(Throwable e) { Toast.makeText(getContext(), R.string.problem_loading_data, Toast.LENGTH_SHORT).show(); Log.e("TabCurrent", "subscribeToProtoIotData error"); e.printStackTrace(); if (e instanceof TimeoutException) subscribeToProtoIotData(); } @Override public void success(Reading reading) { if (reading.meaning.equals("acceleration")) { final AccelGyroscope.Acceleration accel = mGson.fromJson(reading.value.toString(), AccelGyroscope.Acceleration.class); showCatState(Math.abs(accel.x) > 6); } } }); } 

Функция принимает значение тайм-аута, определенное в Constants.java , устанавливает поток для запуска и создает объект Reading извлекаются значения, если метод подписки успешен.

Внутри переопределенного метода success вы можете начать реагировать на чтение типов и значений. Используйте reading.meaning.equals() чтобы проверить тип чтения: touch , angularSpeed , acceleration , batteryLevel , rssi , location и luminosity . Как только вы узнаете, с каким типом чтения вы имеете дело, вы можете использовать соответствующие классы Java (в данном случае io.relayr.java.model.AccelGyroscope ) для извлечения чтения и реагирования на него.

Для этого приложения дверного замка это включает изменение изображения, представленного, если значение на оси x акселерометра устройства больше чем 6.

Состояние приложения по умолчанию

Телефон перевернулся на 90 градусов

Проверка других типов чтения и извлечение значения — аналогичный процесс. Например, чтение гироскопа:

 if (reading.meaning.equals("angularSpeed")) { final AccelGyroscope.AngularSpeed gyro = mGson.fromJson(reading.value.toString(), AccelGyroscope.AngularSpeed.class); showToiletState(Math.abs(gyro.x) > 1); } 

Проверьте свои идеи

Мне было легко поэкспериментировать с показаниями, поступающими с моего телефона, и посмотреть, что я могу с ними активировать, великолепно с точки зрения прототипирования. У меня были две основные проблемы, экспериментирующие с приложением Proto IoT и платформой ретранслятора, сетевыми таймаутами и документацией. Время ожидания сети могло быть больше из-за нашего некачественного маршрутизатора, но важно помнить, чтобы справиться с этим в ваших приложениях. Во-вторых, документация ретранслятора грязная. Кажется, их достаточно много, но найти то, что вы ищете, сложно, особенно когда вы, возможно, еще не знаете, что ищете, я был уверен, что приведение этого в порядок является актуальным приоритетом.

Если вы ищете способ создания прототипа своих идей IoT, тогда я настоятельно рекомендую попробовать SDK для приложений Proto и ретранслятора на выбранном вами языке. Дайте мне знать, что вы пытаетесь и как это работает для вас.