Начать разбираться с IoT (Internet of Things) платформами меня останавливало отсутствие IoT устройства, которое было бы совместимо по протоколам и способам доступа. Но когда я понял, что в качестве устройства можно использовать обыкновенный смартфон, то реализация работающей цепочки заняла один день.
Возьмем смартфон, который будет эмулировать IoT устройство c датчиками температуры, влажности и давления и отсылать показания на Amazon IoT платформу. На платформе заведем правило, которое при поступлении данных от нашего устройства будет вызывать сервис нотификаций, который в свою очередь будет отсылать e-mail с полученными данными.
Такая система, конечно, несет мало практической ценности, но позволяет разобраться, как все устроено:
![image](https://habrastorage.org/r/w1560/webt/ij/ly/ra/ijlyra3x9uiikctj3b2hboq0lky.png)
Почему именно IoT платформа от Amazon? И зачем вообще нужно понимать, как работают IoT платформы?
В мире становится всё больше IoT устройств, об этом говорят, как аналитические агентства, так и мировая статистика.
Мы и сами прекрасно видим, что все больше систем подключаются к интернету и управляются автоматически или людьми: умные дома, автомобили, носимые устройства. И сейчас уже говорят не просто об IoT, а о IoE (Internet of Everything), т.к. устройства которые подключаются к платформам используются не только в промышленных системах, но и людьми.
Поэтому нужно самим разбираться в принципах работы, хотя бы для того, чтобы понимать, как можно эффективно использовать свои устройства или какие есть ограничения и нюансы с безопасностью.
Amazon создает сервисы с учетом мировых трендов и в результате получаются “универсальные” системы, основные принципы которых используют все производители. У облачной платформы есть еще больший плюс – это возможность самостоятельно развернуть систему за пару часов, не привлекая корпоративную IT службу и безопасность)
При внимательном рассмотрении смартфон хорошо эмулирует IoT устройство:
Т.е. работа с настоящим IoT устройством ничем не будет отличаться от работы со смартфоном, кроме использования специфичного SDK для получения показаний датчиков. Всё остальные коммуникации будут аналогичны.
Позвольте мне пропустить раздел со стандартами, аналитикой и маркетинговыми исследованиями – в конце статьи приведу несколько актуальных ссылок. Не терпится сделать что-нибудь интересное)
Amazon рисует достаточно наглядную схему своей платформы:
![image](https://habrastorage.org/r/w1560/webt/ue/wk/jk/uewkjk6ttxuk2feo1o6u57ddw6q.png)
Тут в общем все понятно:
Начинаем разбираться, схема немного усложняется:
![image](https://habrastorage.org/r/w1560/webt/xb/fc/ha/xbfchaazlaz7fdovwpc4ji9_vr4.png)
Появляются:
Jobs – выполняют стандартные действия над устройствами, например устанавливают приложения, обновляют прошивки, производят перезагрузку устройств и т.п.
Topics – сущности MQTT протокола. Сообщения от IoT устройств посылаются в определенные топики.
IAM Roles – AWS пользователи, от имени которых выполняются правила и которые имеют доступ к необходимым AWS ресурсам.
Правила состоят из:
Certificate – загружаются на IoT устройство, с их помощью происходит аутентификация устройств на AWS платформе. Состоят из:
Policy – к сертификатам прикрепляются политики, которые определяет какие действия можно совершать устройству. С помощью политик происходит авторизация устройств.
Детализируются AWS сервисы, на которые поступает информация с IoT платформы: Аналитика, DB, сервис нотификаций SNS.
Я не буду полностью приводить инструкцию по подключению IoT устройства к Amazon платформе: Getting Started with AWS IoT. Но для понимания объёма задачи перечислю шаги, которые нужно сделать, чтобы схема заработала:
![image](https://habrastorage.org/r/w1560/webt/2h/o8/ue/2ho8ue5x5_yhzrnrsnnjtrckffy.png)
![image](https://habrastorage.org/r/w1560/webt/4o/ee/tg/4oeetg5mctaqsvwtz4ttyjijhuq.png)
![image](https://habrastorage.org/r/w1560/webt/ns/y1/td/nsy1tdkkgu0mnsd_qnepvgtivoq.png)
![image](https://habrastorage.org/r/w1560/webt/tf/ey/gk/tfeygk6-t6-ute_yz1lc13gileu.png)
Теперь создаем само правило (my_iot_dev_rule), которое будет вызывать созданный топик:
![image](https://habrastorage.org/r/w1560/webt/jb/oa/oi/jboaoijc8kczcsj9945mwkeklrw.png)
![image](https://habrastorage.org/r/w1560/webt/no/cs/c0/nocsc02eug99-wj3_qaqrio-vus.png)
Настало время конфигурации IoT устройства, в роли которого будет выступать мой смартфон. Для этого используем инструкцию AWS SDK JavaScript. Чтобы превратить смартфон в IoT устройство надо:
В нашем случае все будет немного проще, т.к. сертификаты, AWS SDK и тестовую программу я положил на GitHub и можно просто клонировать репозиторий IoT-Sensors. Если кто-нибудь захочет использовать мою тестовую программу, то в каталог /IoT/certs надо будет положить свои сертификаты и в файле /server/src/services/IoT-AOI-Server прописать актуальный для устройства Rest API Endpoint:
Rest API Endpoint берется из настроек устройства:
![image](https://habrastorage.org/r/w1560/webt/ez/qw/f8/ezqwf8c8gdenix2uid2ti_7glvg.png)
Если хочется попробовать что-то стандартное, то можно использовать тестовые программы из поставки AWS SDK.
Android — он тот же Linux, но со своими ограничениями, поэтому для запуска JS приложений надо установить специальный терминал, например, Termux.
Для начального освоения Termux есть ряд статей, например: Запуск NodeJS-приложения на Android. Но по большому счету после установки Termux нужно выполнить всего лишь несколько магических команд:
Если все прошло успешно, в терминале появится строка:
Server started on port: 8081
Вживую это выглядит так:
![image](https://habrastorage.org/r/w1560/webt/ro/au/sr/roausridel47hsqstnzchhzvxkc.png)
Если все прошло успешно, в терминале появится строка:
App running at port: 8080
Далее в браузере смартфона вводим: http://localhost:8080
И на экране появится тестовое приложение:
![image](https://habrastorage.org/r/w1560/webt/y1/sl/p4/y1slp4fm0umpkvfpt7ubbbgvrbc.png)
Нажимаем кнопку “INIT DEV”. При этом происходит аутентификация и авторизация IoT устройства на AWS IoT платформе. При успешном выполнении статус становится “Init OK”.
Далее вводим значения показаний датчиков температуры, влажности и давления, например:
Temperature: 23
Humidity: 65
Pressure: 787
И нажимаем кнопку “SEND DATA”.
![image](https://habrastorage.org/r/w1560/webt/i6/3p/tb/i63ptb9lcfyb2e1uo3wmcj2abkc.png)
После этого приложение добавляет метку времени и посылает данные в виде MQTT сообщения в топик “my/dev-topic”. IoT платформа получает сообщение и активирует правило, которое посылает сообщение в сервис нотификаций AWS SNS, который посылает e-mail с полученными данными в JSON формате:
Если сообщение послано успешно, то статус меняется на: “publish OK” и на почту приходит e-mail:
![image](https://habrastorage.org/r/w1560/webt/6m/rx/nt/6mrxntkvis_vv-062gbghlkq1cu.png)
В AWS IoT платформе есть система мониторинга, которая показывает число соединений и сообщений от IoT устройств, статистику по протоколам, типам сообщений и т.п.:
![image](https://habrastorage.org/r/w1560/webt/il/yv/9c/ilyv9ctrbsfmwtnlx3arzwyy6vw.png)
Итак, теперь все работает по-настоящему!
Мы построили маленький, но настоящий IoT, используя платформу от Amazon. Все платформы построены по одинаковым принципам, поэтому если встанет вопрос выбора IoT системы, то мы будем готовы задать следующие вопросы. И дальше, зная ответы от Amazon, сможем сделать выводы, насколько зрелая предлагается платформа:
Устройства
Платформа
Взаимодействие
Как и обещал, приведу несколько актуальных ссылок на стандарты и аналитику:
Как ни удивительно, но гиганты стандартизации (ISO/IEC, IEEE, ITU-T) потеряли интерес к IoT после 2016 года. Они, конечно, что-то делают, но как-то без огонька). NIST тоже выпустил свое исследование Networks of ‘Things’, но после 2016 больше ничего интересного.
Лучше выглядят телекоммуникационные институты, что не удивительно, т.к. без коннективности IoT — это не IoT. TM-Forum под своим зонтиком собирает кейсы и проекты IoE & Digital Ecosystems, ETSI поступил проще и вступил в OneM2M.
И вот мы подходим к двум организациям, которые образовались относительно недавно, но уже определяют мировое направление развитие IoT:
OneM2M
OneM2M – это объединение организаций по стандартизации, телекоммуникационных компаний и производителей разных стран. У них в открытом доступе десятки актуальных документов, которые греют душу архитектурными моделями и функциональными схемами.
IIC
IIC (Industrial Internet Consortium) — организация по стандартизации индустриального интернета вещей — это, в основном, производители софта и устройств. Они также выпускают свои эталонные архитектуры. В общем, есть где посмотреть на идеальный мир! )
Все наши любимые аналитические агентства выпускают исследования по IoT, но не все есть в свободном доступе. Для примера приведу несколько актуальных статей, демонстрирующие оптимистичные прогнозы по развитию IoT:
It's only the beginning!
Возьмем смартфон, который будет эмулировать IoT устройство c датчиками температуры, влажности и давления и отсылать показания на Amazon IoT платформу. На платформе заведем правило, которое при поступлении данных от нашего устройства будет вызывать сервис нотификаций, который в свою очередь будет отсылать e-mail с полученными данными.
Такая система, конечно, несет мало практической ценности, но позволяет разобраться, как все устроено:
![image](https://habrastorage.org/webt/ij/ly/ra/ijlyra3x9uiikctj3b2hboq0lky.png)
Почему именно IoT платформа от Amazon? И зачем вообще нужно понимать, как работают IoT платформы?
M2M – IoT — IoE
В мире становится всё больше IoT устройств, об этом говорят, как аналитические агентства, так и мировая статистика.
Мы и сами прекрасно видим, что все больше систем подключаются к интернету и управляются автоматически или людьми: умные дома, автомобили, носимые устройства. И сейчас уже говорят не просто об IoT, а о IoE (Internet of Everything), т.к. устройства которые подключаются к платформам используются не только в промышленных системах, но и людьми.
Поэтому нужно самим разбираться в принципах работы, хотя бы для того, чтобы понимать, как можно эффективно использовать свои устройства или какие есть ограничения и нюансы с безопасностью.
Почему Amazon?
Amazon создает сервисы с учетом мировых трендов и в результате получаются “универсальные” системы, основные принципы которых используют все производители. У облачной платформы есть еще больший плюс – это возможность самостоятельно развернуть систему за пару часов, не привлекая корпоративную IT службу и безопасность)
Почему смартфон, а не какой-нибудь IoT Starter Kit?
При внимательном рассмотрении смартфон хорошо эмулирует IoT устройство:
- В нём есть Linux, на котором можно запускать приложения;
- Есть мобильная связь с Интернет;
- С помощью программных средств можно эмулировать показания датчиков.
Т.е. работа с настоящим IoT устройством ничем не будет отличаться от работы со смартфоном, кроме использования специфичного SDK для получения показаний датчиков. Всё остальные коммуникации будут аналогичны.
Позвольте мне пропустить раздел со стандартами, аналитикой и маркетинговыми исследованиями – в конце статьи приведу несколько актуальных ссылок. Не терпится сделать что-нибудь интересное)
AWS IoT платформа
Amazon рисует достаточно наглядную схему своей платформы:
![image](https://habrastorage.org/webt/ue/wk/jk/uewkjk6ttxuk2feo1o6u57ddw6q.png)
Тут в общем все понятно:
- (1) Есть устройства, которые взаимодействуют с IoT платформой с помощью SDK.
- (2) Устройства посылают сообщения, которые проверяются службой аутентификации и авторизации.
- (3) Сообщения приходят на Device Gateway, используя разные протоколы и далее попадают в обработчик правил (4.1) и копируются (4.2) на тени устройств (Device Shadows).
- (4.2) Device Shadows – это такие цифровые двойники, которые хранят текущие состояния устройств, которые всегда доступны приложениям. С другой стороны, при отсутствии связи с устройством Device Shadow выполняет управляющие команды от приложений и при восстановлении коннективности синхронизирует актуальное состояние с устройством.
- (4.1) Обработчик правил в зависимости от поступивших данных выполняет заранее определенные действия (5.1), например, сохраняет данные в DB, посылает SMS или e-mail нотификацию, вызывает HTTP API, отправляет данные в систему аналитики и т.п.
- (5.2) Приложения используют эти данные для контроля и управления устройствами с помощью AWS API (6)
- Информация о всех устройствах хранится на AWS IoT платформе (7).
Начинаем разбираться, схема немного усложняется:
![image](https://habrastorage.org/webt/xb/fc/ha/xbfchaazlaz7fdovwpc4ji9_vr4.png)
Появляются:
Jobs – выполняют стандартные действия над устройствами, например устанавливают приложения, обновляют прошивки, производят перезагрузку устройств и т.п.
Topics – сущности MQTT протокола. Сообщения от IoT устройств посылаются в определенные топики.
IAM Roles – AWS пользователи, от имени которых выполняются правила и которые имеют доступ к необходимым AWS ресурсам.
Правила состоят из:
- Filter — фильтр сообщений для обработки. Задается в виде SQL запроса.
- Action — действие, которое надо выполнить.
- Role — одна или несколько IAM ролей.
Certificate – загружаются на IoT устройство, с их помощью происходит аутентификация устройств на AWS платформе. Состоят из:
- Cертификат устройства X.509
- Private key
- Корневой сертификат AWS платформы
Policy – к сертификатам прикрепляются политики, которые определяет какие действия можно совершать устройству. С помощью политик происходит авторизация устройств.
Детализируются AWS сервисы, на которые поступает информация с IoT платформы: Аналитика, DB, сервис нотификаций SNS.
Подключаем устройство
Я не буду полностью приводить инструкцию по подключению IoT устройства к Amazon платформе: Getting Started with AWS IoT. Но для понимания объёма задачи перечислю шаги, которые нужно сделать, чтобы схема заработала:
- Создаем на платформе устройство my-iot-dev
- Получаем сертификат устройства X.509, private key, public key
- Получаем корневой сертификат AWS платформы (Root CA for AWS IoT)
- Создаем политику my-iot-dev-policy. Для нашей демы разрешаем все действия: iot:*
![image](https://habrastorage.org/webt/2h/o8/ue/2ho8ue5x5_yhzrnrsnnjtrckffy.png)
- Прикрепляем политику к сертификату
- Прикрепляем сертификат к устройству
- В результате получили сертификат с устройством и политикой:
![image](https://habrastorage.org/webt/4o/ee/tg/4oeetg5mctaqsvwtz4ttyjijhuq.png)
- Создаем правило. Правило будет вызывать сервис нотификаций AWS SNS (Simple Notification Service) для отправки e-mail. Поэтому сначала надо создать топик в AWS SNS (my-iot-dev-sns-topic):
![image](https://habrastorage.org/webt/ns/y1/td/nsy1tdkkgu0mnsd_qnepvgtivoq.png)
- Теперь конфигурируем, что именно данный топик будет делать при получении данных. Для этого создаем подписку на топик (Subscribe to the Amazon SNS topic), вводим целевой e-mail адрес, дожидаемся проверочного письма, подтверждаем e-mail.
![image](https://habrastorage.org/webt/tf/ey/gk/tfeygk6-t6-ute_yz1lc13gileu.png)
Теперь создаем само правило (my_iot_dev_rule), которое будет вызывать созданный топик:
- Filter: SELECT * FROM ‘my/dev-topic’ — фильтр срабатывает при получении любого сообщения в топике с именем ‘my/dev-topic’;
- Action: посылка сообщения в созданный заранее SNS топик “arn:aws:sns:eu-central-1:1219xxx34064:my-iot-dev-sns-topic”;
- IAM role: создаем роль my-dev-role с доступом к SNS топикам.
![image](https://habrastorage.org/webt/jb/oa/oi/jboaoijc8kczcsj9945mwkeklrw.png)
- Все логические сущности для нашего устройства созданы. Теперь можно протестировать, что теоретически схема работает. Для этого в AWS есть тестовое средство, позволяющее отправлять и получать сообщения аналогично реальным устройствам. Запускаем его, подписываемся на topic (my/dev-topic) и посылаем “Hello World!” сообщение:
![image](https://habrastorage.org/webt/no/cs/c0/nocsc02eug99-wj3_qaqrio-vus.png)
- Проверяем, что пришел e-mail с сообщением “Hello World!” и делаем вывод, что схема работает.
Конфигурация смартфона
Настало время конфигурации IoT устройства, в роли которого будет выступать мой смартфон. Для этого используем инструкцию AWS SDK JavaScript. Чтобы превратить смартфон в IoT устройство надо:
- Скопировать на устройство: private key, X.509 и “Root CA for AWS” сертификаты;
- Установить Node.js и npm package manager;
- Установить AWS SDK;
- Установить и запустить тестовую программу.
В нашем случае все будет немного проще, т.к. сертификаты, AWS SDK и тестовую программу я положил на GitHub и можно просто клонировать репозиторий IoT-Sensors. Если кто-нибудь захочет использовать мою тестовую программу, то в каталог /IoT/certs надо будет положить свои сертификаты и в файле /server/src/services/IoT-AOI-Server прописать актуальный для устройства Rest API Endpoint:
device = deviceModule({
…
host: 'a2lqo1xxx4zydi-ats.iot.eu-central-1.amazonaws.com',
…
})
Rest API Endpoint берется из настроек устройства:
![image](https://habrastorage.org/webt/ez/qw/f8/ezqwf8c8gdenix2uid2ti_7glvg.png)
Если хочется попробовать что-то стандартное, то можно использовать тестовые программы из поставки AWS SDK.
Android — он тот же Linux, но со своими ограничениями, поэтому для запуска JS приложений надо установить специальный терминал, например, Termux.
Для начального освоения Termux есть ряд статей, например: Запуск NodeJS-приложения на Android. Но по большому счету после установки Termux нужно выполнить всего лишь несколько магических команд:
git clone https://github.com/AlexeySushkov/IoT-Sensors.git
Установка сервера
cd ~/IoT-Sensors/server
npm install
npm start
Если все прошло успешно, в терминале появится строка:
Server started on port: 8081
Вживую это выглядит так:
![image](https://habrastorage.org/webt/ro/au/sr/roausridel47hsqstnzchhzvxkc.png)
Установка клиента
cd ~/IoT-Sensors/client
npm install
npm run serve
Если все прошло успешно, в терминале появится строка:
App running at port: 8080
Далее в браузере смартфона вводим: http://localhost:8080
И на экране появится тестовое приложение:
![image](https://habrastorage.org/webt/y1/sl/p4/y1slp4fm0umpkvfpt7ubbbgvrbc.png)
Нажимаем кнопку “INIT DEV”. При этом происходит аутентификация и авторизация IoT устройства на AWS IoT платформе. При успешном выполнении статус становится “Init OK”.
Далее вводим значения показаний датчиков температуры, влажности и давления, например:
Temperature: 23
Humidity: 65
Pressure: 787
И нажимаем кнопку “SEND DATA”.
![image](https://habrastorage.org/webt/i6/3p/tb/i63ptb9lcfyb2e1uo3wmcj2abkc.png)
После этого приложение добавляет метку времени и посылает данные в виде MQTT сообщения в топик “my/dev-topic”. IoT платформа получает сообщение и активирует правило, которое посылает сообщение в сервис нотификаций AWS SNS, который посылает e-mail с полученными данными в JSON формате:
{"time":"Mon, 30 Sep 2019 13:54:52 GMT", "temperature":"23", "humidity":"65", "pressure":"787"}
Если сообщение послано успешно, то статус меняется на: “publish OK” и на почту приходит e-mail:
![image](https://habrastorage.org/webt/6m/rx/nt/6mrxntkvis_vv-062gbghlkq1cu.png)
В AWS IoT платформе есть система мониторинга, которая показывает число соединений и сообщений от IoT устройств, статистику по протоколам, типам сообщений и т.п.:
![image](https://habrastorage.org/webt/il/yv/9c/ilyv9ctrbsfmwtnlx3arzwyy6vw.png)
Итак, теперь все работает по-настоящему!
Заключение
Мы построили маленький, но настоящий IoT, используя платформу от Amazon. Все платформы построены по одинаковым принципам, поэтому если встанет вопрос выбора IoT системы, то мы будем готовы задать следующие вопросы. И дальше, зная ответы от Amazon, сможем сделать выводы, насколько зрелая предлагается платформа:
Устройства
- Как устройства добавляются в системе?
- Как обеспечивается аутентификация и авторизация устройств?
- Происходит ли шифрование отправляемых на платформу данных?
Платформа
- Как защищены ключи и сертификаты на платформе?
- Как формируются правила?
- Какие действия могут выполнять правила?
- Как осуществляется мониторинг и управление устройствами?
- Есть ли тени (цифровые двойники) устройств на платформе?
- Какие отчеты и аналитика доступны?
Взаимодействие
- Какие протоколы для подключения устройств используются?
- Как осуществляется взаимодействие приложений с устройством?
- Как осуществляется тестирование логики взаимодействия?
Как и обещал, приведу несколько актуальных ссылок на стандарты и аналитику:
Стандарты IoT
Как ни удивительно, но гиганты стандартизации (ISO/IEC, IEEE, ITU-T) потеряли интерес к IoT после 2016 года. Они, конечно, что-то делают, но как-то без огонька). NIST тоже выпустил свое исследование Networks of ‘Things’, но после 2016 больше ничего интересного.
Лучше выглядят телекоммуникационные институты, что не удивительно, т.к. без коннективности IoT — это не IoT. TM-Forum под своим зонтиком собирает кейсы и проекты IoE & Digital Ecosystems, ETSI поступил проще и вступил в OneM2M.
И вот мы подходим к двум организациям, которые образовались относительно недавно, но уже определяют мировое направление развитие IoT:
OneM2M
OneM2M – это объединение организаций по стандартизации, телекоммуникационных компаний и производителей разных стран. У них в открытом доступе десятки актуальных документов, которые греют душу архитектурными моделями и функциональными схемами.
IIC
IIC (Industrial Internet Consortium) — организация по стандартизации индустриального интернета вещей — это, в основном, производители софта и устройств. Они также выпускают свои эталонные архитектуры. В общем, есть где посмотреть на идеальный мир! )
Аналитика по IoT
Все наши любимые аналитические агентства выпускают исследования по IoT, но не все есть в свободном доступе. Для примера приведу несколько актуальных статей, демонстрирующие оптимистичные прогнозы по развитию IoT:
- Gartner, про IoT есть в тексте статьи: 5 Trends Appear on the Gartner Hype Cycle for Emerging Technologies, 2019
It's only the beginning!