Відправляємо і пропонуємо дані з плати 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
Input FROM
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
Input FROM
GROUP BY TumblingWindow(second, 5), DeviceId


Підставивши замість наявних даних по Event Hub ваші дані, ви зможете перенаправити надходить потік даних від пристрою туди, куди вам необхідно — в іншу чергу Event Hub, у сховищі (наприклад, у вигляді JSON) та ін

Звідти ви можете дістати ці дані і обробити їх за допомогою будь-яких засобів — наприклад, HDInsight, або візуалізувати їх з допомогою Excel або PowerBI.

Наприклад, PowerBI:



Або Microsoft SQL:



Або навіть Excel:



Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.