『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 1352|回复: 6

[技术探讨] 请问如何进入Dashboard 后触发事件或者自动化 修改设备 state

[复制链接]

14

主题

141

帖子

1008

积分

论坛技术达人

积分
1008
金钱
867
HASS币
0
发表于 2022-11-10 13:22:14 | 显示全部楼层 |阅读模式
最近接入了 大神的 海尔智家的 Node-red, 但是Node-red 需要触发条件 才能获取状态 比如热水器温度, 只能 定时间来获取 然后更新回 实体(我用的是辅助元素)

比如Hass显示的是 42度 但是 如果手动去热水器调节温度 其实是没有回发回Node-red的 因为是需要主动触发才可以更新数据

可能导致 实际温度和 Hass显示温度不一致

能不能 在Dashboard 进入的时候触发事件? 就像js中的 onEnter 或者 on.ready() 之类的 我可以改state 来触发 noder-red 同步热水器温度?

或者有其他事件可以操作的? 定时取真的不是很优雅和合理
回复

使用道具 举报

14

主题

430

帖子

2699

积分

金牌会员

Rank: 6Rank: 6

积分
2699
金钱
2269
HASS币
0
发表于 2022-11-11 16:44:58 来自手机 | 显示全部楼层
想法挺好,愿高手解答!目前还是不优雅的定时取状态
回复

使用道具 举报

14

主题

141

帖子

1008

积分

论坛技术达人

积分
1008
金钱
867
HASS币
0
 楼主| 发表于 2022-11-11 21:02:32 | 显示全部楼层
ylilike 发表于 2022-11-11 16:44
想法挺好,愿高手解答!目前还是不优雅的定时取状态

哈哈哈 行吧 我研究一下 看看能不能改一下 原框架的代码增加一个 js的event 之类的
回复

使用道具 举报

7

主题

114

帖子

1064

积分

论坛DIY达人

积分
1064
金钱
940
HASS币
60
发表于 2022-11-11 22:17:20 | 显示全部楼层
没有了解楼主的想法,sensor都是定时取值的,只不过根据实际需求间隔大小不同而已。如果通过刷新仪表盘来触发取值,那你也是只取刷新那一次而已,感觉没什么实际用途,反而增加了复杂度。
拿楼主的例子来说,手动调节热水器温度,通常情况都是提高温度,那短时间内温度会有一个明显的变化,楼主的自动化里边就可以监控这个变化,比如两次取值(间隔1分钟)发现温度升高1度,那就提高取值频率,将间隔时间缩短到10秒钟,增加实时性。直到温度稳定到一个值后,再将频率降下来。

如果按照楼主的设计,那耦合度太高了,时间久了肯定会遇到各种各样的问题,程序设计第一要素就是要解耦。
回复

使用道具 举报

14

主题

141

帖子

1008

积分

论坛技术达人

积分
1008
金钱
867
HASS币
0
 楼主| 发表于 2022-11-12 12:20:49 | 显示全部楼层
dianxin11 发表于 2022-11-11 22:17
没有了解楼主的想法,sensor都是定时取值的,只不过根据实际需求间隔大小不同而已。如果通过刷新仪表盘来触 ...

不 热水器 这个有个安全性的问题.  海尔这个Node-red 他是被动取值 如果用海尔的app或者直接按热水器按键增加 减少温度 他是不会发送给 ha 或者 node-red的 他和ha 不是一直 pub/sub 的订阅 或者双向绑定的关系.会导致 你打开dashboard 和 实际的 热水器温度不一致 必须要在定时的周期内 才能同步这个数据 当然你也可以说 周期改小 这就好像 没有websocket出现之前 只能搞个timer ajax 轮训api 来保持同步状态..

我的想法是 在进入dashboard的时候 触发一次更新当前热水器状态 温度 来至少保证当前看到的数值是准确的 (当然这个时候有人在按热水器的问题没办法避免) 只是稍微处理一下 安全的问题(当然没有完全避免)
回复

使用道具 举报

7

主题

114

帖子

1064

积分

论坛DIY达人

积分
1064
金钱
940
HASS币
60
发表于 2022-11-12 23:12:51 | 显示全部楼层
xxlxmd 发表于 2022-11-12 12:20
不 热水器 这个有个安全性的问题.  海尔这个Node-red 他是被动取值 如果用海尔的app或者直接按热水器按键 ...

像温湿度,空气质量,电量检测等等sensor基本上都是轮询的,和通信协议没关系,比如我前段时间玩的dht11温湿度sensor,tasmota固件,用的mqtt协议,上报周期默认是5分钟,你可以修改这个频率,或者增加上报触发条件,比如温度变化触发PUBLISH。

我根据你的描述,理解为你的热水器有一个温度更新频率,比如1分钟更新一次,或者温度变化就更新,但是你用的node-red也有一个取值频率,比如10分钟取一次数据,如果我的理解没错的话,我的建议是你判断你node-red取值变化后增加取值频率,比如改为1分钟取值一次,同时继续监测温度变化,直到温度无变化后再将频率降低为10分钟一次。
回复

使用道具 举报

14

主题

141

帖子

1008

积分

论坛技术达人

积分
1008
金钱
867
HASS币
0
 楼主| 发表于 2022-11-12 23:56:18 | 显示全部楼层
dianxin11 发表于 2022-11-12 23:12
像温湿度,空气质量,电量检测等等sensor基本上都是轮询的,和通信协议没关系,比如我前段时间玩的dht11 ...

已经轮训更新了 这不就是想在 看到Dashboard 的时候 刷新一下 当前状态嘛.. 因为是热水器温度 这个热水器 如果直接从机器改 是不会发回 node-red 和homeassistant的 他不是订阅通知 只能轮训 热水器温度 如果有人修改有安全隐患 比如 我们有个浴缸泡澡。放水的时候是45-50度 普通洗澡又是 35-40度 会有小概率意外.但是确实是安全问题 这不是天气 湿度可以比的问题 我当然可以增加轮训间隔 但是 点开的时候刷新一下不好吗? 就比如你天气预报 一小时一查 你点开看的时候 实时获取一下不好吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-28 18:43 , Processed in 0.206446 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表