Умный дом на базе Arduino

Уже некоторое время я экспериментировал с 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *