Обмен технологиями

Создание многопротокольной облачной платформы IoT на базе EMQX Flask InfluxDB Grafana: доступ к устройствам MQTT/HTTP и процесс визуализации данных (с примерами кода)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Краткое содержание: В этой статье в простой и понятной форме представлены основные концепции, такие как Интернет вещей, облачная платформа, MQTT, HTTP и визуализация данных. В ней также сочетаются основные инструменты, такие как EMQX, Flask, InfluxDB и Grafana для обучения. вы шаг за шагом создадите облачную платформу Интернета вещей, поддерживающую несколько протоколов. Статья имеет четкую структуру, изображения и тексты, а код информативен и прост для понимания. Она призвана помочь читателям быстро освоить основную технологию построения облачной платформы IoT.

Ключевые слова:Интернет вещей, облачная платформа, MQTT, HTTP, визуализация данных, EMQX, Flask, InfluxDB, Grafana


1. Базовые знания Интернета вещей.

1.1 Обзор Интернета вещей

Интернет вещей (IoT, Internet of Things) подразумевает сбор в реальном времени любых объектов или процессов, которые необходимо отслеживать, подключать и взаимодействовать с помощью различных информационных датчиков, технологий радиочастотной идентификации, систем глобального позиционирования и т. д. реализовать повсеместную связь между вещами и вещами, а также между вещами и людьми. В связи с этим мы можем достичь интеллектуального восприятия, идентификации и управления предметами и процессами.

1.2 Архитектура Интернета вещей

Архитектура системы Интернета вещей обычно делится на три уровня:

  • Уровень восприятия:Отвечает за сбор данных, включая различные датчики, RFID-метки, GPS-модули и т. д.
  • Сетевой уровень:Отвечает за передачу данных, включая различные сетевые протоколы, коммуникационные технологии и т. д., такие как WiFi, Bluetooth, Zigbee, NB-IoT и т. д.
  • Прикладной уровень:Отвечает за обработку данных и представление приложений, таких как анализ данных, удаленное управление, интеллектуальное принятие решений и т. д.

2. Облачная платформа и визуализация данных.

2.1 Облачная платформа

Облачная платформа относится к модели добавления, использования и доставки связанных с Интернетом услуг, обычно включающих предоставление динамически масштабируемых и часто виртуализированных ресурсов через Интернет. Облачные платформы могут предоставить мощные вычислительные, хранилища и сетевые ресурсы для приложений Интернета вещей, снижая затраты на разработку и развертывание приложений Интернета вещей.

2.2 Визуализация данных

Визуализация данных означает отображение данных в визуальных формах, таких как графики и диаграммы, чтобы помочь пользователям более интуитивно понимать данные и получить представление о закономерностях и тенденциях, лежащих в основе данных.

3. Знакомство с широко используемыми протоколами и инструментами.

3.1 Протокол MQTT

MQTT (Message Queuing Telemetry Transport) — это облегченный протокол публикации/подписки сообщений, разработанный для устройств и сетей с низкой пропускной способностью и низким энергопотреблением. MQTT широко используется в сфере Интернета вещей, особенно подходит для устройств с ограниченными ресурсами и ненадежных сетевых сред.

3.2 HTTP-протокол

HTTP (протокол передачи гипертекста) — это протокол прикладного уровня, используемый для передачи информации между веб-браузерами и веб-серверами. Протокол HTTP прост и удобен в использовании и широко используется в различных сетевых приложениях, включая Интернет вещей.

3.3 EMQX

EMQX — это высокопроизводительный масштабируемый сервер сообщений MQTT с открытым исходным кодом, который поддерживает миллионы одновременных подключений и пропускную способность сообщений.

3.4 Фляга

Flask — это легкая среда веб-приложений, написанная на Python, простая в освоении и использовании и подходящая для быстрого создания веб-приложений и интерфейсов API.

3.5 InfluxDB

InfluxDB — это база данных временных рядов с открытым исходным кодом, предназначенная для хранения и запроса данных временных рядов. Она подходит для хранения данных датчиков IoT, данных мониторинга и т. д.

3.6 Графана

Grafana — это инструмент визуализации данных с открытым исходным кодом, который может подключать несколько источников данных для создания красивых и мощных информационных панелей и отображения данных в реальном времени.

4. Построение многопротокольной облачной платформы Интернета вещей.

В рамках этого проекта будет создана облачная платформа Интернета вещей, поддерживающая протоколы MQTT и HTTP для достижения следующих функций:

  • Поддержка нескольких протоколов: поддерживает доступ к устройствам по протоколам MQTT и HTTP.
  • Сбор и хранение данных: Собирайте данные с устройств с разными протоколами в режиме реального времени и сохраняйте их в базе данных InfluxDB.
  • визуализация данных: используйте Grafana для визуального отображения собранных данных.
4.1 Архитектура системы

 

4.2 Реализация кода

1. Создание HTTP-сервера (Flask)

  1. # 导入 Flask 库
  2. from flask import Flask, request, jsonify
  3. # 创建 Flask 应用
  4. app = Flask(__name__)
  5. # 定义 HTTP 接口,接收 POST 请求
  6. @app.route('/data', methods=['POST'])
  7. def receive_data():
  8. # 获取请求数据
  9. data = request.get_json()
  10. # 数据处理逻辑,例如数据校验、格式转换等
  11. # ...
  12. # 将数据写入 InfluxDB (示例)
  13. from influxdb import InfluxDBClient
  14. client = InfluxDBClient('localhost', 8086, 'user', 'password', 'iot_data')
  15. json_body = [
  16. {
  17. "measurement": "sensor_data",
  18. "tags": {
  19. "sensor_id": data.get("sensor_id")
  20. },
  21. "fields": {
  22. "temperature": data.get("temperature"),
  23. "humidity": data.get("humidity")
  24. }
  25. }
  26. ]
  27. client.write_points(json_body)
  28. # 返回响应
  29. return jsonify({'message': 'Data received successfully!'}), 200
  30. # 启动 Flask 应用
  31. if __name__ == '__main__':
  32. app.run(debug=True)

Описание кода:

  • использоватьFlaskПлатформа создает HTTP-сервер и определяет/dataИнтерфейс получает запросы POST.
  • использоватьrequest.get_json()Получите данные JSON в HTTP-запросе.
  • Выполнять обработку данных, например проверку данных, преобразование формата и т. д.
  • использоватьInfluxDBClientПодключитесь к базе данных InfluxDB и запишите данные в базу данных.
  • Верните ответ в формате JSON, чтобы сообщить клиенту, что прием данных прошел успешно.

2. Обработка сообщений MQTT (Python)

  1. # 导入必要的库
  2. import paho.mqtt.client as mqtt
  3. from influxdb import InfluxDBClient
  4. import json
  5. # MQTT Broker 配置
  6. MQTT_BROKER = "localhost"
  7. MQTT_PORT = 1883
  8. MQTT_TOPIC = "sensor/data"
  9. # InfluxDB 配置
  10. INFLUXDB_HOST = "localhost"
  11. INFLUXDB_PORT = 8086
  12. INFLUXDB_USER = "user"
  13. INFLUXDB_PASSWORD = "password"
  14. INFLUXDB_DATABASE = "iot_data"
  15. # 创建 InfluxDB 客户端
  16. influxdb_client = InfluxDBClient(
  17. host=INFLUXDB_HOST,
  18. port=INFLUXDB_PORT,
  19. username=INFLUXDB_USER,
  20. password=INFLUXDB_PASSWORD,
  21. database=INFLUXDB_DATABASE
  22. )
  23. # 连接到 MQTT Broker
  24. def on_connect(client, userdata, flags, rc):
  25. print("Connected to MQTT Broker with result code " + str(rc))
  26. client.subscribe(MQTT_TOPIC)
  27. # 接收 MQTT 消息
  28. def on_message(client, userdata, msg):
  29. # 解析数据
  30. data = json.loads(msg.payload.decode())
  31. # 构建 InfluxDB 数据点
  32. influxdb_data = [
  33. {
  34. "measurement": "sensor_data",
  35. "tags": {
  36. "sensor_id": data.get("sensor_id"),
  37. },
  38. "fields": {
  39. "temperature": data.get("temperature"),
  40. "humidity": data.get("humidity"),
  41. }
  42. }
  43. ]
  44. # 写入 InfluxDB
  45. influxdb_client.write_points(influxdb_data)
  46. print("Data written to InfluxDB: " + str(influxdb_data))
  47. # 创建 MQTT 客户端
  48. mqtt_client = mqtt.Client()
  49. mqtt_client.on_connect = on_connect
  50. mqtt_client.on_message = on_message
  51. mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)
  52. # 启动 MQTT 客户端
  53. mqtt_client.loop_start()
  54. # 保持程序运行
  55. while True:
  56. pass

Описание кода:

  • использоватьpaho.mqtt.clientПодключитесь к MQTT Broker и подпишитесь на указанную тему.
  • Когда получено сообщение MQTT, используйтеjson.loads()Разберите содержимое сообщения.
  • Создайте проанализированные данные в формате точек данных InfluxDB.
  • использоватьinfluxdb_client.write_points()Запишите данные в базу данных InfluxDB.

3. Визуализация данных (Grafana)

  • Установите Grafana и настройте источник данных для подключения к базе данных InfluxDB.
  • Создавайте информационные панели и добавляйте на них диаграммы, такие как линейные диаграммы, гистограммы и т. д.
  • Настройте источник данных диаграммы как InfluxDB и напишите операторы запроса для получения данных из InfluxDB.
  • Настройте стиль, заголовок, ось и другие атрибуты диаграммы по мере необходимости, чтобы сделать отображение данных более интуитивным и простым для понимания.

Пример запроса Grafana:

SELECT "temperature", "humidity" FROM "sensor_data" WHERE time > now() - 1h

Запрос начнется сsensor_dataЗапросите данные о температуре и влажности за последний час измерения.

Этот проект объединяет такие инструменты, как Flask, EMQX, InfluxDB и Grafana, для создания облачной платформы IoT, которая поддерживает протоколы MQTT и HTTP, а также реализует сбор, хранение и визуальное отображение данных. Платформу можно гибко расширять для поддержки большего количества типов устройств и доступа к протоколам, а ее функции можно настраивать в соответствии с реальными потребностями.

Уведомление:

  • Приведенный выше код предназначен только для справки и должен быть изменен в соответствии с конкретными потребностями реальных приложений.
  • Убедитесь, что установлены все зависимые библиотеки, например.paho-mqttinfluxdbflaskждать.
  • При фактическом развертывании необходимо учитывать такие факторы, как безопасность данных и стабильность системы.

Если вам нужен конкретный код и идеи, вы можете отправить мне личное сообщение! ! !