В последнее время «интернет вещей» (иногда «интернет всего») стал неотъемлемой частью повседневной жизни. Гигабайты данных приходят от различных сенсоров и датчиков, что позволяет перевести сферу анализа на кардинально новый уровень. IoT становится следующим мегатрендом в развитии технологий и набирает все большую популярность в самых разных областях бизнеса.
Сегодня мы хотим обратить ваше внимание на DeviceHive — быстрый, удобный и легкий в использовании IoT-проект и открытым исходным кодом, который предоставляет мощные решения для общения устройств между собой и построения вашего собственного «умного дома». Он соединяет в единую инфраструктуру датчики, облачные сервисы и мобильные приложения, сохраняет огромные объемы информации, запускает процессы ее анализа и обработки, используя алгоритмы машинного обучения и для историчесих данных, и в реальном времени. Чтобы понять, как работает механизм машинного общения в рамках DeviceHive, давайте попробуем создать собственное маленькое приложение.
Начнем с центральной части — DeviceHive Java-сервера. С тех пор как он был опубликован в Microsoft Azure Marketplace, процесс установки и настройки стал очень простым. Следуйте приведенным ниже инструкциям и процесс не займет больше пяти минут:
- откройте эту сслыку и нажмите «cоздание виртуальной машины», после перенаправления нажмите «cоздат» еще раз;
- на первой странице будет предложено ввести имя вашей виртуальной машины, настроить аутентификацию и выбрать расположение и группу ресурсов;
- на следующем шаге вам понадобится указать параметры ВМ: размер памятии тип (эти значения зависят от того, что нужно будущему приложению для работы, но не рекомендуется использовать машину слабее двухядерной с 4 GB RAM);
- на последнем этапе укажите специфические настройки для ваших задач, если нужно и, после краткого обзора, создайте виртуальную машину.
Поздравляем — ваш DeviceHive-сервер развернут в облаке! На странице с информацией можно найти внешний IP-адрес, пусть в рамках статьи это будет public.ip.address.
Следующий шаг — первоначальная конфигурация нашего сервера. Для дальнейшего использования REST & Websocket соединений нам понадобятся соответствующие url-адреса. Откроем public.ip.address:8080/dh — DeviceHive Java-server информационную страничку, где можно увидетьс версию и время билда. Если вы все сделали правильно, необходимые ендпойнты там тоже есть, но пока они должны равняться ‘null’. Чтобы сделать их валидными, нужно будет нажать кнопку Configure. Это действие требует аутентификации. Для этих целей (в том числе) в системе по умолчанию создается пользователь с правами администратора и dhadmin/dhadmin_#911 креденшиалами. Скопируйте это в поля для логина и пароля и через пару секунд увидите валидные адреса на обновленной странице. После этого можете открыть DeviceHive admin-панель, пройдя по адресу public.ip.address:8080/admin (зайдите в систему под тем же пользователем). Давайте посмотрим на нее повнимательнее.
Насколько dы помните, dhadmin — админский пользователь, что легко распознать по Admin-кнопке в левом верхнем углу страницы. Нажмите на нее и Users-, Device Classes- и OAuth clients-gодменю появится ниже. Для начала давайте откроем страницу с пользователями и изменим пароль для текущего (с точки зрения конфиденциальности данных крайне нежелательно продолжать использовать дефолтный пароль). Создайте других пользователей, если необходимо.
Следом за Admin расположена ссылка на Access Keys. Это центральная часть всей аутентификации в системе. Каждый Access key (AK) — случайно сгенерированный токен с набором настраиваемых доступов, который может быть создан и из админки, и с помощью RESTful-ендпойнта. AK может использовать любой участник экосистемы Devicehive от пользователя до устройства. Для более глубокого понимания деталей авторизации в системе (и использования ключей в частности) в рамках Devicehive можете прочитать эту статью, но на данном этапе нам будет достаточного самого простого AK, у которого нет срока годности и которому присвоены все админские доступы. Чтобы его создать, повторите в точности все, что видите на картинке ниже:
Супер! Вы только что создали собственный demo_access_key, который можно и нужно использовать при дальнейшей работы с Devicehive и его компонентами.
Самое время поговорить немного о алгоритмах обмена сообщениями. Наша система предоставляет для этого три типа структур, каждая имеет особенности использования.
- DeviceNotification — информация, полученная от устройства (обычно это данные с различных сенсоров и датчиков, но могут быть также конфигурационные детали).
- DeviceCommand — информация, которая отправляется устройству (специальная команда со своими параметрами, которую устройство, в свою очередь, знает, как обработать).
- DeviceCommandUpdate — сообщение, отправленно устройством в ответ на полученную DeviceCommand. Содержит результат и статус впыолненной команды.
Давайте пойдем чуть дальше и создадим наш собственный симулятор устройств (если такие слова, как RaspberryPI, BeagleBone и Arduino не пугают, вам это может быть не нужно, но в рамках статьи нам хватит обчных HTTP-запросов). Каждый прибор нужно добавить в соответствующий Network, это легко сделать с админ-панели. Откройте страницу Networks и создайте новую сеть, пусть это будет dh-demo-network с dh-demo-key. Для регистрации симулятора нужно отправить следующий запрос на сервер:
curl -H 'Content-Type: application/json' -H 'Authorization: Bearer demo_access_key' -X PUT -d '{«id»: «dh-demo-device», «key»:«dh-demo-key», «name»:«dh-demo-device», «deviceClass»:{«name»:«demo-device-class», «version»: «0.1», «equipment»:[]}, «network»: {«name»:«dh-demo-network», «key»:«dh-demo-key»}, «status»: «Online»}' public.ip.address:8080/dh/rest/device/dh-demo-device
Если мы все сделали правильно, dh-demo-device должен появиться на админке в секции Devices.
Давайте отправим нотификацию, снова сделаем это с помощью HTTP-запроса:
curl -H 'Content-Type: application/json' -H 'Authorization: Bearer demo_access_key'' -X POST -d '{«notification»:"$device-add", «parameters»: {«param1»: «value1»}}' http//public.ip.address:8080/dh/rest/device/dh-demo-device/notification
Это сообщение теперь доступно на detail-странице утройства и, если все прошло успешно, вы увидите следующую картинку:
Voila! Мы только что создали симулятор реального прибора с датчиками и отправили из него нотификацию в облако DeviceHive. Довольно просто, не находите? Если вам понравилась статья, и вас интересует IoT, свяжитесь с нами.
Об авторе
Татьяна Матвиенко — Java & Scala Developer «DataArt »
В DataArt c 2012 г. занимается разработкой различных продуктов в сфере BigData и Internet of Things, в частности, решений, основанных на Spark ecosystem.
Автор: DataArt