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

 找回密码
 立即注册
查看: 1910|回复: 2

[流程系列] 分享下miot auto小爱避免重复输出和多个小爱独立响应的方法

[复制链接]

17

主题

357

帖子

2084

积分

论坛DIY达人

积分
2084
金钱
1717
HASS币
40
发表于 2023-5-16 00:12:21 | 显示全部楼层 |阅读模式
本帖最后由 hugh_jie 于 2023-5-16 13:30 编辑

前言
感谢大神al-one提供的miot auto,让小爱的接入更方便了
在之前的使用中发现,在node-red中,如果把conversion节点作为触发器,有时候会抽风的导致间歇性重复触发流程,虽然可以通过勾选`Current state equals previous state`选项来避免,但是我家里还有几个最开始玩HA时入的遥控开关,没有反馈那种
有时候遥控会出现一次操作没有反应,需要第二次喊小爱的情况,因此这个选项就不太好勾上了,有时候喊小爱打开了,关闭的时候又是手动关闭,就导致HA里状态没有变过来,因此在node-red里面加了个白天打开了也会自动关的判断
这个时候不勾选上面哪个选项的后果就很明显了,如果正好上一次是喊了小爱打开,抽风的时候就会出现一会儿开,立马被关掉,隔一会儿又开,又立马被关掉....


避免重复
下面是我的一个小爱的指令判断流程
Snipaste_2023-05-15_23-49-13.png
其中的function节点就是用来避免重复输出的
内容:
var timestamp = new Date(msg.data.new_state.attributes.timestamp).getTime() / 1000;
var last_updated = new Date(msg.data.new_state.last_updated).getTime() / 1000;
var message = msg.payload;
msg.payload = message;
if ((last_updated - timestamp) > 3)  {
    return null;
}
if ((last_updated - timestamp) <= 3) {
    return msg;
}


就是判断新指令中的两个时间timestamp和last_updated,前者大概是小爱收到指令的时间,后者是miot auto从小爱获取到数据的时间,我的interval_seconds是3s,因此判断两者的时间差,小于3s是真正收到了指令,抽风造成的timestamp貌似是不会变的,今天没有抽风没有试成,但是我重启了一下HA,发现了连接上时输出的信息里面是这样的,因此大概可以以此来判断了
之前是想通过判断last_changed和last_updated两个时间,结果发现只判断这两个时间相等的话效果等同于勾选Current state equals previous state了

收到指令的小爱独立响应
Snipaste_2023-05-16_00-06-51.png
这是我的执行动作之后的响应部分
function节点内容:
var old = new Date(msg.data.attributes.timestamp).getTime() /1000;
var now = new Date().getTime() / 1000;

msg.payload = {};
msg.payload.data = { "value": "已打开" };

if ((now - old) < 10) {
    return msg;
}
if ((now - old) >= 10) {
    return null;
}

之前使用的里面的timeSinceLastChange属性,发现不太准确,改用了attributes.timestamp,转换为时间戳,对比当前时间的时间戳,相差10s内就认为是这个小爱接收了指令,后面接个当前的小爱play_text就可以了
Snipaste_2023-05-16_00-08-20.png






评分

参与人数 1金钱 +10 收起 理由
隔壁的王叔叔 + 10 纳尼,还有这种操作?

查看全部评分

回复

使用道具 举报

10

主题

1332

帖子

4252

积分

论坛元老

Rank: 8Rank: 8

积分
4252
金钱
2920
HASS币
0
发表于 2023-5-16 09:35:53 | 显示全部楼层
感谢大佬分享,就差您 的json了。
回复

使用道具 举报

17

主题

357

帖子

2084

积分

论坛DIY达人

积分
2084
金钱
1717
HASS币
40
 楼主| 发表于 2023-5-16 11:01:47 | 显示全部楼层
隔壁的王叔叔 发表于 2023-5-16 09:35
感谢大佬分享,就差您 的json了。

中间都是些call service节点了,没啥好看的啊,这几个判断节点全是这种... Snipaste_2023-05-16_10-58-45.png
也没啥好看的呐,都得自己根据自己情况来写,当然也能用function简化,但是我懒得弄了...
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 03:48 , Processed in 0.083561 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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