智能家居软件篇——Modbus转MQTT网关的应用--开关控制

1 前言

本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,扫描以下二维码即可关注。

也可点击链接访问: Modbus转MQTT网关的应用--开关控制

2.概述

前面已经讲过用Modbus网关采集数据,其实也可以用Modbus网关直接控制所连接的Modbus继电器模块,我称之为开关控制,还是那句话这不是给某品牌打广告。

如需了解通过Modbus网关采集数据可以看下前面的文章:

智能家居硬件篇——数据采集之Modbus转MQTT网关的应用

另外这篇文章中订阅和发布表述有误,需更正如下:软件设置上的订阅主题为网关订阅控制命令的主题,没有控制需求的可以忽略;发布主题为网关发布到MQTT服务器上的主题,在NR上订阅的主题和这个主题相同

3.适用环境

由于布线的原因或其他原因不能通过有线方式控制Modbus设备,采用以太网传输信号,采用MQTT协议进行通信并对设备控制。

4.操作方法

首先在Modbus网关中设置了订阅的主题,主题不要与发布主题相同,示例如下:

图片

 这是厂家使用手册说明:

图片

图片

根据以上文档说明我们只需要发送Json格式的数据到控制模块就可以控制设备,也就是文档中:{"mb":"010600000008","sn":1,"ack":1,"crc":1}。

mb就是需要发送的控制命令,可以根据需要决定谁来计算CRC,网关本身可以自己计算就由网关来完成这个工作,例如有如下Modbus继电器控制指令:

图片

以上指令中校验码直接去掉,例如1开中去掉校验码8C3A,第一路开的命令就是:{"mb":"0105000FF008","sn":1,"ack":1,"crc":1},其他依次类推。

5.NodeRed发送指令

我直接根据以上的要求写了一条简单的NodeRed函数如下:

图片

以上函数中只接受OFF、ON的控制命令执行函数,当然也可根据需求自行修改。函数中需根据实际情况替换控制命令,"01050001FF00" : "010500000000"和topic:GE100D_Collection,topic为网关中设置的订阅主题topic。

完整流程如下:

图片

值得注意的是,发布的MQTT服务器和网关连接的服务器地址需保持一致。

运行测试如下,只要控制命令正确,就可以正常控制开关继电器。

图片

6. 关于状态反馈

以上只是完成了控制功能,但是还没有开关动作的反馈,其实反馈和前面讲到的数据采集一致,可以阅读前面的智能家居硬件篇——数据采集之Modbus转MQTT网关的应用用NodeRed解析Json数据,需要注意的是采集功能码在模块中不能填写05、06等,按照控制协议中反馈功能码填写即可。

7.结束语

以上只是简单的完成了通过Modbus网关控制开关继电器的操作,如果通道数量太多,可以适当改写函数即可实现,反馈状态没有写在一起,鉴于这个方案受众较小,就暂时不做过过多拓展,如果有需要的朋友可以留言或私信,联系我进一步完善。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值