В статье дается краткое описание облака Intel IoT Analytics, предназначенное для сбора данных и управления устройств. Рассмотрена практическая работа с облаком на примере Intel Edison(Intel Edison. Первый запуск).
Прошли те времена, когда от устройства не требовалось умение взаимодействия с сетью. Управление, мониторинг, теперь должны выполняться не только в непосредственной близости, а удаленно. Потребовалось получать данные и управлять устройствами через сеть Интернет. На данный момент уже разработано большое количество устройств и управлять ими по отдельности оказалось достаточно трудно реализуемой задачей.
Для унификации потребовался некоторый универсальный посредник, промежуточный слой для работы с устройством. Так появился новый тип взаимодействия Machine-to-Cloud(M2C), взаимодействия устройства с облаком.
Устройство взаимодействует с облаком, по средством стандартизованного протокола. Облако реализует все логику сбора, хранения, управления данных. Также позволяет отправлять команды на устройства для управления им. Облако является универсальным “клеем” для самых разных устройств, непохожих друг на друга. Пользователь взаимодействует с облаком через веб-интерфейс или публичное API. Ниже пойдет речь об облаке Intel IoT Analytics и взаимодействия с ним Intel Edison.
На текущий момент облако функционирует в бета-режиме.
В функциональные возможности облака Intel IoT Analytics, входит:
- Сбор данных от датчиков
- Управление устройством. Получение управляющих команд
- Отображение графиков данных на портале
- Создание правил за слежением устройства
- Загрузка данных с портала для последующего хранения и анализа у “себя”
- Поддержка REST API
Облако взаимодействует с устройствами по протоколу REST. Поэтому можно обеспечить работу с облаком для любого устройства, которое поддерживает Ethernet и SSL(все данные отправляются только в зашифрованном виде). Портал http://dashboard.us.enableiot.com обеспечивает базовый минимум просмотра данных и управления устройством. Разработчики могут сделать свою панель мониторинга и управления устройством используя протокол REST, для получения данных от облака Intel IoT Analytics.
Командные на устройство передаются по протоколам WebSocket и MQTT. В связи с тем, что большинство устройств не имеют публичного IP адреса(располагаются за МСЭ или NAT), то для отправки команд на устройство будем использовать WebSocket.
Данные с Intel Edison будут оправляться по Wi-Fi.
Создание структуры данных
Для обмена данными с устройством используются компоненты двух типов:
- Sensor(датчик) — получение данных от датчиков, например текущая температура
- Actuator — управляющий компонент, позволяет формировать команды устройству, например включить или выключить освещение в комнате
Прежде чем создавать датчик или управляющий компонент, необходимо создать Тип компонента.
Тип компонента описывает:
- тип передаваемых данных(числовые значение, температура +21; булевский тип, включено или выключен кондиционер)
- Минимальное и максимальное значение
- Отображаемая единица: кг, м, дюймы
На портале уже создано несколько базовых типов: температура, влажность, переключатель. Каждый тип имеет свою версию. После изменения любого свойства типа, добавляется +0.1 к версии. Т.е. если для типа Температура V1.0 зададим нижнее граничное значение, то автоматически будет создана новая версия V1.1.
Датчики привязываются к устройствами, которые в свою очередь объедены на портале под административной учетной записью.
На портале http://dashboard.us.enableiot.com создается учетная запись администратора. Дополнительно для доступа к данным других лиц, Администратор может создать учетные записи двух типов Только просмотр и Администратор.
На портале регистрируется устройство Intel Edison c уникальным ID. Для каждого устройства задаются дополнительные атрибутивные поля. Устройств может быть несколько. К каждому устройству привязывается компонент. Компонент является датчиком для отправки данных в облако или управляющим объектом.
Концептуально структура данных выглядит так:
Для каждого компонента определяется его тип:
Отправка и получение данных осуществляется в JSON формате
Пример:
POST dashboard.us.enableiot.com/v1/api/data:deviceId
{
«accountId»: ”",
«data»: [
{
«componentId»: ”",
«on»: 1412456872000,
«value»:«1.23»
}
],
«on»: 1412456872000
}
Для демонстрации возьмем стенд из предыдущего поста Intel Edison. Первый запуск. Будем отправлять в облако данные с датчиков: температура, атмосферное давление, уровень влажности почвы в горшке с цветком.
Практическая часть состоит из трех этапов:
- Создание учетной записи на портале Intel IoT Analytics. Создание типов датчиков
- Настройка Intel Edison и регистрация устройства на портале
- Написание Arduino-кода
Создание учетной записи на портале Intel IoT Analytics. Создание типов датчиков
1. Выполним регистрацию на портале Intel IoT Analytics. Можно использовать OAuth
2. Укажем свое название облака
3. Панель управления. Пока нет ни одного устройства
4. Теперь требуется выполнить регистрацию типов датчиков на портале. Перейдем в раздел Account. Для начала уже зарегистрировано несколько типов датчиков.
5. Откроем датчик Temperature
Укажем минимальную температуру 0, максимальную 40.
Сохраним изменения. И после сохранения, автоматически добавится инкремент к версии датчика.
6. Создадим новый датчик Add a New Catalog Item. Атмосферное давление.
Для упрощения задания краевых значений, воспользуемся информацией с meteovesti.ru. Самое высокое давление было зарегистрировано на севере Западной Сибири, на метеостанции Агата, 31 декабря 1968 года 812,4 мм.рт.ст. На суше самое низкое давление (приведенное к уровню моря) отмечено во время урагана 2 сентября 1935 года во Флориде-Кис, в США 669,3 мм.рт.ст.
Переведем в паскали
1 паскаль [Па] = 7.50063755419211E-03 миллиметр ртутного столба (0°C) [мм рт.ст.]
Получается нижняя граница [Па] 669,3 мм.рт.ст. / 0,0075 = 89 240
верхняя граница [Па] 812,4 мм.рт.ст. / 0,0075 = 108 320
Заполним поля
7. И третий датчик — влажность почвы. Значение указывается в процентах. Где 0 — соответствует состояние абсолютной сухости. 100 — датчик погружен в воду.
В отличие от выше указанных типов Float и Integer, укажем тип Percentage. Название типа не должно содержать пробелов.
На этом работу с порталом закончим, позже к нему вернемся.
Настройка Intel Edison и регистрация устройства на портале
В качестве устройства выступает демонстрационный стенд на Intel Edison из предыдущего поста Intel Edison. Первый запуск.
Для отправки данных Intel Edison использует агент, работающий на уровне Linux. Последнюю версию агента можно загрузить по ссылке Agent from the IoT GitHub site. Рекомендуется обновить т.к. в последней версии появилась возможность взаимодействовать по WebSocket
Через встроенный модуль Wi-Fi, Intel Edison будет взаимодействовать с облаком. Далее требуется подключиться к устройству по терминальному доступу.
Для связи Intel Edsion с Интернетом, потребуется настроить доступ устройства по Wi-Fi
Используя PuTTY, настроим сеть на Edison. Потребуется подключить два порта MicroUSB Intel Edison, к компьютеру. По одному будет подаваться питание, второй для доступа по PuTTY.
Запустим PuTTY, выберем “Serial” порт “COM11”, укажем скорость “115200”.
Если ни каких данных на экране не будет, нажать на Enter, появится авторизация.
Логин умолчанию “root”.
Прошивка до последней версии Intel Edison
Рекомендуется обновить Intel Edison, до последней версии прошивке. Инструкцию и бинарные файлы прошивки доступны по адресу Flashing Intel Edison (wired) — Windows.
2. Для первоначальной настройки выполним команду:
# configure_edison --setup
2.1 Укажем новый пароль. 8 -32 символа
2.2 Зададим имя устройства Intel Edison, — edison_habr(не менее 5 символов), и ответим утвердительно на вопрос подключению к Wi-Fi
2.3 В течение 10 секунд будет произведено сканирование точек доступа. По результатам сканирование необходимо выбрать точку доступа для подключения
Выбираем точку доступа под номером 5 — “FSB”
2.4 Указываем пароль, и получаем IP адрес по DHCP
2.5 Теперь по адресу 192.168.1.44 можно зайти и увидеть страницу:
Настройка сети на этом этапе завершается
3. Выполним тест для агента iotkit
# iotkit-admin test
Тест подключения к облаку пройден успешно.
4. Узнаем ID устройства по команде.
# iotkit-admin device-id
Команда на изменения ID устройства на произвольный:
# iotkit-admin set-device-id YOUR_DEVICE_ID
5. Регистрация устройства
5.1 Для регистрации перейдем на портал dashboard.us.enableiot.com, раздел My account, вкладка Details
Получим код из строки Activation Code
5.2 Перейдем на Intel Edison и выполним регистрацию устройства командой
# iotkit-admin activate [код активации с портала]
5.3 Вернемся на портал dashboard.us.enableiot.com, раздел Devices. В списке устройств появится Intel Edison.
Выбрав устройство, откроется страница редактирования параметров. И в поле Status — изменило значение на active.
6. Выполним регистрацию датчиков
6.1 Регистрация датчиков выполняется командой # iotkit-admin register [имя_датчика] [тип_датчика]. Выполним команды:
# iotkit-admin register temperature1 temperature.v1.1
# iotkit-admin register pressure1 pressure.v1.0
# iotkit-admin register moisturevalue1 moisturevalue.v1.0
Командой iotkit-admin observation, отправим первое тестовое значений — 21
# iotkit-admin observation temperature1 21
6.2 Теперь на портале отображаются подключенные датчики
Команды для управления агентом
# systemctl start iotkit-agent — запуск агента
# systemctl stop iotkit-agent — остановка агента
# systemctl restart iotkit-agent — перезапуск агента
# systemctl status iotkit-agent — узнать текущее состояние агента
Написание Arduino-кода
Остался заключительный этап, загрузка Arduino скетча.
Рассмотрим команды для работы с iotkit-agent:
Для любого скетча используемого Intel Cloud, необходимо взять библиотеку <../Wire/Wire.h> из стандартной среды Arduino arduino.cc, и IoTkit, aJSON, из iotkit-samples.
Подключим необходимые библиотеки:
#include <IoTkit.h> // include IoTkit.h to use the Intel IoT Kit
#include <Ethernet.h> // must be included to use IoTkit
#include <aJSON.h>
Переменная доступа к IoTkit:
// create an object of the IoTkit class
IoTkit iotkit;
Инициализация:
void setup() {
iotkit.begin(); // call begin on the IoTkit object before calling any other methods
}
Отправка данных осуществляется методом — send, где temperature1 — имя датчика, tempvalue — значение температуры в int
iotkit.send(" temperature1", tempvalue);
Полный листинг кода:
//LCD
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDR 0x20 // Define I2C Address where the PCF8574T is
#define BACKLIGHT 7
#define LCD_EN 4
#define LCD_RW 5
#define LCD_RS 6
#define LCD_D4 0
#define LCD_D5 1
#define LCD_D6 2
#define LCD_D7 3
LiquidCrystal_I2C lcd(LCD_I2C_ADDR,LCD_EN,LCD_RW,LCD_RS,LCD_D4,LCD_D5,LCD_D6,LCD_D7);
//BMP085 Barometric Pressure & Temp Sensor
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
//for Intel Cloud
#include <IoTkit.h> // include IoTkit.h to use the Intel IoT Kit
#include <Ethernet.h> // must be included to use IoTkit
// create an object of the IoTkit class
IoTkit iotkit;
float temperature1;
int pressure1;
int moisturevalue1;
void setup() {
iotkit.begin();
Serial.begin(9600);
bmp.begin();
//init LCD
lcd.begin (20,4);
lcd.setBacklightPin(BACKLIGHT,NEGATIVE); // init the backlight
lcd.setBacklight(HIGH); // Backlight on
lcd.home (); // go home
lcd.setCursor ( 0, 0 );
lcd.print("Edison. Habrahabr");
}
void loop() {
lcd.setCursor ( 0, 1 );
lcd.print("Tempera. = ");
lcd.print(bmp.readTemperature());
lcd.print(" *C");
//
lcd.setCursor ( 0, 2 );
lcd.print("Pressure = ");
lcd.print(bmp.readPressure());
lcd.print(" Pa");
//
lcd.setCursor ( 0, 3 );
lcd.print("Moisture Value = ");
lcd.print(analogRead(0));
//read
temperature1=bmp.readTemperature();
pressure1=bmp.readPressure();
moisturevalue1=analogRead(0);
//Console and Send to Intel Cloud
Serial.println("Sensors");
Serial.print("temperature1=");
Serial.println(temperature1);
iotkit.send("temperature1", temperature1);
delay(2000);
Serial.print("pressure1=");
Serial.println(pressure1);
iotkit.send("pressure1", pressure1);
delay(2000);
Serial.print("moisturevalue1=");
Serial.println(moisturevalue1);
moisturevalue1=20;
iotkit.send("moisturevalue1", moisturevalue1);
delay(2000); // wait for a second
}
Перейдем на страницу Charts(dashboard.us.enableiot.com/ui/dashboard#/chart), где можно просмотреть показания датчиков в режиме реального времени.
Подведем краткий итог. Используя облако Cloud Intel IoT Analytics, разработчики устройств могут легко отправлять данные со своего устройства. Форматы REST и JSON достаточно популярны. Функции доступа API опубликованы на Github. Сервис всегда доступен в сети Интернет, а значит, не требуется развертывать свой сервер для сбора и хранения данных. С Cloud Intel IoT Analytics может взаимодействовать практически любое устройство с поддержкой Ethernet и SSL, по стандарту REST API.
Ссылки
ntfs1984
Статью следовало бы начать словами «Покупаем Intel Edison — 77 долларов. Покупаем Breakboard к нему — 96 долларов. А ниже мы расскажем, как отправить POST запрос на сайт с девайса стоимостью 173 бакса».
ИМХО, но мне кажется, IoT-ры сами найдут как и куда отправить свои данные. Вот я например делаю точно то же самое, что в этой статье (и еще несколько других вещей) на 4-хбаксовой ESP8266.
devzona Автор
Свои возмущения пишите в следующий раз в личику. Что вы привязались к стоимости. Прочтите внимательно заголовок — Работа с облаком Intel IoT Analytics: регистрация и отправка данных. И статью следовало то же читать, прежде чем писать вопросы «Какие датчики используются?»:
— ntfs1984 жду с нетерпением пруфлинк на ваши работы, с отправкой данных в облако, уровня не ниже Intel IoT Analytics
ntfs1984
devzona Автор
В первую очередь пруфлинк от вас, все остальные комментарии не по теме в личику. Это обучающий материал, в стиле Hello Word для работы с облаком. Все это требуется для сбора данных. В промышленном режиме может быть подключено, десятки самых разных датчиков. Например, тепловоз, едит гудит, все данные о работе оперативно передаются в облако, что то идет не так, на основе полученных данных оперативно принимается решение, возможно тепловоз снимается с рейса. Благодаря оперативному сбору и анализу данных, избегаются опасные ситуации связанные с аварийной поломкой.
valeraba
На самом деле ntfs1984 критиковал не вас, а платформу, дороговато это будет для применения в быту. А для промышленной отрасли применяют SCADA, это очень надёжно и практично.
Мой пруфлинк samde.ru/ru/about.html это наверное баловство, зато ESP8266 не дорого стоит.
valexey
А мы ведь еще про потребление энергии даже говорить не начали :-) Сколько эта штука за 173 бакса сможет прожить од пальчиковой батарейки? А от cr3032? А от CR44?
Зато там x86! ;-)
devzona Автор
Погодные аномалии действуют сегодня, что ли?
В статье описывается работа с облаком Intel IoT Analytics. В качестве устройства может выступать не только Intel Edison, а любой другой микроконтроллер. Предмет обсуждения в статье прежде всего Intel IoT Analytics, а не аппаратная часть, тем более не обсуждается вопрос энергопотребления