流程分享:NodeRed解析485私有协议并完成HomeAssistant自动发现

 01 前言

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

也可点击链接访问:流程分享:NodeRed解析485私有协议并完成HomeAssistant自动发现

02 概述

前段时间有网友在公众号私信我,希望将奥科485窗帘接入HomeAssistant,设备是485私有协议,对于Modbus设备我可以不用三方节点进行解析,但私有协议还没尝试过,抱着试一试的心态,经过几次模拟测试和修改,最终完成解析控制并同步实现了HA的自动发现。

03 设备控制

以下是网友提供控制协议截图:

图片

每次看到一大堆协议数据都头痛不已,要在一堆数据中筛选关键信息,因为大部分数据对我来说都是没用的。从以上协议信息可以看出,控制协议由头码(帧头)+地址+频道信息+控制命令+控制数据+校验码组成,控制原理也很简单,就是通过NodeRed发送以上控制字命令至串口或串口服务器即可。

一般对于窗帘设备都是支持百分比控制的,而一个正确的控制命令必须保证校验码是正确的,否则设备则会抛弃该命令。协议中虽然提供了常用的百分比控制命令和校验码计算方法,在实际使用中不可能只用这几种百分比控制选择,所以就需要利用NodeRed进行自动判断和计算,我认为对于私有协议的处理HA是很难做到的,除非你会编写集成或者组件。

我通过协议提供的校验码计算方法定义了功能函数,当接收到HA发送控制命令时,通过函数计算分析,自动组合生成一条控制命令发送至串口,从而实现HA对设备的控制,它可以对窗帘0~100百分比进行任意控制。在这里用到了MQTT动态订阅(前面文章有讲解),从而简化了系统流程,通过下面的流程图就一目了然:

图片

04 状态反馈解析

基于485总线的通讯特点,需要采用轮询查询的方式进行,例如总线上只有一台设备,就可以设置每隔1秒发送一次状态查询指令,串口就会输出当前状态信息,串口输出的是一串16进制字符,这串字符包含了多种信息,我们可以根据需要进行提取,下面是反馈数据的功能定义。

图片

通过以上数据我们可以看到返回数据格式和控制命令格式基本一致,案例中我们只需要提取D7的数据即可,通过它的数据判断窗帘的状态,当然为了防止数据传输错误,我们还可以对反馈数据进行校验码的计算,当校验码正确时就处理数据,反之校验码错误则抛弃该条数据。

05 NodeRed流程工作原理

根据以上逻辑我编写了这样一套流程:

图片

以上流程如果用于解析一台设备稍显臃肿,在设计流程框架时就考虑到了多个设备的同时解析,所以就算是多个设备的解析流程图和上面也是一样的。

现对流程节点功能作如下说明:

首先:“定义函数和状态查询”节点主要完成定义数据格式、HA基本参数设定、设备信息设定以及校验码计算,通过这些数据完成状态反馈查询;“主题订阅”节点是根据定义数据表自动生成需要订阅的主题并发送至动态订阅节点;“动态订阅节点“是订阅HA的控制数据后发送至“串口控制”函数节点自动计算出控制命令然后发送至串口执行操作;”串口解析“节点是分析串口发出的数据把状态实时发送至HA;另外“自动发现”节点通过读取配置信息生成符合HA自动发现规则的MQTT消息实现HA自动发现。

06 流程使用说明

以上流程中使用方法简单,只需要正确设置MQTT服务、串口或串口服务器(同时支持),最重要的是需配置“定义函数和状态查询”节点:

图片

config.Add = '9'; 设置485地址

config.entities = 'cover485'; 设置在HA中的实体名称

config.Path = 'cover/'; 自定义的主题路径,可以不修改

config.Name = '窗帘';   HA中显示的名称

config.DrvClass = 'curtain';  默认为窗帘curtain,你可以修改为百叶窗blind等,不同的属性将在HA中显示不同的图标。

配置完成以上参数后其他节点函数不需要修改,流程即可实现HA自动发现和控制,特别注意的是需要把第一个注入节点修改为周期性执行例如1秒,这样HA才能实时显示设备状态。

以下是网友实际测试的成果:

图片

 07 结束语

以上是解析485窗帘私有协议的案例,也可以应用到任何485私有协议的设备,文章提供的流程只能解析一台设备,转发排名前十的网友可以提供多台设备解析流程。当然,如果有其他私有协议设备也可以联系我。

本文涉及的流程代码在公众号,需要的朋友请关注公众号领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值