Расскажем о том, как подключить шлюз Intel для интернета вещей к Amazon Web Services (AWS) и приступить к созданию приложений, рассчитанных на работу с этой платформой, с использованием Node-RED и Python. В итоге мы придём к решению, в котором шлюз будет передавать в облако данные, используя протокол MQTT.
Для того, чтобы опробовать на практике то, о чём пойдёт речь, вам понадобится шлюз Intel для интернета вещей с IDP 3.1 или выше, подключённый к интернету, и компьютер, с которого можно организовать терминальный доступ к шлюзу.
Если ваш шлюз нуждается в настройке, обратитесь к этому материалу.
Начнём с подготовки шлюза и AWS к совместной работе.
Установим на шлюз репозиторий IoT Cloud.
Здесь рассмотрим шаги, необходимые для того, чтобы оснастить шлюз поддержкой служб Amazon Web Services.
Настроим параметры учётной записи в Amazon Web Services. Это понадобится для подключения к облаку.
Рекомендовано подключиться к шлюзу по SSH или пользоваться командной строкой с помощью интерфейса IoT Gateway Developer Hub для того, чтобы удобно было копировать команды. Если вы работаете с командной строкой, подключившись к шлюзу напрямую, используя монитор и клавиатуру, вам, в следующем разделе, придётся вручную вводить ключ доступа и секретный ключ.
На данном этапе, после настройки шлюза, можно заниматься обменом данными с AWS. Сейчас рассмотрим два варианта взаимодействия шлюза и облака: с использованием Node-RED и Python. Если вам интересна лишь одна из вышеупомянутых платформ разработки приложений, вы вполне можете прочесть лишь раздел, посвящённый ей.
Для того, чтобы приступить к работе в среде Node-RED, нужно убедиться в том, что вы пользуетесь свежей версией ОС. Для работы с AWS требуется Node-RED 0.14.x.
Контролировать взаимодействие AWS и шлюза можно с помощью консоли AWS.
Для того, чтобы открыть окно Node-RED, нужно, в IoT Gateway Developer Hub, перейти в раздел Administration. Здесь, под значком Node-RED, надо щёлкнуть по кнопке Launch.
Запуск Node-RED
Отправку данных в AWS с использованием Node-RED мы наладили. Займёмся теперь организацией того же процесса с использованием Python.
После того как шлюз настроен на взаимодействие с AWS, можно подготовить его к работе с облаком с использованием Python-скриптов. Существует немало примеров таких скриптов, их можно использовать в учебных целях и для тестирования системы.
Облачная часть играет важнейшую роль во множестве IoT-систем. Теперь, освоив это руководство, вы можете подключать IoT-шлюзы Intel к Amazon Web Services и создавать, в среде Node-RED или на Python, приложения, которые могут работать с облачными службами.
Для того, чтобы опробовать на практике то, о чём пойдёт речь, вам понадобится шлюз Intel для интернета вещей с IDP 3.1 или выше, подключённый к интернету, и компьютер, с которого можно организовать терминальный доступ к шлюзу.
Если ваш шлюз нуждается в настройке, обратитесь к этому материалу.
Подготовка шлюза и AWS
Начнём с подготовки шлюза и AWS к совместной работе.
▍Установка репозитория IoT Cloud на шлюз
Установим на шлюз репозиторий IoT Cloud.
- Войдите в консоль шлюза, используя либо монитор и клавиатуру, подключённые к нему напрямую, либо, и лучше поступить именно так, по SSH с удалённого компьютера.
- Добавьте ключ GPG для облачного репозитория, введя следующую команду:
rpm --import http://iotdk.intel.com/misc/iot_pub.key
- На компьютере откройте браузер, и, введя IP-адрес шлюза в адресную строку, подключитесь к Intel IoT Gateway Developer Hub. Для того, чтобы выяснить IP-адрес шлюза, можно воспользоваться командой
ifconfig
.
- Войдите в IoT Gateway Developer Hub, использовав данные вашей учётной записи. Стандартные имя пользователя и пароль – root.
Вход в IoT Gateway Developer Hub
- Добавьте в систему репозиторий IoT Cloud.
Добавление репозитория IoT Cloud
- Перейдите в раздел Packages и щёлкните по кнопке Add Repo +.
Настройка параметров репозитория
- Заполните поля появившегося окна следующим образом:
Name: IoT_Cloud
URL: iotdk.intel.com/repos/iot-cloud/wrlinux7/rcpl13
Затем щёлкните по кнопке Add Repository.
- И, наконец, щёлкните по кнопке Update Repositories для того, чтобы обновить список пакетов.
▍Настройка поддержки AWS на шлюзе
Здесь рассмотрим шаги, необходимые для того, чтобы оснастить шлюз поддержкой служб Amazon Web Services.
- Щёлкните по кнопке Add Packages +. Это вызовет список пакетов, которые можно установить.
Начало процесса установки пакета
- Выполните поиск по ключевой фразе cloud-aws, введя её в поле, расположенное в верхней части окна добавления нового пакета. Затем, когда нужный пакет будет найден, щёлкните по кнопке Install, которая расположена правее записи packagegroup-cloud-aws.
Установка пакета
▍Настройка пользователя в AWS
Настроим параметры учётной записи в Amazon Web Services. Это понадобится для подключения к облаку.
- В браузере перейдите по адресу консоли AWS и войдите в свою учётную запись Amazon Web Sevices.
- Настройте политику AWSIoTFullAccess.
Настройка разрешений для учётной записи AWS
- Щёлкните по имени учётной записи в правой верхней части окна и выберите команду Security Credentials из выпадающего меню.
Предупреждающая надпись о доступе к параметрам безопасности
Если вы увидите всплывающее сообщение, показанное на рисунке выше, щёлкните по кнопке Continue to Security Credentials.
- В левой части окна щёлкните по ссылке Users для того, чтобы вывести список пользователей в вашей учётной записи AWS. Если пользователей в списке нет, щёлкните по кнопке Create New Users, введите имя нового пользователя и щёлкните по кнопке Create. После этого запись созданного пользователя появится в списке.
Добавление нового пользователя к учётной записи AWS
- Щёлкните по имени пользователя для вывода страницы со сведениями о нём. Выберите вкладку Permissions и щёлкните по кнопке Attach Policy.
Начало назначения политики безопасности для пользователя
- Найдите в списке политику AWSIoTFullAccess. Поставьте флажок в поле напротив названия политики и щёлкните по кнопке Attach Policy для того, чтобы назначить её пользователю.
Назначение политики безопасности пользователю
- Создайте ключ доступа для устройства.
- Вернитесь на экран сведений о пользователе и щёлкните по кнопке Create Access Key на вкладке Security Credentials.
Создание ключа доступа для устройства
После этого появится окно, в котором содержится уникальная для каждого пользователя ключевая пара. Ключ, который выводится в поле Secret Access Key, показывают лишь один раз, после закрытия окна его больше не увидеть. Это означает, что вам понадобится сгенерировать новый ключ для повторного доступа к системе, если старый, после того, как он был создан, вы нигде не сохранили.
Создание ключа доступа
Внимание! Не закрывайте это окно до тех пор, пока не выполните действия, описанные в следующем разделе.
▍Настройка шлюза
Рекомендовано подключиться к шлюзу по SSH или пользоваться командной строкой с помощью интерфейса IoT Gateway Developer Hub для того, чтобы удобно было копировать команды. Если вы работаете с командной строкой, подключившись к шлюзу напрямую, используя монитор и клавиатуру, вам, в следующем разделе, придётся вручную вводить ключ доступа и секретный ключ.
- Добавьте учётные данные пользователя на шлюзе. Для этого введите следующую команду:
aws configure
В ответ на неё система предложит ввести следующее:
- AWS Access Key ID: Только что сгенерированный Access Key ID, ключ доступа.
- AWS Secret Access Key: Secret Access Key, секретный ключ, который соответствует сгенерированному ключу доступа.
- Регион по умолчанию: здесь можно найти список регионов (например, eu-west-1)
- Формат вывода по умолчанию: здесь подойдут стандартные настройки, поэтому нажмите Enter.
- Создайте «вещь», привязанную к вашему экземпляру AWS. Для этого введите на шлюзе следующие команды:
aws iot create-thing --thing-name gateway-test-01
Если добавление «вещи» прошло успешно, в консоль будут выведены сведения, напоминающие те, что показаны на рисунке ниже.
Успешное создание «вещи»
- Задайте разрешения. Для этого введите в консоли следующие команды для того, чтобы создать новую политику разрешений для вашего экземпляра AWS.
aws iot create-policy --policy-name gateway-policy --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action":["iot:*"], "Resource": ["*"] }] }'
Об успешном добавлении политики можно узнать по сообщению в консоли.
Успешное добавление политики
- Создайте ключи и сертификат для «вещи». Для этого нужно ввести следующие команды, которые создадут ключи и сертификаты, необходимые для организации взаимодействия с AWS.
wget -O rootCA.pem https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile cert.pem --private-key-outfile privkey.pem
Если всё идёт как надо, в консоли появятся сообщения, напоминающие те, что показаны ниже. За ними будет идти большой фрагмент JSON-данных. Для того, чтобы продолжить работу, нам нужен лишь параметр certificateArn, который находится в самом начале.
Успешное добавление ключей и сертификатов
- Теперь надо связать политику и сертификат. Для этого воспользуйтесь следующей командой:
aws iot attach-principal-policy --policy-name ${POLICY_NAME} –principal ${CERTIFICATE_ARN}
Проверьте, верно ли введено имя политики (например, gateway-policy) и значение certificateArn, полученное на предыдущем шаге. Выглядеть всё это может так:
aws iot attach-principal-policy --policy-name gateway-policy --principal arn:aws:iot:eu-west-1:681450608718:cert/122c86b84c6e0b919353882c03ca37385855897e16804438a20d44b3f9934cb3
- Проверьте устройство в консоли AWS IoT. Для этого перейдите к домашнему экрану консоли, щёлкнув по значку AWS в левой верхней части страницы. Затем проверьте, чтобы в верхнем правом углу был выбран тот регион, который использован при настройке шлюза (например, Ireland). Теперь щёлкните по значку службы AWS IoT в списке.
Домашний экран AWS, переход к AWS IoT
Теперь в панели управления AWS IoT должна быть видна только что созданная «вещь», а также политика и сертификат, настройкой которых мы занимались выше.
Панель управления AWS
На данном этапе, после настройки шлюза, можно заниматься обменом данными с AWS. Сейчас рассмотрим два варианта взаимодействия шлюза и облака: с использованием Node-RED и Python. Если вам интересна лишь одна из вышеупомянутых платформ разработки приложений, вы вполне можете прочесть лишь раздел, посвящённый ей.
Взаимодействие с AWS IoT. Node-RED
Для того, чтобы приступить к работе в среде Node-RED, нужно убедиться в том, что вы пользуетесь свежей версией ОС. Для работы с AWS требуется Node-RED 0.14.x.
▍Настройка AWS
Контролировать взаимодействие AWS и шлюза можно с помощью консоли AWS.
- В консоли AWS IoT щёлкните по ссылке MQTT Client, которая расположена в верхней правой части окна.
Ссылка MQTT Client
- В окне MQTT Client введите имя «вещи», которое назначали ранее (например, gateway-test-01) и щёлкните по кнопке Connect.
Подключение к «вещи»
Если AWS может взаимодействовать со шлюзом, сообщение о состоянии соединения изменится на Connected и окрасится в зелёный цвет.
Состояние подключения шлюза к AWS
- Щёлкните по ссылке Subscribe to topic в группе MQTT Client Actions.
Начало процесса подписки на MQTT-тему
- В поле Subscription topic введите
sdk/test/nodered
и щёлкните по кнопке Subscribe.
Подписка на тему
Теперь сообщения, опубликованные шлюзом в теме sdk/test/nodered, будут появляться в окне сообщений.
Окно просмотра сообщений, полученных от шлюза
▍Загрузка интерфейса Node-RED
Для того, чтобы открыть окно Node-RED, нужно, в IoT Gateway Developer Hub, перейти в раздел Administration. Здесь, под значком Node-RED, надо щёлкнуть по кнопке Launch.
Запуск Node-RED
▍Настройка блок-схемы приложения
- Перетащите на текущий лист узлы mqtt и inject из панели узлов, которая расположена слева. Если нужного узла не видно, прокрутите панель.
Узлы inject и mqtt
- Расположите узлы в окне и соедините их так, как показано на рисунке ниже. Здесь имеется узел inject, переименованный в timestamp, который будет, с заданным интервалом, отправлять сведения о текущем времени узлу mqtt. Узел mqtt отвечает за отправку полученных данных MQTT-брокеру. В данном случае это будет AWS IoT. После того, как узлы размещены на блок-схеме и связаны, их надо настроить.
Схема расположения и связи узлов в Node-RED
- Для настройки узла inject (который, в итоге, стал узлом timestamp), нужно сделать по нему двойной щелчок, который вызовет диалоговое окно. Его надо привести в соответствие рисунку, показанному ниже, и нажать на кнопку Done. Благодаря этим настройкам узел будет отправлять данные каждые 5 секунд.
Настройка узла inject
- Для настройки узла mqtt выполните по нему двойной щелчок, после чего, в окне настроек, щёлкните по кнопке редактирования у поля Server.
Начало настройки узла mqtt
- Заполните поля настройки MQTT-подключения так, как показано на рисунке ниже. Вам понадобится ввести собственный URL сервера. Сейчас вы узнаете о том, где его взять.
Настройка узла mqtt, ввод сведений о сервере
- Введите следующую команду для того, чтобы получить адрес сервера для передачи сообщений AWS.
aws iot describe-endpoint
В ответ на неё в консоль будут выведены сведения об адресе. А именно, параметр endpointAddress и будет содержать адрес сервера, который нужен нам для настройки MQTT-подключения.
Адрес сервера в консоли
Скопируйте URL, размещённый в кавычках, и вставьте его в поле Server. Обратите внимание на то, что поле Port должно быть пустым.
Теперь надо настроить параметры безопасности соединения. Прежде чем это сделать, нужно установить флаг Enable secure (SSL/TLS) connection, после чего щёлкнуть по значку Edit в конце раздела TLS Configuration.
- В окне, показанном ниже, надо настроить параметры. А именно, в них нужно указать пути к сгенерированным ранее файлам ключей и сертификатов.
Настройка путей к файлам ключей и сертификатов
- В поле Certificate нужно ввести путь к файлу
cert.pem
, который был сгенерирован ранее.
- В поле Private Key – путь к
privkey.pem
. Этот файл так же был сгенерирован.
- В поле CA Certificate – путь к файлу
rootCA.pem
, который должен был быть загружен.
Все сертификаты и ключи должны храниться в одной и той же директории. По умолчанию, если вы ничего не меняли, подключившись к шлюзу, это /root.
Вот как выглядят заполненные поля из нашего примера.
Заполненные поля путей к файлам ключей и сертификатов
- В поле Certificate нужно ввести путь к файлу
- После того, как завершите настройку, щёлкните по кнопке Add для того, чтобы сохранить конфигурацию TLS. Экран настройки должен выглядеть примерно так, как показано на рисунке ниже.
Завершение настройки
- Теперь почти всё готово. Осталось лишь ввести имя темы, в которую планируется отправлять сообщения. Введённая тема должна соответствовать той, на которую мы подписались ранее, настраивая MQTT-клиент в панели управления AWS, поэтому нужно ввести в поле Topic строку
sdk/test/nodered
и щёлкнуть по кнопке Done.
Настройка MQTT-темы
Теперь приложение Node-RED настроено и готово к развёртыванию.
▍Развёртывание и проверка приложения
- Щёлкните по кнопке Deploy в правом верхнем углу окна Node-RED. Если появится окно запроса на подтверждение развёртывания, нажмите в нём кнопку Confirm deploy.
Развёртывание приложения Node-RED
Если узел MQTT был успешно сконфигурирован, ниже него можно будет видеть зелёный индикатор с надписью connected.
Состояние узла mqtt
- Для того, чтобы окончательно убедиться в том, что всё работает правильно, вернитесь к окну сообщений клиента MQTT в панели управления AWS. Там должны появиться новые сообщения.
Новые сообщения в окне MQTT-клиента AWS
Отправку данных в AWS с использованием Node-RED мы наладили. Займёмся теперь организацией того же процесса с использованием Python.
Взаимодействие с AWS IoT. Python
После того как шлюз настроен на взаимодействие с AWS, можно подготовить его к работе с облаком с использованием Python-скриптов. Существует немало примеров таких скриптов, их можно использовать в учебных целях и для тестирования системы.
▍Настройка AWS
- В консоли AWS IoT щёлкните по ссылке MQTT Client, которая расположена в правой верхней части окна программы.
Ссылка MQTT Client
- В окне MQTT Client введите имя «вещи», назначенное шлюзу ранее (например, gateway-test-01) и щёлкните по кнопке Connect.
Подключение к «вещи»
Если AWS может взаимодействовать со шлюзом, сообщение о состоянии соединения изменится на Connected и окрасится в зелёный цвет.
Состояние подключения шлюза к AWS
- В разделе MQTT Client Actions щёлкните по пункту Subscribe to topic
Начало подписки на тему MQTT
- В поле Subscription topic введите
sdk/test/Python
и щёлкните по кнопке Subscribe.
Настройка подписки на тему MQTT
Сообщения, полученные со шлюза, можно будет просмотреть в окне сообщений.
Окно сообщений
▍Отправка сообщения со шлюза
- Для того, чтобы узнать адрес сервера, необходимый для отправки MQTT-сообщений со шлюза, выполните следующую команду:
aws iot describe-endpoint
В ответ вы получите значение параметра endpointAddress, которое и содержит то, что нам нужно. Скопируйте строку адреса, размещённую в кавычках.
Адрес сервера
- Перейдите в папку, которая содержит примеры работы с AWS. Например, в нашем случае для этого потребовалась такая команда:
cd /usr/share/awsiotsdk/samples/python/
- Запустите один из примеров кода, воспользовавшись командой такого вида:
python basicPubSub.py -e [ENDPOINT] -r [ROOTCA_PATH] -c [CERT_PATH] –k [PRIVATE_KEY_PATH]
Вот как задать параметры вызова скрипта:
- ENDPOINT: Адрес сервера, который вы выяснили выше.
- ROOTCA_PATH: Путь к загруженному ранее файлу rootCA.pem.
- CERT_PATH: Путь к сгенерированному ранее файлу cert.pem.
- PRIVATE_KEY_PATH: Путь к сгенерированному ранее файлу privkey.pem.
Файлы сертификатов и ключей должны быть расположены в одной и той же директории. По умолчанию это /root или $HOME, если вы ничего не меняли, подключившись к шлюзу.
В нашем случае вышеописанная команда выглядела так:
python basicPubSub.py -e a1gx5hswnkj6kf.iot.eu-west-1.amazonaws.com -r $HOME/rootCA.pem -c $HOME/cert.pem -k $HOME/privkey.pem
Если приложение-пример заработало, в консоль будут выводится данные, вроде тех, что показаны на рисунке ниже. Это указывает на то, что MQTT-сообщения отправляются в тему sdk/test/Python.
Сообщения от Python-скрипта
- Для того, чтобы проверить, действительно ли AWS эти сообщения получает, нужно вернуться к окну сообщений на сайте AWS. Там должны появляться новые сообщения.
Новые сообщения, отправленные со шлюза
В результате на шлюзе, подключённом к AWS IoT, можно исполнять Python-скрипты, взаимодействующие с облаком.
Выводы
Облачная часть играет важнейшую роль во множестве IoT-систем. Теперь, освоив это руководство, вы можете подключать IoT-шлюзы Intel к Amazon Web Services и создавать, в среде Node-RED или на Python, приложения, которые могут работать с облачными службами.