活动报名
消费电子产品的智能体升级之路 →

使用 MQTT 和 Timescale 为工业能耗监控构建物联网时序数据应用

EMQX Team
2023-9-21
使用 MQTT 和 Timescale 为工业能耗监控构建物联网时序数据应用

引言

随着工业生产的持续发展,工厂设备和系统的能源消耗监控变得越来越重要。实时了解各类设备和产线的能耗情况,可以帮助工厂优化能源管理策略,降低成本开支。EMQXTimescale 的集成为构建可扩展的物联网平台奠定了基础,能够高效地收集和分析产线上的海量能耗数据,实现智能化和精细化的能源监控。

在本文中,我们将演示如何利用 EMQX 从工厂采集生产设备能耗数据,并与 Timescale 集成,实现数据的实时存储和分析。EMQX 通过 MQTT 协议能够可靠地从存储系统收集数据,而 Timescale 则提供了高性能的时序数据库。

前提条件

  • Git
  • Docker Engine: v20.10+
  • Docker Compose: v2.20+

工作原理

MQTT to Timescale

这是个简单而高效的架构,无需复杂的组件。主要包括以下关键组件:

组件名称 版本 说明
MQTTX CLI 1.9.3+ 用于模拟生成工厂能耗数据的命令行工具。
EMQX Enterprise 5.0.4+ 用于在工厂和 Timescale 之间进行消息传递的 MQTT Broker。
Timescale latest-pg12+ 用于工业物联网数据的存储和管理,以及为 Grafana 提供时间维度的聚合和分析功能。
Grafana 9.5.1+ 用于展示和分析采集数据的可视化平台。

除了上述基础组件外,EMQX 还提供了丰富的可观测能力。您可以使用以下组件来监测 EMQX 的运行状态和负载情况:

组件名称 版本 说明
EMQX Exporter 0.1 用于 EMQX 的 Prometheus Exporter。
Prometheus v2.44.0 开源的系统监测和警报工具包。

将项目克隆到本地

emqx/mqtt-to-timescaledb 存储库克隆到本地,并初始化子模块以启用 EMQX Exporter(可选):

git clone https://github.com/emqx/mqtt-to-timescaledb
cd mqtt-to-timescaledb

# Optional
git submodule init
git submodule update

代码库由四部分组成:

  • emqx 文件夹包含了 EMQX-Timescale 的集成配置,可以在启动 EMQX 的时候自动创建规则和数据桥。
  • emqx-exporterprometheusgrafana-provisioning 文件夹包含了 EMQX 的监测配置以及能耗数据的可视化配置。
  • create-table.sql 文件定义了数据库的表结构,它会在初始化的过程中在 Timescale 中创建表。
  • docker-compose.yml 文件可编排所有组件,让您可以一键启动项目。

启动 MQTTX CLI、EMQX 和 Timescale

请确保已经安装 Docker,然后在后台运行 Docker Compose,使用以下命令启动演示:

docker-compose up -d

下面,MQTTX CLI 将模拟 10 个工厂连接到 EMQX,并以每秒 1 条消息的频率向 EMQX 发送其生产线上各个设备的能耗数据。能耗数据以 JSON 格式发送到主题 mqttx/simulate/IEM/{clientid}

各个设备将采集当前的瞬时用电量(数据是通过随机模拟生成的,但符合设备的最大功率限制),并计算出 1 秒内的能耗,随后将数据发布到 EMQX。

设备与最大功率对照表:

设备名称 最大功率(千瓦时)
空压机 1 15
空压机 2 20
照明设备 5
冷却设备 100
加热设备 200
传送带 50
涂装设备 20
检测设备 10
焊接设备 20
包装设备 30
切割设备 70

上报的能耗数据示例:

{
    "factory_id": "08",
    "factory": "Miller and Sons",
    "values": {
        "air_compressor_1": 3.72,
        "air_compressor_2": 5.01,
        "lighting": 0.95,
        "cooling_equipment": 23.19,
        "heating_equipment": 52.66,
        "conveyor": 10.66,
        "coating_equipment": 5.21,
        "inspection_equipment": 2.6,
        "welding_equipment": 5.27,
        "packaging_equipment": 7.38,
        "cutting_equipment": 12.56
    },
    "timestamp": 1691144157583
}

EMQX 将创建一条规则接收来自每个工厂的消息。您也可以稍后修改这个规则,使用 EMQX 的内置 SQL 函数添加自定义处理:

SELECT
  payload
FROM
  "mqttx/simulate/#"

规则处理完数据后,EMQX 将通过数据桥接将消息有效载荷中的能耗数据插入到 Timescale 指定的数据表中。在数据桥接上配置 INSERT SQL 可以灵活地实现这个操作。

Configuring INSERT SQL

从 EMQX 订阅数据

Docker Compose 包含一个用于打印所有能耗数据的 MQTT 订阅客户端,可以使用以下命令查看消息:

$ docker logs -f mqttx
[8/4/2023] [10:15:57 AM] › topic: mqttx/simulate/IEM/mqttx_85df7038
payload: {"factory_id":"08","factory":"Miller and Sons","values":{"air_compressor_1":3.72,"air_compressor_2":5.01,"lighting":0.95,"cooling_equipment":23.19,"heating_equipment":52.66,"conveyor":10.66,"coating_equipment":5.21,"inspection_equipment":2.6,"welding_equipment":5.27,"packaging_equi...

您也可以使用任何 MQTT 客户端来订阅和接收已发布的数据,例如:

mqttx sub -t mqttx/simulate/IEM/+

在 Grafana 中查看能耗数据

要通过 Grafana 仪表板中查看和分析实时的能耗数据,可以在浏览器中打开 http://localhost:3000,使用用户名 admin 和密码 public 登录。

登录成功后,进入到 HomeDashboards 页面,选择 Energy Monitoring data,该仪表板全面展示了各类工业设备的关键能耗监控指标,包括各设备累计能耗数值,各工厂能耗占比情况,充分呈现了工业系统的实时能源使用情况,方便进行数据驱动的节能管理。

View MQTT Enengy Data in Grafana

结语

在本文中,我们探讨了如何集成 EMQX 和 Timescale 来构建工业能源监测系统。通过使用 EMQX 作为实时 MQTT Broker,并利用其 SQL 数据集成功能将数据导入到 Timescale,我们实现了一个端到端的方案,用于收集和分析时序能耗数据。

这个演示项目旨在构建一个可扩展的时序数据平台,用于实现工业设施和其他时间敏感场景的实时监测、优化和智能化分析处理。通过结合 EMQX 的可靠性和 Timescale 的分析能力,我们能够从时序数据中提取有价值的见解。

免费试用 EMQX 企业版
无限连接,任意集成,随处运行。
开始试用 →

推荐阅读