MongoDB与IIoT:4个步骤的数据整合
工业物联网(IIoT)正在推动一个新的制造时代,释放出强大的新用例,以打造新的收入来源,创建整体的业务洞察力,并根据全球和消费者的需求提供敏捷性。
我们之前的文章,"规模化制造。MongoDB和IIoT",我们概述了IIoT在制造过程中的采用和实施,用模型大小的智能工厂测试各种用例(图1)。在这篇文章中,我们将探讨MongoDB的灵活、高可用和可扩展的数据平台如何使用四步框架实现端到端的数据集成。
图1:MongoDB的应用数据平台与支持MQTT的设备的架构图。
端到端数据整合的四步框架
这个框架的四个阶段(图2)是:
-
连接:建立一个接口来 "听 "和 "谈 "设备。
-
收集:以有效和可靠的方式从设备中收集和存储数据。
-
计算:处理和分析由物联网设备产生的数据。
-
创造:通过获取变革性的数据,创建独特的解决方案(或应用)。
图2:车间数据整合的四步框架
在这个系列的过程中,我们将详细探讨这四个步骤中的每一个,包括工具和方法,并提供我们实施过程的演练,使用Fischertechnik模型作为测试和开发的基础。然而,所有的步骤都适用于任何使用消息队列遥测传输(MQTT)API的环境。该过程的第一步是连接。
第一步:连接
模型工厂包含各种传感器,这些传感器正在生成从摄像机角度到空气质量和温度的各种数据--所有这些都是实时的。工厂使用MQTT协议来发送和接收与不同工厂组件相关的输入、输出和状态信息。
你可能想知道为什么我们不立即跳到数据收集阶段。原因很简单;我们必须首先能够 "看到 "来自工厂的所有数据,这将使我们能够选择我们有兴趣捕获的指标并适当地配置我们的数据库。
作为对工厂架构图的快速复习,我们在图3中看到,任何传入或传出工厂的消息都是通过远程MQTT Broker进行路由的。我们面临的挑战是如何成功地将消息读入和写出工厂。
图3:模型智能工厂的架构图
必须记住,在设备和MongoDB之间进行这种连接的方法取决于设备所配备的通信协议。在车间里,设备通信使用了多种协议,如MQTT和OPC-UA,这可能需要不同的连接器技术,如Kafka,以及其他现成的物联网连接器。
在大多数情况下,无论通信协议如何,只要添加适当的连接器配置,MongoDB就可以轻松集成。(我们将在下一篇博文中讨论更多关于该实现的内容。)对于这个特定场景,我们将专注于MQTT。图4显示了我们的连接图的简化版本。
图4:将工厂的数据连接至MongoDB Atlas和Realm
因为工厂的可用通信协议是MQTT,所以我们将进行以下工作:
-
设置一个远程MQTT代理并测试其连接性。
-
创建一个MQTT桥。
-
向设备发送MQTT消息。
请注意,这些步骤可以适用于任何配备MQTT的设备、机器或环境,所以你可以根据你的具体项目调整这个方法。让我们开始吧。
1.设置一个远程MQTT经纪人
为了专注于经纪人的连接,我们使用了HiveMQ的管理服务来创建一个经纪人和必要的托管环境。然而,这种设置在任何自我管理的MQTT经纪商中也同样适用。
HiveMQ Cloud有一个免费的层级,这对于实践和测试所需的配置是一个很好的选择。你可以创建一个账户来建立一个免费的集群并向其添加用户。这些用户将作为远程代理的客户端。我们建议为不同的目的使用不同的用户。
测试远程代理的连接性
我们使用MosquittoCLI客户端,从命令行直接访问代理。然后,我们连接到工厂使用的同一个网络,打开一个终端窗口,并使用这个命令在本地TXT代理上启动一个监听器:
mosquito_sub -h 192.168.0.10 -p 1883 -u txt -P xtx -t f/o/#
接下来,在一个新的终端窗口中,我们在与监听器相同的主题上向远程代理发布了一条消息。在工厂上配置的所有主题的完整列表可以在Fischertechnik的文档中找到。你可以在下面的命令中填写你的远程代理的信息:
mosquitto_pub -h <hivemq-cloud-host-address> -p 8883 -u <hivemq-client-username>
-P <hivemq-client-password> -t f/o/# -m "Hello"
如果桥接配置正确,你会看到包含你的本地经纪商监听器的第一个终端窗口上显示 "Hello "信息。
现在我们进入正题了。我们想看看工厂为所有的主题生成的所有消息。因为我们对Mosquitto CLI比较熟悉,我们用这个命令在本地TXT broker上启动一个监听器:
mosquitto_sub -h 192.168.0.10 -p 1883 -u txt -P xtx -t #
其中主题 "#"本质上意味着 "一切"。就这样,我们可以了解到哪些参数我们可以希望从工厂提取到我们的数据库。作为额外的奖励,这些数据已经是JSON格式。一旦我们进入数据收集阶段,这将简化将数据串入MongoDB Atlas的过程,因为MongoDB在文档模型上运行,而文档模型也是基于JSON的。
下面的屏幕记录显示了在设备运行时发布的所有主题上启动监听器而产生的数据流。你会注意到巨大的数据块,这是每秒钟拍摄的工厂摄像头图像的编码,以及其他指标,如仓库中的库存物品位置和温度传感器数据,所有这些都是以固定的时间间隔发送的。这是一个典型的时间序列数据的例子,我们将在未来的文章中介绍如何存储和处理这些数据。
2.创建一个MQTT网桥
MQTT桥(图5)是两个MQTT经纪商之间主题的单向/双向绑定,这样,发布到一个经纪商的消息就会无缝地转发到另一个经纪商上订阅相同主题的客户端。
图5:MQTT经纪商之间的消息中继
在我们的案例中,主控制器上的MQTT代理被配置为通过以下MQTT桥接配置来转发/接收远程MQTT代理的消息:
connection remote-broker
address <YOUR REMOTE MQTT BROKER IP ADDRESS:PORT>
bridge_capath /etc/ssl/certs
notifications false
cleansession true
remote_username <HIVEMQ CLIENT USERNAME>
remote_password <HIVEMQ CLIENT PASSWORD>
local_username txt
local_password xtx
topic i/# out 1 "" ""
topic o/# in 1 "" ""
topic c/# out 1 "" ""
topic f/i/# out 1 "" ""
topic f/o/# in 1 "" ""
try_private false
bridge_attempt_unsubscribe false
这个配置文件是通过SSH创建并直接加载到工厂经纪商中的。
3.向设备发送MQTT消息
我们可以通过HiveMQ websocket客户端向工厂发送一个有意义的MQTT消息来测试我们的桥接配置(图6)。我们用之前创建的一个用户(客户端)登录到控制台,并向上一步使用的 "f/o/order "主题发送一个订单消息。
图6:使用桥接的经纪人发送测试消息
订单消息的格式是:
{"type":"WHITE","ts":"2022-03-23T13:54:02.085Z"}
"类型 "指的是要订购的工件的颜色。我们有三种工件颜色可供选择。红色、白色、蓝色;"ts "是指消息发布的时间戳。这决定了它在消息队列中的位置,也决定了订货过程何时会真正开始。一旦桥梁配置正确,工厂将根据消息中指定的工件颜色开始处理订单。感谢你与我们一起坚持到这个过程结束。我们希望这个方法为你的物联网项目提供新的见解。