如何使用MQTT和Grafana Live将实时传感器数据串联到Grafana上

1,035 阅读4分钟

在机器人和自动化的世界里,最常见的需求之一是捕捉和可视化来自传感器和执行器等硬件组件的实时数据,这提供了对系统整体表现的洞察力,并有助于诊断任何可能出现的超时问题。

从历史上看,要想在典型的分析和可视化工具(包括Grafana)中把这些数据流到仪表盘上,需要相当多的定制开发工作和复杂的工具。但随着Grafana 8.0的发布,使用作为Grafana Live功能的一部分而引入的新的流媒体API,能够流化和可视化实时数据变得更加容易。

(注意:我们所说的 "实时 "是指 "软实时",因为由于网络延迟、垃圾回收周期、协议限制等原因,消息传递的延迟可能超过几百毫秒)。

在这里,我们将看看Grafana全新的流媒体功能的一个应用,即通过MQTT消息传输协议进行通信的传感器系统,利用后台数据源插件中的Grafana Live流媒体API

设置

MQTT是一个轻量级的发布-订阅网络协议,通常用于通过TCP/IP在设备之间传递信息。MQTT协议最初由IBM开发,在带宽受限的环境中,MQTT协议已被广泛用于机器对机器的通信,因为紧凑的数据传输是一个严格的要求。

Grafana Live是一个内置在Grafana中的集成实时消息传递引擎,作为V8.0版本的一部分被引入。它基于一个发布-订阅框架,通过WebSocket协议进行通信,允许任何类型的事件数据在发生后立即推送到前端客户端。

为了展示一个适用的现实生活场景,我们使用了一个简单的基于IMU的 姿态传感板,并将其连接到Raspberry Pi上,通过MQTT将加速度计和陀螺仪的数据流化。

该传感板是基于一个非常广泛使用的、多功能的、现成的IMU,即博世传感技术公司的BMI160。它是一个紧凑、低功耗、低噪音的6DOFIMU,通常在智能手机和可穿戴设备中发现。传感器板通过I²C接口连接到树莓派,我们使用Python脚本来提取并定期发布传感器数据到Mosquitto MQTT代理,两者都在Pi上运行:

为了将传感器数据流取到另一台机器上的Grafana实例中,我们在该机器上安装并使用了GrafanaMQTT数据源插件。(关于MQTT数据源插件的详细安装过程,请参考GitHub仓库中的README)。该插件使用一个集成的MQTT客户端来订阅MQTT主题,并使用Grafana Live流媒体API将其发布到Grafana Live引擎的事件流中。数据源被配置为连接到Pi上本地运行的Mosquitto MQTT代理:

对于我们的仪表盘,我们使用了在v7.4版本中预览过的 时间序列面板,来分别显示所有轴的加速度计和陀螺仪数据。我们还使用了新发布的时间轴面板来检测三个轴中任何一个轴的运动。在系统中,如果异常和不平衡表现为围绕某个轴的过度运动或旋转,这些可视化的数据就会非常有用。此外,这类仪表板对于维持对动态系统的监督非常关键,这些系统有复杂的姿态控制机制来维持稳定性和功能:

演示

下面是一个最终结果的现场演示。请注意时间序列趋势如何响应传感板所有三个轴的方向和旋转的变化,以及状态时间线在独立检测任何轴的运动方面是多么有用。

总结

这个简单的应用显示了Grafana中新的流媒体API是多么强大,特别是当它与所有不同的可视化功能结合在一起时,因为它们都与这个功能原生工作。它通过Grafana灵活的基于插件的架构,为数据流打开了各种通信协议和硬件平台的大门。