Статьи

Raspberry Pi IoT: датчики, InfluxDB, MQTT и Grafana

Узнайте, как создать панель управления на основе Grafana, которая визуализирует данные, полученные датчиками.

В этом учебном курсе по Raspberry Pi IoT будет построена система IoT, которая контролирует датчики с использованием InfluxDB, MQTT и Grafana. Другими словами, мы создадим панель управления на основе Grafana, которая визуализирует данные, полученные датчиками.


Вам также может понравиться:
Игра с Docker, MQTT, Grafana, InfluxDB, Python и Arduino

При этом InfluxDB сохраняет значения, считанные датчиками. Все системы обмениваются данными с использованием MQTT. Картинка ниже лучше описывает весь проект Raspberry Pi IoT.


Этот проект Raspberry IoT использует:

  • Raspberry Pi 3
  • ESP8266 (один или несколько)
  • Датчики (такие как BMP280, DHT11 и т. Д.)

Raspberry Pi действует как центральный сервер, на котором выполняются следующие компоненты:

  • InfluxDB  (база данных временных рядов)
  • Mosquitto  (брокер MQTT)
  • Grafana  (платформа, используемая для создания информационных панелей)

В то время как ESP8266 управляет датчиками, которые отправляют данные, используя протокол MQTT. Эти компоненты работают с использованием контейнеров Docker.

Обзор проекта Raspberry Pi IoT: InfluxDB, Grafana, Mosquitto и Telegraf

На рисунке выше показаны компоненты, которые будут создавать этот проект IoT, а именно InfluxDB, Grafana и Mosquitto. Итак, как эти компоненты обмениваются данными и как они связаны? На рисунке ниже показано, как это сделать:


Давайте начнем с описания того, как будет работать эта система IoT:

  • Mosquitto выступает в качестве брокера MQTT, принимающего данные, поступающие от датчиков (ESP8266, который выступает в качестве издателя)
  • Telegraf подписывается на тему MQTT, где датчики публикуют данные и сохраняют эту информацию в InfluxDB
  • Графана читает данные в InfluxDB и управляет приборной панелью для визуализации такой информации.

Теперь мы знаем все компоненты и роль, которую они играют, мы можем построить систему. Сначала мы начнем создавать и настраивать все эти компоненты.

Во время этого урока мы будем предполагать, что Docker уже установлен на вашем Raspberry Pi.

Установка и настройка Mosquitto на Raspberry Pi с помощью Docker

Первым шагом является установка Mosquitto на Raspberry Pi. Просто помните: Mosquitto является брокером MQTT. Для этого мы будем использовать Docker, чтобы мы могли легко установить все, что нам нужно:

sudo docker pull eclipse-mosquitto

Дождитесь завершения загрузки, а затем вы можете запустить брокер MQTT:

sudo docker run -it -p 1883:1883 -p 9001:9001 eclipse-mosquitto

Это все. Сервер MQTT запущен и работает:


Установка и настройка InfluxDB

После запуска Mosquitto мы можем установить и настроить InfluxDB. Как вы, возможно, уже знаете, InfluxDB — это база данных временных рядов, в которой мы можем хранить данные в зависимости от времени.

sudo docker pull influxdb

После завершения установки можно запустить InfluxDB:

sudo docker run -d -p 8086:8086 
     -v influxdb:/var/lib/influxdb --name influxdb influxdb

Просто несколько вещей, чтобы заметить. В этом случае мы запускаем базу данных как deamon и создаем том для хранения данных /var/lib/influxdb:

Как создать базу данных InfluxDB и пользователя

Следующим шагом является создание базы данных и пользователя, который получит доступ к этой базе данных. Пользователь будет использоваться Telegraf при доступе к базе данных для хранения данных, поступающих из канала MQTT.

Сначала запустите интерфейс командной строки InfluxDB:

docker exec -it influxdb influx

Далее, давайте создадим базу данных и пользователя:

create database sensors

create user "telegraf" with password "telegraf"

grant all on sensors to telegraf

С помощью этих нескольких строк мы создали базу данных с именем sensorsи пользователем с именем пользователя telegrafи паролем telegraf.

Установка и настройка Telegraf

Настало время установить и настроить Telegraf, компонент, который подключается к брокеру MQTT, подписанному на канал, где публикуются данные датчиков, и сохранять эту информацию в InfluxDB.

sudo docker pull telegraf

Перед использованием Telegram необходимо настроить его. Первым делом создается конфигурация по умолчанию, которую мы изменим, чтобы адаптировать ее к нашему сценарию:

sudo docker run --rm telegraf telegraf config > telegraf.conf

Теперь можно настроить Telegraf. Откройте telegraf.confи найдите mqtt_consumerи добавьте / измените эти строки:

servers = ["tcp://raspberry_pi_ip:1883"]
topics = [
  "sensors"
]
data_format = "influx"

Затем нам нужно изменить раздел вывода. Найдите outputs.influxdbи добавьте / измените следующие строки:

urls = ["http://raspberry_pi_ip:8086"]
database = "sensors"
skip_database_creation = true
username = "telegraf"
password = "telegraf"

Теперь мы можем запустить Telegraf:

 sudo docker run  -v /home/pi/:/etc/telegraf:ro telegraf

Установка и настройка Grafana

Последний компонент, который мы установим и настроим, — это Grafana, инструмент, который создает панель мониторинга.

sudo docker pull grafana/grafana

Когда вы запускаете Grafana с помощью Docker, может быть ошибка. Если это ваш случай, вы можете следить за этим постом:

https://github.com/grafana/grafana/issues/19585#issuecomment-545016209

Тестирование соединения между InfluxDB, Mosquitto и Telegraf

Теперь, когда мы настроили все компоненты, пришло время проверить, работают ли соединения. Для этого запустим все компоненты, если они еще не запущены. Теперь загрузите MQTT.fx и установите его. Мы будем использовать MQTT.fx в качестве клиента, который публикует данные на канал датчиков:

  • Запустите MQTT.fx
  • Подключите его к брокеру MQTT, работающему на Raspberry Pi
  • Подписаться на канал датчиков

Напишите в части сообщения следующее сообщение:

temp,site=room1 value=28

Используя это сообщение, мы добавляем измерение температуры, называемой temp, с именем тега site, равным room1, и значением равно 28. Таким образом, мы эмулируем клиента ESP8266, который отправляет данные нашему брокеру MQTT:


Перейдите к Raspberry Pi и проверьте, пришло ли сообщение и сохранены ли данные в базе данных датчиков InfluxDB:


Все работает !!!! Давайте пойдем, построим наш клиент, используя ESP8266.

Создание панели инструментов с помощью Grafana

Последний шаг — создание панели инструментов с использованием Grafana. Первым делом подключаемся к веб-интерфейсу Grafana по этой ссылке:

http://<your_raspberry_ip>:3000

Вы получите эту страницу:


Теперь выполните следующие действия:

  • Войдите в Grafana используя (admin / admin)
  • Сконфигурируйте источник данных, выбрав InfluxDB
  • Создайте свою панель с графиками, как вы предпочитаете

Пример панели инструментов Grafana с использованием температуры и давления показан ниже:


Подключение ESP8266 к MQTT

Если вы хотите узнать больше о подключении ESP8266 к температуре и давлению публикации MQTT , воспользуйтесь одним из постов этого блога. 

Заключение

В конце этого поста, мы надеемся, вы знаете, как создать систему Raspberry Pi IoT самостоятельно. Вы можете дополнительно расширить этот проект, отслеживая другие физические величины (влажность, свет и т. Д.). Вы даже можете использовать этот проект для мониторинга других аспектов и создания своих панелей мониторинга.

Дальнейшее чтение

Мониторинг погоды с InfluxDB и Grafana (и кучей Arduinos)

Игра с Docker, MQTT, Графаной, InfluxDB, Python и Arduino