本帖最后由 robaggio 于 2024-10-25 14:54 编辑
第一步:基本的Node-RED安装,这里不赘述,就是要和开放平台集成肯定是需要内网穿透的。我家的网络做不了NAT,这里提供一个CloudFlare Tunnel 免费内网穿透的简明教程(大概率需要购买一个域名) https://sspai.com/post/79278 ,这是我能找到的最安全和方便的方法了,用这个方法HA也可以安全的在外网访问了。
第二步:配置流程,直接看图比较直观。
Flow
- 「ezviz platform」是http in 节点,对应的url第三步会配置用到,配置好后最好先带着外网地址本地测试联通性,减少集成测试时的问题。
- 「json」节点,因为平台过来的数据都是文本
- 「template」节点,用来构造平台消息返回体,如果构造的不对,平台会判定成推送失败了,会导致服务降级。
{"messageId": "{{payload.header.messageId}}"}
- 「http」是http response节点,同上,code 200即可。不管是否满足自动化触发的步骤,每一次平台调用都要走这些节点,才能保证推送服务的正常链接。
- 「msgType」「alarmType」是 switch节点,用来判断是否是我们需要的开门消息(后面发现目前没有这两个节点也可以,但是保险起见可以加上),export json太乱,我还是截图吧,注意勾选stopping after first match
msg.payload.header.type == ys.iot
msg.payload.body.identifier == DoorOpeningRecord
msgType
alarmType
- 「nauticalDawn - sunset」是time range节点,填上自己家的经纬度,就能判断合理的开灯时间,白天开门就不开灯了是吧。
time range
- 「homeassistant.turn on」节点是homeassistant下的Action节点,负责具体操作满足条件的自动化步骤,我这里是打开客厅门口的灯
turn_on
部署成功后进入下一步
推送配置
- 然后是和前面的朋友研究的略微有区别的地方,开通消息推送时,「消息类型」经过我的测试只需要勾选「国标告警信息」即可,「告警信息」分类下会一次下发好多不相关数据(包括室内开门),还需要Note-RED额外处理过滤,「国标告警信息」就纯粹的多,就是门外解锁开门一次发一个消息,同时发送失败的概率也会减少,防止服务被降级。另外订阅国标告警消息也不会影响手机端接收告警消息。
- webhook回调地址就填写第二步Node-RED配置的http in节点endpoint。
第四部:测试。配置好后,确保所有设备都联网,就可以测试了,可以在开放平台里看到推送记录。个人实测稍微有一点延迟,毕竟从家里到萤石开放平台,再穿透回家里还是需要一点点时间的。
开放平台推送记录
|