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

02概述
上一篇中我们已经把解析的Modbus数据通过NodeRed发送至HomeAssistant,如何在HA中生成需要的实体,实现方法一般是在NodeRed中安装HA节点来实现,这种方式我没有采用。我的原则就是主动权必须掌握在自己手中,不能过多依赖三方节点。
另外一种方法就是使用函数节点实现MQTT自动发现功能,当然这和安装节点也是一样的原理,只是这种方式更为灵活,zigbee2mqtt在HA中自动发现实体也是这个原理。
03定义函数
通过查阅HomeAssistant相关文档可知,生成MQTT传感器实体需要定义如下值:
object_id、unique_id:用于生成实体的ID;
state_topic:用于获取状态或数值的主题;
unit_of_measurement:单位(不需要需注释掉或删除);
device_class:设备类型;
icon:自定义的图标(不需要需注释掉或删除);
name:前端显示的名称;
以上是生成传感器的常用参数,当然还有发现主题需要遵循特定的格式例如:homeassistant/sensor/garden/config,根据以上写出函数节点如下:

函数代码中,已把需要自行设定的值定义引用,正常情况下修改的上面定义的值id1~id7即可,各值已经注释说明,需要特别说的对如下:
1.id1 如果需要在HA能源面板显示,实体命名则需以_energy结尾;
2.id3 设备类别,需要根据HA定义的设备类型字段填写,例如:温度为:temperature,湿度:humidity,其他参照HA相关文档
3.id5 用于获取状态或数值的主题,必须填写正确,与前面在数据解析时设定的topic保持一致,否则将不能获取数据;
4.id6 自定义的图标,如果不设置或为空,请把下方'icon':id6删除或注释掉,否则将不能发现实体;
5.id7 是在HA中的路径,homeassistant/sensor/不要更改,在传感器实体中需使用sensor用于标识,示例后面的/energy根据自己需要设置,可以不设,设置的好处是方便分类查看,设置的路径级别不能超过两级,否则HA也不能发现实体。
04发布至HomeAssistant
完成以上工作后就可以把自动发现数据发布至HA了,流程如下:

首先用一个inject注入节点启动函数节点,在函数节点后添加一个debug节点可以看到函数生成的数据如下:

检查数据无误后就可以把数据发布至HA了,用一个mqtt out节点连接HA,示例如下:

手动触发一次inject注入节点就可以把数据发布至HA,这时就可以在HA中看到生成的实体:

05特别说明
数据调试完成后,建议把注入节点设置成立即执行,这样在noderd重启会部署时都会运行一次,另外自动发现连接的mqtt服务器的“保留”选项设置成“是”,否则在HA重启时会丢失实体,当然运行一次注入节点即可恢复。

532

被折叠的 条评论
为什么被折叠?



