1 前言
本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,扫描以下二维码即可关注。
也可点击链接访问:用NodeRed在HomeAssistant中自动发现实体--开关
02概述
前面已经讲过用NodeRed在HomeAssistant中自动发现传感器,这篇讲解如何在HA中自动发现开关设备。
03定义函数
开关发现原理和传感器是是一致的,区别在于增加了状态识别和控制命令的识别。根据HomeAssistant相关文档写出节点函数如下:
如果看过前面传感器节点函数文章就会发现,这条函数需要自行填写的内容变少了。设备类别不需要特别指定,也不需要设定单位,图标用系统默认,当然也可以根据自己喜好设定,函数中被我注释掉了。
另外HA是能自己识别布尔值、0或1、ON或OFF的状态的,所以状态识别的定义也不需更改。
有两点还是再次说明下:
1.id3定义的state_topic为开关状态反馈,即HA会根据state_topic定义的主题获取状态值(布尔值、0或1、ON或OFF),HA会自动判断输出状态在前端;
2.id5是在HA中的路径,homeassistant/switch/不要更改,他会自动识别为开关类型。其他注意事项和传感器的一致就不再赘述。
04发布至HomeAssistant
完成以上工作后就可以把自动发现数据发布至HA了,流程如下:
手动触发一次inject注入节点就可以把数据发布至HA,这时就可以在HA中看到生成的实体:
05 接收HomeAssistant的控制命令
上面已经完成的开关的实体自动发现和状态反馈,下面说说如何控制。首先如果HA发出控制指令即点击HA中开关图标的开启或关闭,他是通过MQTT发布到相应主题,在上面函数中可以看到,控制命令的主题为~+/set的格式,即:homeassistant/switch/12way_switch/test_switches/set,所以我们在NodeRed中只需订阅该主题就可以接收到HA的控制指令,结果如下:
这样就获取到了来自HA的控制指令,后面就可以根据该指令控制相应的Modbus设备或直接用MQTT控制设备,这样就完成了HA自动发现开关的全部流程。