关于私有485协议设备批量解析接入的NodeRed流程使用指南

 01 前言

本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。

02 概述

前面分享过私有485协议设备的解析与HomeAssistant自动发现的NodeRed流程,那条流程只限于解析单个设备,如果需要同时解析多个设备,则需要重新定义和修改,当然我已经完成了该项功能。

03 流程特点及功能

该NodeRed流程主要特点和功能如下:

1.设置简单,轻松定义;

2.同时解析和自动发现多个485协议的设备;

3.支持485接入和串口服务器方式接入;

4.可以灵活切换反转开关状态;

5.防止窗帘设备回弹而造成开度显示不正确;

6.数据校验功能,防止数据错误而导致显示异常;

7.多种窗帘、开合帘等设备类型的全支持;

8.基于485通讯轮询机制进行数据采集;

9.异步通讯机制构建消息队列,防止读写冲突;

10.HomeAssistant中自动发现实体;

11.设置变量输出及清除功能,方便调试;

12.设置节点状态显示,实时检测函数运行状态。

04 流程运行原理

流程图如下:

图片

首先“轮询查询”节点根据私有485协议定义数据结构及功能并写入全局变量RS485-2中,同时根据从站信息自动计算设置轮询指令,该指令发送至串口或串口服务器。串口或串口服务器接收到正确的指令后输出相应的状态信息供“数据解析”节点根据全局变量RS485-2中的定义进行解析输出状态至MQTT服务器。

“查询变量”节点实质是读取全局变量数据生成HomeAssistant动态订阅指令发送至HA的MQTT服务器从而得到订阅的HA的各种指令,然后通过“解析HA指令并发布节点”自动计算出485控制指令发送给串口或串口服务器执行写操作。同时他也生成HA自动发现的MQTT消息负载给HomeAssistant完成实体的自动发现。

由于485半双工传输特性,控制和轮询指令可能同时发送至串口节点造成通讯阻塞,而导致控制失败,因此我加入了“队列”节点,它能有效的避免这一情况的发送,而且可以通过节点实时的观察数据处理情况,例如:空闲、排队、忙碌等状态。

05 流程使用方法

首先配置“流程查询”节点:

图片

以上是函数节点局部截图:let variableNames = { config: 'RS485-2' }; 是定义全局变量节点的名称,一般不用修改。如果确要修改需要把其他节点中的定义变量全部修改,格式需为:RS485-;

const pollingInterval = 500; 为从站轮询时间,默认为500毫秒轮询一次。

配置参数均在RS485ParamsData中配置:其中各值的定义为:

  • Add:从站地址;

  • CH:预留,可随意设置;

  • RWHead:读写帧头;

  • RHead:解析帧头;

  • CHL:频道低位;

  • CHH:频道高位;

  • RCMD:读命令;

  • CMD00:占位;

  • WCMD:写命令:

  • CRC:校验方式,这里为XOR奇偶校验;

  • REV:百分比反转,true或false;

  • POS:定义是否为百分比控制,true或false;

  • STD:协议类型,false时为私有方式解析协议;

  • Bytes:报文长度;

  • Offset:数据所在位;

  • OP:输出状态值;

  • OPCMD:百分比控制命令设置;

  • DrvClass:HA中的设备类别;

  • Drv:HA中的设备类型;

  • entities:HA中的实体名称定义;

  • Path:MQTT路径,需以“/”结尾;

  • Notes:HA中显示的中文名称。

以上各值定义可参考流程中的案例定义根据实际情况改写,但是只能修改其值,不要对定义键进行修改。

如果需要添加多个从站设备按照以下方式复制即可,注意从站地址不能重复。

图片

完成以上设置后就可以手动触发一次“轮询查询”前的注入节点,然后触发“输出Cover-485内容”函数节点输出设置的值,如果正确后就可以进行运行测试。

运行时需使“查询变量”前的注入节点设置成立即执行,“轮询查询”前的注入节点设置成周期性执行,时间应大于等于函数节点显示的轮询时间。

流程中使用的是串口服务器节点通讯,如果你使用的是直接控制串口的方式把流程中的TCP节点替换成“serial request”节点即可。

其他MQTT节点设置可以参照前面文章,这里不再赘述。

以上流程是基于奥科485窗帘协议编写,如果大家有其他私有协议的设备需要接入,可以联系我免费写流程用以完善扩充以上流程的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值