1 前言
本文章原文发表于我的微信公众号,请大家关注阅读,涉及的源代码等都在公众号,扫描以下二维码即可关注。
也可点击链接访问:NodeRed自动化——根据光照亮度及人体感应存在状态控制开关
2.概述
开篇前先感谢新老朋友的支持与关注,您的持续支持与关注是我坚持下去的动力,如果您喜欢该篇文章,还请点赞、转发,再次表示感谢!
前面硬件篇讲到人体感应探测器控制灯具的与方式与原理,这是我目前在用的方案,当然你可能采用的是其他方案,但是这个方案是两年前的,目前工作的很好,下面讲解如何在NodeRed中实现自动化控制。
3.方案流程
方案的流程:控制开关和人体存在探测器接入zigbee2mqtt⟶在NodeRed中订阅人体存在探测器的主题⟶解析Json数据⟶NodeRed判断执行⟶发布至zigbee2mqtt控制开关的开启或关闭。
4.自动化流程
首先订阅来自zigbee2mqtt的主题,值得注意的订阅主题连接的MQTT服务器不能是zigbee2mqtt的地址,而是zigbee2mqtt所连接的MQTT服务器,例如:z2m连接到了HA就填写HA的MQTT服务器地址,因为我在Z2m主机上也同时部署了MQTT服务器所以我的MQTT的IP地址和z2m服务器IP地址相同。
我订阅主题为:zigbee2mqtt/入户感应探测器,如果发现订阅到数据可以触发一次感应探测器,订阅到主题的数据格式如下:
{"led_status":"OFF","light_off_luminance_prefer":1037,"light_on_luminance_prefer":85,"linkquality":48,"luminance_level":1,"mode":"basic_detection","o_sensitivity":"normal","occupancy":false,"reference_luminance":423,"v_sensitivity":"normal_priority","vacancy_delay":10,"vacant_confirm_time":10}
以上Json数据中虽然信息量大,但是我只需要reference_luminance(参考亮度)和occupancy(存在状态),然后用template节点提取这个两个值,流程图如下:
流程中采用change节点和函数节点进行分析判断,当亮度小于等于85且检测到有人时就立即发送ON指令开启开关,然后在10S内如果再次有状态发生变化即出现人体存在触发则重新计时判断,期间不会关闭开关,如果超过10S检测到没有人存在则关闭开关。
当然MQTT发布可以是控制z2m中的开关也可以是其他非z2m的的设备,例如支持触发开启Modbus设备;如果是z2m设备,发布的主题应该加控制路径+/set,例如我的发布主题为:zigbee2mqtt/入户感应开关/set。
5.测试
我采用函数节点模拟了亮度值和存在状态,流程如下:
大家可以导入流程自行测试,流程源代码请关注公众号获取。