IOT: передача данных в таймсерии метрик OVHcloud из Arduino
Прошлой весной я построил в своем саду дровяную печь. Я хотел иметь такую много лет, и наконец решил ее создать. Чтобы использовать его, я разжигаю внутри большой огонь на два часа, удаляю все угли, и тогда он готов к приготовлению. Духовка накапливает тепло во время огня, а затем отдает его.
После того, как угли будут удалены, я должен определить приоритеты блюд, которые я хочу приготовить, когда температура упадет:
- Пицца: 280 ° C
- Хлеб: 250 ° C
- Рисовый пудинг: 180 ° C
- Безе: 100 ° C
Я построил первую версию термометра с Arduino, чтобы иметь возможность проверять температуру. Этот термометр, сделанный из термопары (т. Е. Датчика, который измеряет высокие температуры), отображает внутреннюю температуру на маленьком ЖК-экране.
Следующим шагом было предвидеть, когда начинать посуду в духовке. Наблюдать за падением температуры в течение нескольких часов было плохой идеей. Мне нужна была тепловая диаграмма моей духовки! Тепловая диаграмма — это просто диаграмма температуры за определенный период времени. Но записывать температуру на бумаге каждые десять минут… подождите… этого хватит на 30 часов.
Пожалуйста, дайте мне поспать!
Это требует некоторой автоматизации. К счастью, у OVHcloud есть решение: платформа данных метрик: www.ovh.com/fr/data-platforms/metrics/
Оборудование
Цель проекта — подключить датчик к Arduino, который будет отправлять данные на платформу данных метрик OVHcloud ( www.ovh.com/fr/data-platforms/metrics/ ) по сети. По сути, Arduino будет использовать локальную сеть Wi-Fi для передачи данных о температуре на серверы OVHcloud.
Вы знаете ESP8266? Это недорогой ( менее 2 евро! ) Микрочип Wi-Fi с полным стеком TCP / IP и возможностями микроконтроллера.
Функциональная схема ESP8266
Реализация: Wemos
ESP8266 не так прост в использовании сам по себе:
- Должен быть запитан от 3,3 В (не слишком много, иначе он сгорит)
- Нет USB
Поэтому лучше использовать решение, реализующее для нас ESP8266. Вот Wemos!
- Питание от 5 В (6 В все еще в порядке)
- USB для последовательной связи (для отладки)
- Программирование через USB
- Может быть запрограммирован с помощью Arduino IDE
- Стоит меньше 3 €
Подготовьте свою Arduino IDE
Установите интегрированную среду разработки
Прежде всего вам необходимо установить Arduino IDE. Это бесплатно и доступно для любой платформы (Mac, Windows, Linux). Перейдите на www.arduino.cc/en/main/software и загрузите версию, соответствующую вашей платформе. На момент написания текущая версия — 1.8.10.
Дополнительная конфигурация для ESP8266
Когда вы установите Arduino IDE, она сможет программировать только официальные Arduinos. Добавим прошивку и библиотеки для ESP8266…
Запустите Arduino и откройте окно «Настройки» ( Файл> Настройки ).
Введите
<a href="https://arduino.esp8266.com/stable/package_esp8266com_index.json" target="_blank" rel="nofollow external noopener noreferrer" data-wpel-link="external">https://arduino.esp8266.com/stable/package_esp8266com_index.json</a>
в поле «Дополнительные URL-адреса Board Manager». Вы можете добавить несколько URL-адресов, разделяя их запятыми.Теперь откройте «Менеджер плат» в меню « Инструменты»> « Плата» и установите платформу esp8266 (не забудьте выбрать плату ESP8266 в меню « Инструменты»> « Плата» после установки).
Теперь вы готовы!
Заказать платформу данных метрик
Перейдите на веб-сайт платформы данных метрик OVHcloud: www.ovh.com/fr/data-platforms/metrics/. Нажмите на бесплатную пробную версию и завершите свой заказ. Если у вас нет учетной записи, просто создайте ее. В этом испытании у вас будет 12 показателей (т. Е. 12 наборов записей). В этом примере мы будем использовать только один.
Получите свой токен
Перейдите в панель управления OVH: www.ovh.com/manager/cloud/#/. На левой панели у вас должны быть метрики и новый сервис внутри.
Во вкладке «Токены» вы можете скопировать токен записи. Сохраните его, так как он нам понадобится позже.
Обратите внимание, что для настройки Grafana вам понадобится токен чтения.
Получить хост платформы данных метрик
Хост вашей платформы данных метрик указан в описании вашей услуги. На вкладке «Платформы» скопируйте хост opentsdb. Сохраните его, так как он нам понадобится позже.
Глубже в программе
Теперь посмотрим на пример. Вот код, который отправит статические данные на платформу данных метрик OVHcloud. Вы можете использовать его со своим датчиком. Вам просто нужно закодировать измерение датчика. Во время работы Wemos:
- Попробуйте подключиться к вашей сети Wi-Fi
- В случае успеха отправьте данные в платформу данных метрик OVHcloud
Весь исходный код доступен на моем github: https://github.com/landru29/ovh_metrics_wemos .
Есть шесть основных файлов:
- ovh_metrics_wemos.ino : главный файл
- wifi.cpp : класс, который реализует процесс подключения к Wi-Fi через WPS (Wifi Protected Setup)
- wifi.h : заголовочный файл для Wi-Fi
- metrics.cpp : класс, который отправляет данные метрики в платформу данных метрик OVHcloud через HTTPS.
- metrics.h : заголовочный файл для показателей
- config.h.sample : модель для создания файла конфигурации (см. ниже)
Создайте свой файл конфигурации
Если вы попытаетесь скомпилировать программу, вы получите ошибки, так как некоторые определения отсутствуют. Нам нужно объявить их в файле config.h .
- Скопируйте config.h.sample в config.h
- Скопируйте токен записи, полученный в пункте 5.1 (#define TOKEN «xxxxxx»)
- Скопируйте хост, указанный в параграфе 5.2 (#define HOST «xxxxxx»).
Получите отпечаток сертификата
Поскольку Wemos будет запрашивать через HTTPS, нам понадобится отпечаток сертификата. Вам понадобится хост, который вы только что взяли на вкладке «Платформы», а затем:
Пользователи Linux
Просто запустите этот небольшой скрипт:
HOST=opentsdb.gra1.metrics.ovh.net; echo | openssl s_client -showcerts -servername ${HOST} -connect ${HOST}:443 2>/dev/null | openssl x509 -noout -fingerprint -sha1 -inform pem | sed -e "s/.*=//g" | sed -e "s/\:/ /g"
Скопируйте результат в свой
.config.h (#define FINGERPRINT "xx xx ..")
Пользователи MAC
Просто запустите этот небольшой скрипт:
HOST=opentsdb.gra1.metrics.ovh.net; echo | openssl s_client -showcerts -servername ${HOST} -connect ${HOST}:443 2>/dev/null | openssl x509 -noout -fingerprint -sha1 -inform pem | sed -e "s/.*=//g" | sed -e "s/\:/ /g"
Скопируйте результат в свой
.config.h (#define FINGERPRINT "xx xx ..")
Пользователи Windows
В своем браузере перейдите на opentsdb.gra1.metrics.ovh.net. Нажмите на замок рядом с URL-адресом, чтобы отобразить отпечаток сертификата. Замените все ":" одним пробелом.
Скомпилируйте проект и загрузите его в Wemos
- Откройте
файл в Arduino IDE (у вас в проекте должно быть шесть вкладок).ino
- Подключите Wemos к вашему компьютеру
- Выберите порт из Инструменты> Порт
- В верхнем левом углу нажмите на стрелку, чтобы загрузить программу.
- После загрузки вы можете открыть монитор последовательного порта: Инструменты> Монитор последовательного порта
Прямо сейчас программа должна выйти из строя, поскольку Wemos не сможет подключиться к вашей сети Wi-Fi.
Запустите программу
Как мы уже видели, при первом запуске происходит сбой. Это потому, что вам нужно запустить WPS-соединение, поэтому в зависимости от вашего интернет-модема вам нужно будет запустить транзакцию WPS. Это может быть физическая кнопка на модеме или программное действие, запускаемое на консоли ( en.wikipedia.org/wiki/Wi-Fi_Protected_Setup ).
Когда процесс запускается на стороне модема, у вас есть примерно 30 секунд для включения Wemos.
- Подключите Wemos через USB => программа запущена
- Выберите порт из Инструменты> Порт (возможно, он изменился)
- Откройте последовательный монитор: Инструменты> Последовательный монитор.
Теперь вы можете следить за процессом.
Wi-Fi соединение
В последовательном мониторе (установите битрейт 9600) вы должны получить:
Try to connect
WPS config start
Trying to connect to <your modem> with saved config ...|SUCCESS
IP address: 192.168.xx.xx
Если соединение Wi-Fi было успешным, последовательная консоль должна отображать локальный IP-адрес (192.168.xx.xx), в противном случае — сбой. Попробуйте еще раз, запустив WPS на модеме и перезапустив Wemos (отключите его и снова подключите).
Отправка данных в платформу данных метрик OVHcloud
Теперь Wemos отправляет запрос на сервер OVHcloud. Последовательная консоль показывает вам отправленный JSON:
------------------------------------------------
POST opentsdb.gra1.metrics.ovh.net/api/put
[{"metric": "universe","value":42,"tags":{}}]
------------------------------------------------
beginResult: 0
http: 204
response: xxxx
Если beginResult отрицательный, соединение с сервером OVHcloud не удалось. Это могло означать, что FINGERPRINT это неправильно.
Если http нет 2xx (должно быть 204), сервер не может обработать ваш запрос. Это может означать, что TOKEN это неправильно.
У вас есть 204? Большой! Это успех. Давайте проверим это на Grafana…
Настроить Grafana
Перейдите на сайт OVHcloud Grafana: grafana.metrics.ovh.net/login. Войдите в свою учетную запись OVHcloud.
Настроить источник данных
Щелкните «Добавить источник данных».
- Имя : выберите одно
- Тип : OpenTSDB
- URL : https: // <хост, полученный от вашего менеджера (см. Ниже)>
- Доступ : прямой
- Установите флажок «Обычная аутентификация»
- Пользователь : метрики
- Пароль : <Прочитать токен у вашего менеджера (см. Ниже)>
Нажмите кнопку «Добавить»…
… И сохраните его.
Создайте свою первую диаграмму
Вернитесь на grafana.metrics.ovh.net/ и нажмите «Новая панель управления».
Щелкните «График».
Щелкните «Заголовок панели», затем «Изменить».
Выберите свой показатель в поле «Название показателя». Программное обеспечение должно предлагать имя Universe (имя, указанное в программе Arduino). Если это не так, это означает, что показатели были отправлены Wemos неправильно. Закройте панель «редактирования» (щелкните крестик справа) и сохраните свою конфигурацию (вверху слева в окне).
Анализ результатов
Повышение температуры
Первый результат, который нужно проанализировать, — это повышение температуры. Датчик лежал на кирпичах духовки. Желтая диаграмма — это температура духового шкафа, а зеленая диаграмма — температура окружающей среды.
- Между 11:05 и 11:10 есть шаг около 85 ° C. Кажется, это влага сушившей духовки.
- Затем происходит падение температуры, поэтому я добавил еще дров в духовку (то есть добавил холод).
- Примерно в 11:20 наклон полегче, и я не знаю почему. Огонь недостаточно сильный? В кирпиче больше влаги?
Выпадающее меню температуры
На этом этапе я переместил все угли в задней части духовки и поместил датчик там, где горел огонь. Вот почему диаграмма начинается с 400 ° C.
- Падение температуры выглядит как F (t) = A / t
- Примерно в 15:40 я сменил блок питания с телефона, подключенного к сети 230 В, на автомобильный аккумулятор с регулятором напряжения (что показалось хреновым)
- С 15:00 до 17:00 температура окружающего воздуха довольно высокая. Был солнечный день, поэтому контур напрямую нагревало солнце.