01 前言
本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,请搜索公众号: 智能家居NodeRed和HomeAssistant 即可关注。
02 概述
我家空调是15年安装的某的定频风管机,自从我开始玩智能家居,一直没能将它接入HomeAssistant。尽管多次尝试,最终都以失败告终。虽然红外方案能接够解决,但并不是我需要的解决方案,也曾尝试过NIM01网络模块结果不支持。但是功夫不负有心人还是让我找到了方法,成功将这台老空调接入HomeAssistant,解决了困扰已久的问题!
03 场景概要
最初,我联系了客服,询问是否可以将这款空调能否支持,客服明确表示不支持,但有一位非官方客服告诉我,XCR支持接入MJ和TY平台,且仅支持通过这些平台控制,却无法使用485通讯协议。这让我很失望,因为我一直希望通过485通讯协议进行更高效的控制。
然而在机缘巧合之下,通过粉丝朋友得到了一只 485通讯的网关,并且同时支持Modbus和私有协议。经过一番测试,令人惊喜的是,它确实支持我的老空调,通过485通讯协议成功实现了与HomeAssistant的连接!
它使用非常简单,我的空调是CN20网络接口,将小超人网络接口对接室内机并无需单独供电,模块上的A2、B2就是485接口,同时也支持三方面板,具体支持哪些不得而知,不过这都不重要,因为我不需要。
04 接入HomeAssistant
接入HomeAssistant采用自己开发的全新NodeRed解析流程2.0,本次采用Modbus协议接入。前面已经对Modbus解析核心流程进行了全面升级,本次直接对私有协议和Modbus协议解析流程同步升级,并添加空调设备的支持。
因空调设备解析需要多个状态主题和订阅多个主题操作使流程开发变得复杂,经过反复构思和测试,对设备的定义采用全新的方式进行,以下是以Modbus为例的数据配置:(修改Slave_1~4_小超人节点即可)
Device配置(从站配置)
Add:设置从站地址;
FC:读功能码;
RegStAdd:设置开始寄存器;
QTY:需要读取的寄存器数量;
DevName:自动发现为设备的名称;
analysis配置(寄存器配置)
CH:通道序号,保留定义项,可以任意设置值;
RegAdd:寄存器地址;
FC:写功能;
DrvClass:HA中的设备类别;
entities:HA中的实体名称定义;
Path:MQTT路径,需以“/”结尾;
Notes:HA中显示的中文名称;
Fun:定义空调的功能配置分别为:开关、设置的温度、工作模式、风速模式、当前回风温度;前面的数值为Fun功能值所在Modbus报文的位置,例如报文第4位值为0,则对应power值为0;
Funset:为调用写寄存器功能时的寄存器地址与功能值的对应关系,如果寄存器地址以16进制表示可以在数组前加上0x;
modes:为空调模式显示、选择设置,可根据功能可选功能设置,HomeAssistant支持的模式有:"auto", "dry", "cool", "heat", "off", "fan_only"六种,前面数值对应与模式的关系,例如1: "heat",表示值为1时解析为当前为制热模式;
fan_mode:为风速模式显示、选择设置,可根据功能可选功能设置,HomeAssistant支持的模式有:"auto", "high","medium", "low"四种,前面数值对应与模式的关系,例如0: "auto",表示值为1时解析为当前为自动模式;
power:为电源开关设置,一般都是0关1开,这里不用多说。
如果你一样也是这样的Modbus网关,只需要更改Add值即可,其他无需更改即可使用,如果不是也只需要根据上述说明适当调整。当完成以上设置并配置好MQTT服务器后可点击注入节点流程即可自动运行,流程运行5S后会发送自动发现主题至HA,HA则会自动发现空调开关和空调设备,可在HA中的设置>设备与服务>集成>MQTT中找到发现的空调设备,添加至仪表盘后效果如下: