在Delphi上打开MQTT客户端项目。延续性


起点是:Delphi上的MQTT协议和MQTT客户端的开放项目在Delphi

上的MQTT客户端项目得到了仪表板的补充,该仪表板用于实时监控来自物联网的信息流,并生成定期出版物以测试MQTT经纪人。由于它是Internet服务的标准,因此已采用用于传输信息的JSON格式。
还可以看到IBM Bluemix可以为我们提供什么以组织远程监视和管理Internet上的事物。


最新消息


在客户端的先前版本有机会接收,发送和订阅MQTT数据包之后,该轮到实施消息流生成以测试MQTT代理的操作了。另一个任务是确定消息正文的结构。在这里,使用了一种IBM Bluemix IoTF服务中使用的信息结构方法来提供帮助。即使那里采用的结构并不理想,但由于IBM是一个非常权威的品牌,因此仍有一段时间会遵守这些规则。
在此上下文中的结构是如何在每个数据包中编码信息以及如何传输信息。有必要决定我们是按一个变量还是按组进行转移,如果按组进行转移,如何将变量彼此分开,如何区分变量,元数据等,如何将变量与其描述或名称进行比较,以及在所有情况下变量是否必须带有名称或足够的索引?等MQTT协议不会以任何方式解决此问题,只是文本数据以UTF8格式编码,这在原则上也不错,因为它允许您以俄语调用主题。
互联网巨头选择了JSON格式来解决结构化问题,尽管MQTT会悄悄地以任何编码和其他格式传输XML和ASN.1。顺便说一下,如果有人抱怨文本格式的冗余性,那么JSON有几个压缩规范。

MQTT流量生成


因此,现在我们的客户端能够发送包含JSON格式并以UTF8编码的文本数据的数据包。为此,它具有选项卡“定期发布”。在MQTT lang语上发布仅意味着将数据包发送到IoT网络上的其他节点。

在屏幕截图中,表格中的每一行都对应一个特定的消息。此示例中的所有消息都具有相同的主题。这里的政策是这样的:不同的主题越少,代理解析,搜索和保存这些主题的负担就越少。以IBM Bluemix IoTF服务接受主题的格式选择主题。有效负载列包含消息的正文。它以JSON格式表示,但是对于其中一个变量,可以根据Delphi语言的Format函数的规则使用格式说明符。在这种情况下,将使用%g指定符。根据其在列中指定的规则生成的变量的值将被替换:超时(发送消息的时间段),函数(随机变量和正弦函数之间只有一个选择),最小值,最大值(生成的值的最小值和最大值),周期(以采样数指定的正弦函数的周期),偏移(以采样数指定的正弦函数的自变量的偏移量)。 QoS和保留列指定MQTT包的属性。启用字段指示单击“开始”按钮时是否将激活此消息。仅在与代理建立连接后,“开始”按钮才处于活动状态。
重要!IBM Bluemix IoTF服务对语法非常敏感,如果主题不符合格式,则会立即断开连接。
表单的底部是日志:常规,已发送的发布消息的日志和已接收的发布消息的日志。日志可以清除或禁用。日志禁止可加速数据包生成和数据包接收。

物联网节点的数据可视化




如果在通信会话的上一个会话中没有永久性地订阅数据,则需要从订阅数据开始,否则代理将不会发送任何内容。
在“按列表订阅”选项卡中,您需要记录我们要从代理接收的主题。在这种情况下,将编写一个主题,其值将由生成器发送。
如果标记了“订阅”字段,则在单击“订阅”按钮后将订阅主题。如果未标记“订阅”字段的值,则当您单击“订阅”按钮时,将取消该主题的订阅。同样,仅在与代理建立连接之后,订阅操作才可用。
甚至在订阅之前,您都可以在视觉组件表中写入我们要实时观察的变量。为此,请单击“表格”按钮。


“变量名称”列包含与消息中以JSON格式记录的变量名称相同的变量名称(JSON术语中的键)。 “变量标题”字段包含在视觉组件上显示的变量的名称。 “窗口小部件类”列设置视觉组件的类型。您可以在此处选择任何刻度,LCD / LED样式的铭文或图形。
编辑表格后,单击“小部件”按钮,然后在表单中排列可视组件。首先,所有组件都将放在左上角的堆栈中。您需要以所需的配置将它们拖放到表单上。下次打开表格后,将记住并复制组件的位置。组件对接样式遵循IDE RAD Studio或MS Visual Studio的样式。


如果建立并订阅了与代理的连接,则在消息具有相应变量的情况下,其值将立即反映在可视组件窗口中。

该程序将所有设置保存并记录在磁盘上的JSON文件中,可以手动进行编辑。
该存储库包含程序的版本,其配置已准备好并保存在JSON文件中,可以使用本地包含的Mosquitto代理进行测试。
准备启动的代理位于Mosquitto_1_4_5_bin目录中Mosquitto_broker_projs.zip存档中的存储库中。您必须运行文件Run_mosquitto.cmd。

关于JSON解析


该程序使用了来自项目https://github.com/hgourvest/superobject的第三方JSON解析器。尽管RAD Studio XE8具有内置的JSON解析器,但就功能而言,超级对象似乎更有趣且功能更强大。消息到达时,MQTT客户端程序将解析消息主体并在其中选择单个键值对。如果遇到数组,则将其忽略,因为数组中的对象没有名称,并且(在此程序中)没有机制将它们与客户端中的任何命名变量关联。其余的命名对象将进行递归深度扫描,直到检索到所有键值对。键将是变量的名称,程序将尝试将值转换为浮点数;如果失败,则该数等于零。

尝试使用IBM IoT Real-Time Insights应用程序


该应用程序是IBM为IoT提供的两个实用应用程序中的第二个。首先,上一篇文章讨论了物联网基金会。IBM目录中还有更多关于物联网的演示应用程序,但是它们需要在服务器上部署和启动自定义代码,该服务器自动包括一个付款柜台。
但回到IoT实时见解。我们进入您的帐户。与往常一样,选择美国南部地区。单击顶部菜单目录。我们走到最底层,观察IBM提供的许多不同的服务和应用程序。我们看到:


单击IoT实时见解。此应用程序仅允许您观察,直接管理设备,否则它将无法正常运行,除非设备具有MQTT以外的其他通信渠道。
创建“应用程序:”字段时,请保留“未绑定”。我们不会创建其他应用程序,因为IBM会立即开始为它们计算费用。实地计划:离开精简版。因此,一切对我们都是免费的。


在此之前,应该已经创建并激活了Internet Foundation Foundation服务,并且其中已经创建了至少一个代表我们的MQTT客户端发送数据包的设备。在上一篇文章中对此进行了描述。


在IoT Real-Time Insights应用程序的主页上,我们立即从连接数据源开始,这将是我们之前创建的物联网基础服务。我们需要知道其代号(组织ID),API密钥和身份验证令牌。如果我们不知道,请返回物联网基金会,创建我们不知道的东西。
连接后,应在“设备”选项卡上显示我们注册的所有设备。在这种情况下,只有一个。


然后,您需要配置消息方案。单击“管理模式”,然后单击加号“添加新消息模式”。通过这种方式,您可以了解从设备解密消息的设置。


这是变量T,L1,L2,L3的这种设置的示例。


例如,当用这样的窗口表示编辑时的变量L1。


配置方案后,您可以配置分析。即实际上,是向外部消息接收者发送消息的规则。最实惠的是发送电子邮件。
这是变量T超过24时发送电子邮件的规则的样子:


但是这样的电子邮件到达:


但是应用程序的中心是仪表板。可以有很多面板。仪表板由可视组件组成,这些组件实时显示在“管理模式”选项卡中创建的变量的值。下面的屏幕截图显示了一个显示4个变量的仪表板示例:T,L1,L2,L3。具有可变值的数据包是由我们的MQTT客户端生成的。变量T是作为正弦函数的随机数L1,L2,L3生成的。


对IBM IoT实时见解的印象。


到目前为止,该应用程序还很原始。窗口和对话框的打开会延迟很长时间。仪表板构建器的功能受到限制,对于简单的移动或调整大小,您需要浏览多个对话框。面板组件本身没有任何可编辑的属性。图也一样。图表没有历史记录,并且在窗口调整到最小时就清除了。电子邮件不稳定,可能会延迟很长时间。
但这仍然是一项免费服务,可在此处和现在使用,并且如果设备能够以合适的JSON格式发布消息,那么您应该牢记IBM的此类应用程序。

MQTT客户端项目仍旧存在:https : //github.com/Indemsys/Delphi_MQTT_mosquitto

Source: https://habr.com/ru/post/zh-CN388343/


All Articles