Отправляем и визуализируем данные с платы Intel Galileo/Edison в облаке Azure
Привет!
В понедельник мы писали про то, как мы видим Интернет Вещей — с облаком, которое можно использовать для обработки различного рода данных, а также нашей новой операционной системой Windows 10, которую можно установить на Raspberry Pi 2 или Intel Minnowboard. В среду коллега из технологического центра Microsoft рассказал про то, как они делают умный офис. Вчера @shwars написал колонку про то, как подключить Arduino к Raspberry Pi2. Сегодня я расскажу немного о процессе подключения Intel Galileo & Edison к Microsoft Azure, отправке простых данных и их визуализации с помощью сервисов Azure. На следующей неделе — опыте установки Windows 10 IoT на Minnowboard MAX.
Начнём с Galileo. О Galileo много писали в блоге Intel (раз, два), много раз писали наши коллеги (например, Сергей Байдачный), поэтому сконцентрируюсь только на практической части, опробованной нами на наших и Intel-хакатонах.
Для того, чтобы подключить Galileo к компьютеру, есть несколько опций — Ethernet, USB и отладочный 6-пиновый кабель. Самым простым и доступным является подключение по Ethernet.
Проблемой является то, что по умолчанию сеть на Galileo не настраивается, и увидеть ее даже после подключения кабелем не получится.
Есть два решения этой проблемы:
- Подключить Galileo к роутеру, который раздаст ей IP-адрес (по Ethernet или Wi-Fi). Это самый удобный и функциональный способ — плата сможет выходить в интернет.
- Подключить плату к компьютеру и раздать ей IP-адрес с помощью собственного DHCP-сервера. Можно использовать OpenDHCPServer. Для его настройки необходимо сконфигурировать интерфейс, к которому будет подключаться Galileo, на статический адрес (например, 192.168.0.1) и добавить этот адрес для прослушки в конфигурацию OpenDHCPServer, после чего запустить его как сервис либо standalone. В этом случае для того, чтобы плата увидела интернет, нужно проводить дополнительные настройки.
После получения IP-адреса можно подключиться к плате по SSH. Если у вас Edison, то всё проще — достаточно вызвать ./configure
На Galileo по умолчанию установлен образ Yocto Linux, который имеет свою специфику, но поставить на него необходимое ПО можно. Можно еще поставить Windows 8. Windows 10 для Galileo&Edison нет.
Для этого нужно подключиться по SSH.
Мы будем использовать Putty.
- Первым шагом надо определить IP-адрес машины. Если подключили к роутеру, можно посмотреть на администраторской панели роутера, какой IP-адрес был роздан DHCP. Если OpenDHCPServer, то в консоли увидите, что IP роздан.
- Вводим нужные данные.
Логин root, пароля по умолчанию нет.
Начинаем настраивать экосистему. Будем использовать Python и устанавливать Azure SDK for Python, но вы можете установить любой другой доступный SDK либо самостоятельно написать необходимый код.
Загружаем Azure SDK for Python:
git clone https://github.com/Azure/azure-sdk-for-python.git
cd azure-sdk-for-python/
python setup.py install
Устанавливаем актуальную дату:
rdate -s time.nist.gov
(надо выполнять, чтобы не получить ошибки 401
ExpiredToken: при отправке сообщения в очередь Azure)
Устанавливаем и обновляет необходимый софт:
opkg update
opkg install openssl
opkg install curl
Устанавливаем менеджер пакетов PIP — он понадобится для удобного управления модулями Python.
Процесс установки может быть достаточно долгим (около 5–10 минут), при этом может быть не виден. Не обрывайте его.
curl https://bootstrap.pypa.io/get-pip.py -k | python
Создадим файл для нашего примера. Данная очередь предназначена для тестирования.
from azure.servicebus import ServiceBusService,Message, Queue
import base64
service_namespace = 'demostand-ns'
key_name = 'AuthRead'
key_value = 'ax2UKT7ppf0ti8uslO8p+HSF4qfprqLKTdY893Io+to='
queue_name = 'galileo'
message = Message(base64.b64encode('Hello World'))
sbs = ServiceBusService(service_namespace,
shared_access_key_name=key_name,
shared_access_key_value=key_value)
sbs.send_queue_message(queue_name,message)
Если вы хотите создать новую очередь, вам нужно создать новый аккаунт Microsoft Azure и очередь Service Bus Queue. В пространстве имен можно создавать другие очереди и др.
Перейдите на страницу созданной очереди.
Нажмите «Сведения для подключения».
Для того, чтобы взаимодействовать с очередью, нам нужно создать правило доступа. Нажмите на «Щелкните здесь для настройки».
Введите в нижний блок название правила fullaccess, после чего выберите уровень доступа «Управление» — полный доступ к очереди. Нажмите «Сохранить».
Снова нажмите на «Сведения для подключения» и скопируйте название и ключ доступа.
Теперь вы можете заменить тестовые значения в коде на новые значения из вашей собственной очереди.
Для того, чтобы запустить пример, понадобится установить модуль:
pip install python-dateutil
Теперь можно выполнить пример:
python 1.py
Пример будет посылать простые сообщения в очередь.
Аналогично происходит создание Event Hub (гораздо более подходящий для маленьких сообщений механизм для сбора сообщения).
Для управления и доступа к Event Hubs используется собственный механизм безопасности.
Пример для отсылки сообщений в Event Hub на Python лежит на Github.
Вы можете получить их из приложения с помощью API, из Service Bus Explorer либо Stream Analytics — удобного сервиса для потоковой обработки данных. Т.е., вместо того, чтобы самостоятельно реализовывать механизм забора данных в (около)реальном времени из источника (в данном случае очереди), простой их обработки (например, агрегации или усреднения за какой-то период) и дальнейшей передачи, можно подключить Stream Analytics как готовый сервис.
Stream Analytics можно создать с помощью инструкции.
SQL-скрипт, который будет усреднять значения температуры, внутри Stream Analytics, ниже. Он состоит из двух скриптов — один из них берет поток и передает его в SQL Server (конфигурируется в качестве Output с соответствующим названием) для истории и в PowerBI для визуализации.
SELECT
DateAdd(second,-5,System.TimeStamp) as WinStartTime,
system.TimeStamp as WinEndTime,
DeviceId,
Avg(Temperature) as AvgTemperature,
Count(*) as EventCount
INTO outputbi
FROM input
GROUP BY TumblingWindow(second, 5), DeviceId
SELECT
DateAdd(second,-5,System.TimeStamp) as WinStartTime,
system.TimeStamp as WinEndTime,
DeviceId,
Temperature as Temperature,
Count(*) as EventCount
INTO outputsql
FROM input
GROUP BY TumblingWindow(second, 5), DeviceId
Подставив вместо имеющихся данных по Event Hub ваши данные, вы сможете перенаправить поступающий поток данных от устройства туда, куда вам необходимо — в другую очередь Event Hub, в хранилище (например, в виде JSON) и др.
Оттуда вы можете достать эти данные и обработать их с помощью любых средств — например, HDInsight, либо визуализировать их с помощью Excel либо PowerBI.
Например, PowerBI:
Или Azure SQL:
Или даже Excel: