Compartir tecnología

Creación de una plataforma de nube de IoT multiprotocolo basada en EMQX Flask InfluxDB Grafana: proceso de visualización de datos y acceso a dispositivos MQTT/HTTP (con ejemplos de código)

2024-07-12

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

Resumen: Este artículo presenta conceptos básicos como Internet de las cosas, plataforma en la nube, MQTT, HTTP y visualización de datos de una manera simple y fácil de entender. También combina herramientas convencionales como EMQX, Flask, InfluxDB y Grafana para enseñar. Le explicamos paso a paso cómo construir una plataforma en la nube de Internet de las cosas que admita múltiples protocolos. El artículo tiene una estructura, imágenes y textos claros, y el código es informativo y fácil de entender. Está diseñado para ayudar a los lectores a dominar rápidamente la tecnología central de la construcción de una plataforma en la nube de IoT.

Palabras clave:IoT, plataforma en la nube, MQTT, HTTP, visualización de datos, EMQX, Flask, InfluxDB, Grafana


1. Conocimientos básicos de Internet de las Cosas

1.1 Descripción general del Internet de las cosas

Internet de las cosas (IoT, Internet de las cosas) se refiere a la recopilación en tiempo real de cualquier objeto o proceso que deba ser monitoreado, conectado e interactuado a través de diversos sensores de información, tecnología de identificación por radiofrecuencia, sistemas de posicionamiento global, etc. para realizar la comunicación ubicua entre cosas y cosas, y entre cosas y personas. En conexión, podemos lograr una percepción, identificación y gestión inteligentes de elementos y procesos.

1.2 arquitectura de IoT

La arquitectura del sistema IoT suele dividirse en tres capas:

  • Capa de percepción:Responsable de recopilar datos, incluidos varios sensores, etiquetas RFID, módulos GPS, etc.
  • Capa de red:Responsable de la transmisión de datos, incluidos diversos protocolos de red, tecnologías de comunicación, etc., como WiFi, Bluetooth, Zigbee, NB-IoT, etc.
  • Capa de aplicación:Responsable del procesamiento de datos y presentación de aplicaciones, como análisis de datos, control remoto, toma de decisiones inteligente, etc.

2. Plataforma en la nube y visualización de datos

2.1 plataforma en la nube

Plataforma en la nube se refiere al modelo de adición, uso y entrega de servicios relacionados basados ​​en Internet, que generalmente implica el suministro de recursos dinámicamente escalables y a menudo virtualizados a través de Internet. Las plataformas en la nube pueden proporcionar potentes recursos informáticos, de almacenamiento y de red para aplicaciones de IoT, reduciendo el costo de desarrollo e implementación de aplicaciones de IoT.

2.2 Visualización de datos

La visualización de datos se refiere a mostrar datos en formas visuales, como gráficos y tablas, para ayudar a los usuarios a comprender los datos de manera más intuitiva y obtener información sobre los patrones y tendencias detrás de los datos.

3. Introducción a los protocolos y herramientas de uso común.

3.1 protocolo MQTT

MQTT (Message Queuing Telemetry Transport) es un protocolo liviano de publicación/suscripción de mensajes diseñado para redes y dispositivos de bajo ancho de banda y bajo consumo de energía. MQTT se utiliza ampliamente en el campo de Internet de las cosas y es especialmente adecuado para dispositivos con recursos limitados y entornos de red poco confiables.

3.2 protocolo HTTP

HTTP (Protocolo de transferencia de hipertexto) es un protocolo de capa de aplicación que se utiliza para transferir información entre navegadores web y servidores web. El protocolo HTTP es simple y fácil de usar y se usa ampliamente en diversas aplicaciones de red, incluida la Internet de las cosas.

3.3 EMQX

EMQX es un servidor de mensajes MQTT escalable, de alto rendimiento y de código abierto que admite millones de conexiones simultáneas y rendimiento de mensajes.

3.4 Matraz

Flask es un marco de aplicación web liviano escrito en Python, fácil de aprender y usar, y adecuado para crear rápidamente aplicaciones web e interfaces API.

3.5 Base de datos de flujo

InfluxDB es una base de datos de series temporales de código abierto diseñada para almacenar y consultar datos de series temporales. Es adecuada para almacenar datos de sensores de IoT, datos de monitoreo, etc.

3.6 Grafana

Grafana es una herramienta de visualización de datos de código abierto que puede conectar múltiples fuentes de datos para crear paneles hermosos y potentes y mostrar datos en tiempo real.

4. Construcción de una plataforma en la nube IoT multiprotocolo

Este proyecto construirá una plataforma en la nube de IoT que admita los protocolos MQTT y HTTP para lograr las siguientes funciones:

  • Soporte multiprotocolo: Admite acceso a dispositivos con protocolos MQTT y HTTP.
  • Recopilación y almacenamiento de datos.: Recopile datos de diferentes dispositivos de protocolo en tiempo real y guárdelos en la base de datos InfluxDB.
  • Visualización de datos: Utilice Grafana para mostrar visualmente los datos recopilados.
4.1 Arquitectura del sistema

 

4.2 Implementación del código

1. Construcción del servidor 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)

Descripción del código:

  • usarFlaskEl marco crea un servidor HTTP y define/dataLa interfaz recibe solicitudes POST.
  • usarrequest.get_json()Obtenga los datos JSON en la solicitud HTTP.
  • Realizar procesamiento de datos, como verificación de datos, conversión de formato, etc.
  • usarInfluxDBClientConéctese a la base de datos InfluxDB y escriba datos en la base de datos.
  • Devuelve una respuesta en formato JSON para informar al cliente que la recepción de datos fue exitosa.

2. Procesamiento de mensajes 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

Descripción del código:

  • usarpaho.mqtt.clientConéctese a MQTT Broker y suscríbase al tema especificado.
  • Cuando se recibe un mensaje MQTT, utilicejson.loads()Analiza el contenido del mensaje.
  • Cree los datos analizados en el formato de punto de datos de InfluxDB.
  • usarinfluxdb_client.write_points()Escriba datos en la base de datos InfluxDB.

3. Visualización de datos (Grafana)

  • Instale Grafana y configure la fuente de datos para conectarse a la base de datos InfluxDB.
  • Cree paneles y agregue gráficos en el panel, como gráficos de líneas, gráficos de barras, etc.
  • Configure la fuente de datos del gráfico como InfluxDB y escriba declaraciones de consulta para obtener datos de InfluxDB.
  • Configure el estilo, el título, el eje y otros atributos del gráfico según sea necesario para que la visualización de datos sea más intuitiva y fácil de entender.

Ejemplo de declaración de consulta de Grafana:

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

La consulta comenzará desdesensor_dataConsulta los datos de temperatura y humedad de la última hora en medición.

Este proyecto combina herramientas como Flask, EMQX, InfluxDB y Grafana para construir una plataforma en la nube de IoT que admita los protocolos MQTT y HTTP, y realice la recopilación, el almacenamiento y la visualización de datos. La plataforma se puede ampliar de manera flexible para admitir más tipos de dispositivos y acceso a protocolos, y sus funciones se pueden personalizar según las necesidades reales.

Aviso:

  • El código anterior es solo de referencia y debe modificarse según las necesidades específicas de las aplicaciones reales.
  • Asegúrese de que todas las bibliotecas dependientes estén instaladas, p.paho-mqttinfluxdbflaskesperar.
  • En la implementación real, se deben considerar factores como la seguridad de los datos y la estabilidad del sistema.

Si quieres códigos e ideas específicos, ¡puedes enviarme un mensaje privado! ! !