cloud IoT
В статье дается краткое описание облака 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. Для каждого устройства задаются дополнительные атрибутивные поля. Устройств может быть несколько. К каждому устройству привязывается компонент. Компонент является датчиком для отправки данных в облако или управляющим объектом.

Концептуально структура данных выглядит так:
Intel IoT Analytics

Для каждого компонента определяется его тип:
Intel IoT Analytics

Отправка и получение данных осуществляется в JSON формате
Пример:
POST dashboard.us.enableiot.com/v1/api/data:deviceId
{
«accountId»: ”",
«data»: [
{
«componentId»: ”",
«on»: 1412456872000,
«value»:«1.23»
}
],
«on»: 1412456872000
}
Для демонстрации возьмем стенд из предыдущего поста Intel Edison. Первый запуск. Будем отправлять в облако данные с датчиков: температура, атмосферное давление, уровень влажности почвы в горшке с цветком.

Практическая часть состоит из трех этапов:
  1. Создание учетной записи на портале Intel IoT Analytics. Создание типов датчиков
  2. Настройка Intel Edison и регистрация устройства на портале
  3. Написание Arduino-кода

Создание учетной записи на портале Intel IoT Analytics. Создание типов датчиков
1. Выполним регистрацию на портале Intel IoT Analytics. Можно использовать OAuth
Intel IoT Analytics
2. Укажем свое название облака
Intel IoT Analytics
3. Панель управления. Пока нет ни одного устройства
Intel IoT Analytics
4. Теперь требуется выполнить регистрацию типов датчиков на портале. Перейдем в раздел Account. Для начала уже зарегистрировано несколько типов датчиков.
Intel IoT Analytics
5. Откроем датчик Temperature
Intel IoT Analytics
Укажем минимальную температуру 0, максимальную 40.
Intel IoT Analytics
Сохраним изменения. И после сохранения, автоматически добавится инкремент к версии датчика.
Intel IoT Analytics
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
Заполним поля
Intel IoT Analytics
7. И третий датчик — влажность почвы. Значение указывается в процентах. Где 0 — соответствует состояние абсолютной сухости. 100 — датчик погружен в воду.
В отличие от выше указанных типов Float и Integer, укажем тип Percentage. Название типа не должно содержать пробелов.
Intel IoT Analytics
На этом работу с порталом закончим, позже к нему вернемся.

Настройка 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 IoT Analytics

Прошивка до последней версии Intel Edison
Рекомендуется обновить Intel Edison, до последней версии прошивке. Инструкцию и бинарные файлы прошивки доступны по адресу Flashing Intel Edison (wired) — Windows.
2. Для первоначальной настройки выполним команду:
# configure_edison --setup
2.1 Укажем новый пароль. 8 -32 символа
Intel IoT Analytics
2.2 Зададим имя устройства Intel Edison, — edison_habr(не менее 5 символов), и ответим утвердительно на вопрос подключению к Wi-Fi
Intel IoT Analytics
2.3 В течение 10 секунд будет произведено сканирование точек доступа. По результатам сканирование необходимо выбрать точку доступа для подключения
Intel IoT Analytics
Выбираем точку доступа под номером 5 — “FSB”
2.4 Указываем пароль, и получаем IP адрес по DHCP
Intel IoT Analytics
2.5 Теперь по адресу 192.168.1.44 можно зайти и увидеть страницу:
Intel IoT Analytics
Настройка сети на этом этапе завершается
3. Выполним тест для агента iotkit
# iotkit-admin test
Intel IoT Analytics
Тест подключения к облаку пройден успешно.
4. Узнаем ID устройства по команде.
# iotkit-admin device-id
Intel IoT Analytics
Команда на изменения ID устройства на произвольный:
# iotkit-admin set-device-id YOUR_DEVICE_ID
5. Регистрация устройства
5.1 Для регистрации перейдем на портал dashboard.us.enableiot.com, раздел My account, вкладка Details
Получим код из строки Activation Code
Intel IoT Analytics
5.2 Перейдем на Intel Edison и выполним регистрацию устройства командой
# iotkit-admin activate [код активации с портала]
Intel IoT Analytics
5.3 Вернемся на портал dashboard.us.enableiot.com, раздел Devices. В списке устройств появится Intel Edison.
Intel IoT Analytics
Выбрав устройство, откроется страница редактирования параметров. И в поле Status — изменило значение на active.
Intel IoT Analytics
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
Intel IoT Analytics

Командой iotkit-admin observation, отправим первое тестовое значений — 21
# iotkit-admin observation temperature1 21
6.2 Теперь на портале отображаются подключенные датчики
Intel IoT Analytics

Команды для управления агентом
# 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), где можно просмотреть показания датчиков в режиме реального времени.
Intel IoT Analytics

Подведем краткий итог. Используя облако Cloud Intel IoT Analytics, разработчики устройств могут легко отправлять данные со своего устройства. Форматы REST и JSON достаточно популярны. Функции доступа API опубликованы на Github. Сервис всегда доступен в сети Интернет, а значит, не требуется развертывать свой сервер для сбора и хранения данных. С Cloud Intel IoT Analytics может взаимодействовать практически любое устройство с поддержкой Ethernet и SSL, по стандарту REST API.

Ссылки
  1. github.com — enableiot
  2. Edison Getting Started Guide — Windows
  3. Flashing Intel Edison (wired) — Windows
  4. Cloud Intel IoT Analytics
  5. Intel Internet of Things (IoT) Developer Kit IoT Cloud-Based Analytics User Guide November 2014

Комментарии (7)


  1. ntfs1984
    01.06.2015 18:05
    +2

    Статью следовало бы начать словами «Покупаем Intel Edison — 77 долларов. Покупаем Breakboard к нему — 96 долларов. А ниже мы расскажем, как отправить POST запрос на сайт с девайса стоимостью 173 бакса».

    Пару строк возмущения
    А где подключение датчика? Какие датчики используются? Картинки? Преимущества и недостатки?
    ИМХО, но мне кажется, IoT-ры сами найдут как и куда отправить свои данные. Вот я например делаю точно то же самое, что в этой статье (и еще несколько других вещей) на 4-хбаксовой ESP8266.


    1. devzona Автор
      01.06.2015 18:23
      -1

      Свои возмущения пишите в следующий раз в личику. Что вы привязались к стоимости. Прочтите внимательно заголовок — Работа с облаком Intel IoT Analytics: регистрация и отправка данных. И статью следовало то же читать, прежде чем писать вопросы «Какие датчики используются?»:

      Для демонстрации возьмем стенд из предыдущего поста Intel Edison. Первый запуск. Будем отправлять в облако данные с датчиков: температура, атмосферное давление, уровень влажности почвы в горшке с цветком.

      Вот я например делаю точно то же самое, что в этой статье (и еще несколько других вещей) на 4-хбаксовой ESP8266.
      ntfs1984 жду с нетерпением пруфлинк на ваши работы, с отправкой данных в облако, уровня не ниже Intel IoT Analytics


      1. ntfs1984
        01.06.2015 18:31

        ntfs1984 жду с нетерпением пруфлинк на ваши работы, с отправкой данных в облако, уровня не ниже Intel IoT Analytics
        С удовольствием, после того как вы мне объясните, зачем отправлять данные в облако, тем более два числа температуры\давления?


        1. devzona Автор
          01.06.2015 18:43
          +2

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


          1. valeraba
            01.06.2015 20:16

            На самом деле ntfs1984 критиковал не вас, а платформу, дороговато это будет для применения в быту. А для промышленной отрасли применяют SCADA, это очень надёжно и практично.
            Мой пруфлинк samde.ru/ru/about.html это наверное баловство, зато ESP8266 не дорого стоит.


    1. valexey
      01.06.2015 18:24

      А мы ведь еще про потребление энергии даже говорить не начали :-) Сколько эта штука за 173 бакса сможет прожить од пальчиковой батарейки? А от cr3032? А от CR44?

      Зато там x86! ;-)


      1. devzona Автор
        01.06.2015 18:33

        Погодные аномалии действуют сегодня, что ли?

        В статье дается краткое описание облака Intel IoT Analytics, предназначенное для сбора данных и управления устройств. Рассмотрена практическая работа с облаком на примере Intel Edison(Intel Edison. Первый запуск).

        В статье описывается работа с облаком Intel IoT Analytics. В качестве устройства может выступать не только Intel Edison, а любой другой микроконтроллер. Предмет обсуждения в статье прежде всего Intel IoT Analytics, а не аппаратная часть, тем более не обсуждается вопрос энергопотребления
        Облако взаимодействует с устройствами по протоколу REST. Поэтому можно обеспечить работу с облаком для любого устройства, которое поддерживает Ethernet и SSL(все данные отправляются только в зашифрованном виде)