Уже некоторое время я экспериментировал с Arduino и вот решил начать серьезный проект. Цель — создать подобие умного дома, где вся информация отображается на touch-панели.
Т.к. проект масштабный, то он будет разбит на три больших этапа:
- Отладка работы датчиков температуры и влажности. Настройка работы всех модулей по беспроводной технологии. Отображение информации на touch-панели.
- Расширение системы. Возможность расширения системы на управление светом. Тут уже безграничные возможности, буду делать под себя.
- Шлифовка. Создание нормальных корпусов для модулей, оптимизация питания и т.д. Не голым проводам же валяться.
Ок. Начнем. Для начала нам понадобится следующее:TFT LCD дисплей 2,4″ (у меня от mcufriend.com), куча соединительных проводов для макетной платы (папа-папа и мапа-папа), собственно, Arduino Uno или аналог, для каждой комнаты комплект из датчика температуры и влажности DHT-22, платы Arduino Pro Mini и беспроводного модуля NRF24L01+.
Настройка передачи данных. Идея такова — есть база, которая связана с Интернетом и передает всю информацию в облако, а есть модули с датчиками, которые должны передать информацию на базу. Как организовать общение между ними? Либо модули бродкастят данные с датчиков каждую секунду (минуту или даже час), а база принимает эти данные, либо база сама запрашивает данные у каждого модуля. Идея с бродкастом — легка в реализации, но встает вопрос о сбережении энергии. Например, если собирать данные с датчиков нужно раз в пять минут, зачем задействовать модули wi-fi оставшиеся 4 минуты 58 секунд? Остановимся на варианте c опросом.
Библиотека RF24 — https://github.com/TMRh20/RF24
Подготовка AWI IoT. Необходимо создать пользователя в консоли IAM и сгенерировать ключи, которые имеют следующий формат (пример):
- Access key ID: AKIAIOSFODNN7EXAMPLE
- Secret access key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Их нужно скачать и сохранить у себя. В этой же панели необходимо создать группу, добавить туда пользователя и дать необходимые права. Для полного доступа к IoT необходимы права AWSIoTFullAccess. Это необходимо, чтобы был доступ через CLI. А он нужен, т.к. через панель управления не все можно сделать.
Подготовка Raspberry Pi. Ставим на нее Rasbian Jessie. Как поставить описано в документации к Raspberry Pi. Выставляем корректный часовой пояс. Базовые настройки описаны в статье «Как поднять Debian сервер под хостинг 1С-Битрикс» в разделе «Начальная настройка и подготовка сервера» (за исключением добавления новых репозиториев).
Далее необходимо установить AWS CLI:
$ wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
Проверить установку можно командой:
$ aws help
Первоначальная настройка:
$ aws configure
Вводим полученные ранее ключи и регион (например, у меня Oregon — us-west-2)
Все управление на себя берет node.js, который будет связывать всю нашу внутреннюю инфраструктуру сенсоров с облаком AWS IoT. Ставим node.js:
$ sudo apt-get install nodejs
Общие принципы AWS IoT
В AWS IoT любой элемент именуется словом Thing (для простоты буду называть «Элемент»). Все Элементы хранятся в специальном реестре. У Элемента могут быть до трех атрибутов в виде пары ключ:значение. У меня это Местоположение и Модель.
Собственно, чтобы добавить Элемент через CLI необходимо выполнить следующую команду:
$ aws iot create-thing --thing-name ""
Например,
$ aws iot create-thing --thing-name "Temp01"
Для просмотра всех доступных Элементов, можно воспользоваться следующей командой:
$ aws iot list-things
Все коммуникации между отдельными Элементами и IoT осуществляются по защищенному соединению с помощью сертификата X.509. Сертификат необходимо создать и активировать прежде чем его можно будет использовать:
$ aws iot create-keys-and-certificate --set-as-active
Результатом выполнения команды будет сертификат, открытый и закрытые ключи. Их надо сохранить в отдельные .pem файлы, предварительно удалив все ‘n’. И сохраняем сертификат:
$ aws iot describe-certificate --certificate-id --output text --query certificateDescription.certificatePem > cert.em
Что и Как может делать Элемент с выданным сертификатом определяется политиками IoT. Естественно, данные политики необходимо создавать и привязывать к сертификатам.
Создаем файл policy со следующим содержанием:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action":["iot:*"],
"Resource": ["*"]
}]
}
И создаем политику:
$ aws iot create-policy --policy-name "" --policy-document
Чтобы привязать ее к сертификату, нужно выполнить команду:
$ aws iot attach-principal-policy --principal "" --policy-name ""
certificate-arn можно узнать либо через консоль IoT в свойствах у сертификата, либо выполнив команду
$ aws iot list-certificates
И последнее, что необходимо сделать — это привязать сертификат к Элементу:
$ aws iot attach-thing-principal --thing-name "" --principal ""
Если не хочется во всем разбираться, то все это можно сделать через консоль IoT.