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

标题: 小爱同学语音控制Homeassistant设备,基本0延迟,非巴法云 [打印本页]

作者: yxb    时间: 2024-12-13 11:16
标题: 小爱同学语音控制Homeassistant设备,基本0延迟,非巴法云
本帖最后由 yxb 于 2024-12-13 11:16 编辑

先说一下之前看到的帖子常用的两种解决方案:1.HA设备通过巴法云接入米家,优点是没有延迟,缺点是容易掉线
2.通过自动化,从xiaomi miot auto插件处获取Play Control conversation(即小爱对话内容)的值,再对内容进行相应的处理,缺点是有延迟(30s左右)


我的方案是在2的基础上进行改进,降低响应延迟。


准备条件:1.HA主机,2.小爱音箱并且接入接入xiaomi miot auto,3.小米网关并且接入Xiaomi Gateway ,4.任意一个在小米网关下的设备


我们知道Home Assistant Core Integration这个服务可以强制更新实体的值,如果有办法让小爱对话结束时通知HA,HA强制更新Play Control conversation的值,就能立即拿到小爱的最新对话内容。
要想小爱同学对话结束时触发一个事件,可以通过小爱训练计划来完成,如下是我设置的个人训练。

比如想让小爱控制美的热水器,可以添加到训练里(打开热水),然后执行动作可以设置接入了小米网关的设备状态(比如让一个蓝牙灯打开,我用的是闲鱼淘的4路蓝牙开关状态寄存器,USB上电就能用),HA集成Xiaomi Gateway 3,可以实时收到设备更新的状态,
HA收到蓝牙灯的打开的事件作为自动化触发条件,就强制更新Play Control conversation值,再获取小爱对话内容,然后根据内容执行对应的对应操作(HA控制打开美的热水器),然后控制小爱TTS回复操作已完成,最后关闭蓝牙灯(复位)


可以用一个脚本来集成所有操作,根据条件判断对话内容执行对应的操作。

本来想写个流程图的,牛马要打工去了,摸鱼写的教程,有问题欢迎回复。


作者: yxb    时间: 2024-12-13 11:16
附件个人训练
作者: a_dongde    时间: 2024-12-13 12:09
话说,,能获取到小爱得  对话内容,是不是意味着可以把对话内容 提交给HA的语音助手,助手再接入大模型
作者: yxb    时间: 2024-12-13 12:32
a_dongde 发表于 2024-12-13 12:09
话说,,能获取到小爱得  对话内容,是不是意味着可以把对话内容 提交给HA的语音助手,助手再接入大模型 ...

确实可以,但是HA的语音助手理解能力不太好。。接大模型还没研究
作者: a_dongde    时间: 2024-12-13 14:53
yxb 发表于 2024-12-13 12:32
确实可以,但是HA的语音助手理解能力不太好。。接大模型还没研究

大模型的基本理解还是没问题的,起码比一个个命令去匹配训练逻辑要方便,可以参考论坛中的  智普清言  大模型
作者: xiongmx    时间: 2024-12-13 19:32
标题: ,
本帖最后由 xiongmx 于 2024-12-13 19:33 编辑

支持一下吧,爱学习的好孩子
作者: foxad    时间: 2024-12-14 08:04
a_dongde 发表于 2024-12-13 12:09
话说,,能获取到小爱得  对话内容,是不是意味着可以把对话内容 提交给HA的语音助手,助手再接入大模型 ...

接入大模型的 我已经做出来了。但是处理延迟依旧有点……地址
这个延迟是助手造成的延迟,并非是小爱的延迟。就算在ha的网页上使用文字操作,仍然会有这个延迟。

作者: yangrusen    时间: 2024-12-14 14:10
话说第三方平台比如巴法云或者涂鸦接入小爱的设备是不是不支持房间分类,这还是挺遗憾的,小度和天猫都可以支持的。
作者: a431115    时间: 2024-12-14 17:16
一开始我也使用插件在homeassistant虚拟一个可以调节亮度的灯出来,然后接入巴法云,在小爱使用个人训练改变该虚拟灯的亮度,然后HA中该虚拟灯变更不同亮度时触发相关自动化脚本。
然后发现我这边网络巴法云经常失效,然买了一个蓝牙mesh的米家灯,拆掉灯泡保留芯片,接入多模网关,代替巴法云,目前感觉良好。
作者: a431115    时间: 2024-12-14 17:24
监听对话内容延迟太大
监听灯的亮度变化,基本无延迟
作者: tink    时间: 2024-12-14 21:30
太复杂了
作者: blobman    时间: 2024-12-14 23:18
a431115 发表于 2024-12-14 17:16
一开始我也使用插件在homeassistant虚拟一个可以调节亮度的灯出来,然后接入巴法云,在小爱使用个人训练改 ...

灯泡咋拆,能拍个照片吗 谢谢
作者: Honour    时间: 2024-12-15 03:07
按你方法试试看

作者: yxb    时间: 2024-12-15 08:41
yxb 发表于 2024-12-13 11:16
附件个人训练

自动化触发时执行的脚本流程贴出来,中间的if就是判断关键词执行对应操作,也可以交给大模型去处理。

                               
登录/注册后可看大图


作者: yxb    时间: 2024-12-15 08:43
xiongmx 发表于 2024-12-13 19:32
支持一下吧,爱学习的好孩子

谢谢支持
作者: yxb    时间: 2024-12-15 08:45
blobman 发表于 2024-12-14 23:18
灯泡咋拆,能拍个照片吗 谢谢

没必要买带灯的,闲鱼淘一个模拟的蓝牙开关就行,插USB口就能直接在米家APP配网
作者: blobman    时间: 2024-12-15 13:40
yxb 发表于 2024-12-15 08:45
没必要买带灯的,闲鱼淘一个模拟的蓝牙开关就行,插USB口就能直接在米家APP配网 ...

不行啊,买灯泡才能通过不同的亮度触发不同的逻辑吧, 开关的话,可能得买好多个。

灯泡的话,得买自动化触发条件支持选择亮度值的
作者: a431115    时间: 2024-12-15 17:27
blobman 发表于 2024-12-14 23:18
灯泡咋拆,能拍个照片吗 谢谢

我是拼多多5折买的米家筒灯,买带调光和调色的,才15块钱包邮,买回来本来就是灯和控制器分离,将控制器接一个插头,随便找个位置插上就行了
作者: itispip    时间: 2024-12-16 00:29
本帖最后由 itispip 于 2024-12-16 01:23 编辑

这个的核心就是用蓝牙寄存器代替巴法云咯? ,,
但是,我手动执行了下 Core的Update Entity服务。我在和小爱说完话,它回答“好的”之后立刻在HA的开发者工具里面执行 update action,但是 conversation的内容还是要等到 MiAuto 去轮询小米服务器以后才更新,并不会跟随服务的调用而更新。请问是我理解有错误吗?


作者: itispip    时间: 2024-12-16 00:30
a431115 发表于 2024-12-14 17:16
一开始我也使用插件在homeassistant虚拟一个可以调节亮度的灯出来,然后接入巴法云,在小爱使用个人训练改 ...

这个好,灯的亮度和色温可以代表无数个蓝牙寄存器
作者: itispip    时间: 2024-12-16 00:32
本帖最后由 itispip 于 2024-12-16 01:06 编辑
a431115 发表于 2024-12-15 17:27
我是拼多多5折买的米家筒灯,买带调光和调色的,才15块钱包邮,买回来本来就是灯和控制器分离,将控制器 ...

求15的蓝牙mesh灯链接。(已解决
作者: yxb    时间: 2024-12-16 08:35
blobman 发表于 2024-12-15 13:40
不行啊,买灯泡才能通过不同的亮度触发不同的逻辑吧, 开关的话,可能得买好多个。

灯泡的话,得买自动 ...

不是啊,你只需要一个开关状态,触发了获取对话内容的自动化,就可以根据对话的内容执行对应操作了,不需要那么多状态的。这个重点是根据对话内容执行对应操作,而不是根据设备状态执行对应操作。
作者: yxb    时间: 2024-12-16 08:42
itispip 发表于 2024-12-16 00:29
这个的核心就是用蓝牙寄存器代替巴法云咯? ,,
但是,我手动执行了下 Core的Update Entity服务。我在和小爱 ...

操作是对的,我这里可以更新啊,你看下版本是不是最新的,还有看下是不是更新了但是页面没有展示最新的,可以通过脚本去执行更新,然后获取结果,这样准确点
作者: a431115    时间: 2024-12-16 09:05
yxb 发表于 2024-12-16 08:42
操作是对的,我这里可以更新啊,你看下版本是不是最新的,还有看下是不是更新了但是页面没有展示最新的, ...

兄弟按你这样操作相当于小爱音箱更改寄存器,HA获取寄存器状态强制更新语音-再获取语音信息完成自动化。
多了一层没必要的处理,
作者: yxb    时间: 2024-12-16 09:30
a431115 发表于 2024-12-16 09:05
兄弟按你这样操作相当于小爱音箱更改寄存器,HA获取寄存器状态强制更新语音-再获取语音信息完成自动化。
...

更改寄存器是为了及时响应,如果等对话内容自动更新,延迟可能会到30s
作者: bb10292513    时间: 2024-12-16 09:59
不谋而合 ,我也是这么玩得,而且不需要第三方逻辑
作者: 1100800824    时间: 2024-12-16 10:30
a431115 发表于 2024-12-16 09:05
兄弟按你这样操作相当于小爱音箱更改寄存器,HA获取寄存器状态强制更新语音-再获取语音信息完成自动化。
...

兄弟说的也是我想说的,不知道对不对,如果有了寄存器,我是不是可以用小爱音箱更改寄存器,HA根据寄存器状态直接做响应
作者: yxb    时间: 2024-12-16 10:50
1100800824 发表于 2024-12-16 10:30
兄弟说的也是我想说的,不知道对不对,如果有了寄存器,我是不是可以用小爱音箱更改寄存器,HA根据寄存器 ...

懂你意思了,如果你寄存器状态够多,是可以这样做,但是小爱个人训练会很难写,因为不同的对话需要设置不同的寄存器值。如果用对话内容判断,小爱个人训练那里可以把所有的命令写在一起,然后只执行一个开关动作,差别还是挺大的。
作者: yxb    时间: 2024-12-16 10:53
1100800824 发表于 2024-12-16 10:30
兄弟说的也是我想说的,不知道对不对,如果有了寄存器,我是不是可以用小爱音箱更改寄存器,HA根据寄存器 ...

而且这种方式可以接入语音助手,也可以接大模型,直接把对话内容传过去就可以
作者: 1100800824    时间: 2024-12-16 10:56
yxb 发表于 2024-12-16 10:50
懂你意思了,如果你寄存器状态够多,是可以这样做,但是小爱个人训练会很难写,因为不同的对话需要设置不 ...

我现在只是想到联动海尔热水器这一条,我觉得这么弄应该是可以的。如果是很多很多的话,我觉得你这个方法更合理,或者我看楼上有人说用智能灯的不同亮度值做触发条件,我觉得也还行,当然我还没有实际应用过,只是这么考虑
作者: a431115    时间: 2024-12-16 11:58
yxb 发表于 2024-12-16 10:53
而且这种方式可以接入语音助手,也可以接大模型,直接把对话内容传过去就可以 ...

你说得没错,2个方法各有优缺点
作者: 15717789960    时间: 2024-12-16 14:44
6666666666666666666666
作者: blobman    时间: 2024-12-16 17:29
a431115 发表于 2024-12-15 17:27
我是拼多多5折买的米家筒灯,买带调光和调色的,才15块钱包邮,买回来本来就是灯和控制器分离,将控制器 ...

灯的亮度数值可以作为自动化的触发条件吗?
作者: a431115    时间: 2024-12-16 21:14
本帖最后由 a431115 于 2024-12-16 21:15 编辑
blobman 发表于 2024-12-16 17:29
灯的亮度数值可以作为自动化的触发条件吗?

可以的,如图[attach]66057[/attach]
作者: itispip    时间: 2024-12-16 22:33
yxb 发表于 2024-12-16 08:42
操作是对的,我这里可以更新啊,你看下版本是不是最新的,还有看下是不是更新了但是页面没有展示最新的, ...

已经是最新版了。在Xiaomi MioT Auto设置了conversation的查询间隔是3秒。电脑上并排打开两个窗口,一个显示conversation的值,一个显示HA开发者工具的执行 core 服务的 update entity 界面。一对小爱说完,就立刻点击第二个窗口里的 "执行“按钮并同时观察第一个窗口里的值,仍然是要等待3-4秒值才会变化。
作者: xingkid    时间: 2024-12-16 22:53
本帖最后由 xingkid 于 2024-12-16 22:57 编辑

我直接用自动化监控【播放控制 conversation】的变化,测试响应延迟就两三秒,并没有这里说的30秒。

具体操作是用【小爱音箱的蓝牙Mesh网关】连接了一个【小米蓝牙Mesh无线开关】;在米家设置好按下开关后,小爱音箱执行固定文本;最后在HA后台用自动化监听文本变化。



作者: wpw72    时间: 2024-12-17 21:39
可以不用蓝牙开关状态寄存器来转,自动化中这样设置:
1,用小爱音箱的状态变化来触发
alias: 语音唤醒
entity_id:
  - sensor.xiaomi_l15a_e388_conversation
id: 语音唤醒
trigger: state
2,条件用
{{ (trigger.to_state|default(0)) and as_timestamp(now()) -
as_timestamp(trigger.to_state.attributes.timestamp) < 20 }}
3,执行用
choose:
  - conditions:
      - condition: template
        value_template: "{{ '开油烟机' in trigger.to_state.state }}"
    sequence:
      - type: turn_on
        device_id: b2345ba230921ddea3ce4b8729ae167
        entity_id: 964567806c70f25982484d06456aad6f
        domain: switch
    alias: 开油烟机
上面的开油烟机在小爱同学中训练好
作者: linyf    时间: 2024-12-18 08:26
yangrusen 发表于 2024-12-14 14:10
话说第三方平台比如巴法云或者涂鸦接入小爱的设备是不是不支持房间分类,这还是挺遗憾的,小度和天猫都可以 ...

名称前面加上分类名就行了,比如“书房灯光”,在分类到书房的小爱音箱喊他“关灯”,只会关闭名字叫“书房灯光”的设备
作者: yangrusen    时间: 2024-12-18 09:55
linyf 发表于 2024-12-18 08:26
名称前面加上分类名就行了,比如“书房灯光”,在分类到书房的小爱音箱喊他“关灯”,只会关闭名字叫“书 ...

嗯,我也探索出了这个办法。但是还有一个缺陷,就是没法批量执行。说关掉所有的灯或者关掉卧室所有的灯,他只能关一个。
作者: 萝卜斯基    时间: 2024-12-19 19:55
yxb 发表于 2024-12-15 08:41
自动化触发时执行的脚本流程贴出来,中间的if就是判断关键词执行对应操作,也可以交给大模型去处理。

...

你好,请教下,定义变量这一步出线错误:Message malformed: expected a dictionary for dictionary value @ data['sequence'][1]['variables']

怎么处理
作者: 萝卜斯基    时间: 2024-12-19 20:08
yxb 发表于 2024-12-15 08:41
自动化触发时执行的脚本流程贴出来,中间的if就是判断关键词执行对应操作,也可以交给大模型去处理。

...

可以截图看一下下面几个有条件执行动作里面的设置不
作者: yxb    时间: 2024-12-20 08:46
萝卜斯基 发表于 2024-12-19 19:55
你好,请教下,定义变量这一步出线错误:Message malformed: expected a dictionary for dictionary valu ...

解决了么
作者: yxb    时间: 2024-12-20 08:48
萝卜斯基 发表于 2024-12-19 20:08
可以截图看一下下面几个有条件执行动作里面的设置不
  1. alias: 小爱语音自动化
  2. sequence:
  3.   - action: homeassistant.update_entity
  4.     metadata: {}
  5.     data:
  6.       entity_id:
  7.         - sensor.xiaomi_l15a_1c4b_conversation
  8.   - variables:
  9.       result: "{{states.sensor.xiaomi_l15a_1c4b_conversation.state}}"
  10.   - if:
  11.       - condition: template
  12.         value_template: "{{"打开空调" in result}}"
  13.     then:
  14.       - device_id: 0a68bd24c560a717ca05d9ce62efb655
  15.         domain: text
  16.         entity_id: d02d9c9204b8ac70729cab8762c3d5f9
  17.         type: set_value
  18.         value: 好的,已完成
  19.       - if:
  20.           - condition: numeric_state
  21.             entity_id: climate.186916977074380_climate
  22.             attribute: outdoor_temperature
  23.             below: 20
  24.         then:
  25.           - action: climate.set_temperature
  26.             metadata: {}
  27.             data:
  28.               temperature: 22
  29.             target:
  30.               device_id: 0d0448747193414da6cb1f8ce8ceccfe
  31.         else:
  32.           - action: climate.set_temperature
  33.             metadata: {}
  34.             data:
  35.               temperature: 27
  36.             target:
  37.               device_id: 0d0448747193414da6cb1f8ce8ceccfe
  38.       - device_id: 0d0448747193414da6cb1f8ce8ceccfe
  39.         domain: climate
  40.         entity_id: 8e0d77266555f56dff01330ee2e9bbdd
  41.         type: set_hvac_mode
  42.         hvac_mode: auto
  43.   - if:
  44.       - condition: template
  45.         value_template: "{{"关闭空调" in result}}"
  46.     then:
  47.       - device_id: 0a68bd24c560a717ca05d9ce62efb655
  48.         domain: text
  49.         entity_id: d02d9c9204b8ac70729cab8762c3d5f9
  50.         type: set_value
  51.         value: 好的,已完成
  52.       - type: turn_off
  53.         device_id: 0d0448747193414da6cb1f8ce8ceccfe
  54.         entity_id: a76152cf3a5327086434b7ca0a4dedbf
  55.         domain: switch
  56.   - if:
  57.       - condition: template
  58.         value_template: "{{"洗衣服" in result}}"
  59.     then:
  60.       - type: turn_on
  61.         device_id: 9063a96b43f206d1f26d5329c21ded29
  62.         entity_id: d9e713ee62fa5b002aee70745c15cdf7
  63.         domain: switch
  64.       - type: turn_on
  65.         device_id: 9063a96b43f206d1f26d5329c21ded29
  66.         entity_id: 87e83b0c8f4e8673d5269621c17dfe0e
  67.         domain: switch
  68.       - device_id: 0a68bd24c560a717ca05d9ce62efb655
  69.         domain: text
  70.         entity_id: d02d9c9204b8ac70729cab8762c3d5f9
  71.         type: set_value
  72.         value: 好的,已完成
  73.   - if:
  74.       - condition: template
  75.         value_template: "{{"开热水" in result}}"
  76.     then:
  77.       - type: turn_on
  78.         device_id: 95e162fa76bdd00c6d06dd83a8f47846
  79.         entity_id: 9abba7fadea67c24a52b1d5c0c438f1b
  80.         domain: switch
  81.       - type: turn_on
  82.         device_id: 95e162fa76bdd00c6d06dd83a8f47846
  83.         entity_id: 0c3065d4cc2dbee7124abd8ae82574c7
  84.         domain: switch
  85.       - device_id: 0a68bd24c560a717ca05d9ce62efb655
  86.         domain: text
  87.         entity_id: d02d9c9204b8ac70729cab8762c3d5f9
  88.         type: set_value
  89.         value: 好的,已完成
  90.   - type: turn_off
  91.     device_id: d66dabbe978e45149ed01d7c7071c776
  92.     entity_id: 43443fc6e8343c6992e98a9f6554ecd8
  93.     domain: switch
  94. description: ""
复制代码


作者: 萝卜斯基    时间: 2024-12-20 14:25
yxb 发表于 2024-12-20 08:46
解决了么

没解决....
作者: hahe    时间: 2025-1-8 10:42
刚装的海尔燃气热水器,通过巴法云有点延迟,后来用小米中枢网关的虚拟事件,实现本地化运行,延迟可忽略不计,也比巴法云稳定。
作者: itispip    时间: 2025-1-12 22:31
hahe 发表于 2025-1-8 10:42
刚装的海尔燃气热水器,通过巴法云有点延迟,后来用小米中枢网关的虚拟事件,实现本地化运行,延迟可忽略不 ...

你指的是用米家控制海尔,还是用HA控制?
作者: rz12345    时间: 2025-1-13 10:30
学习学习,收藏了
作者: yb997471    时间: 2025-1-15 20:47
a431115 发表于 2024-12-14 17:24
监听对话内容延迟太大
监听灯的亮度变化,基本无延迟

买了一个mesh灯,通过Xiaomi Miot Auto实体接入,没有亮度的实体呢,没有亮度实体监测不到亮度值。请问您买的哪一块灯,亮度ha怎么接收到的
作者: yb997471    时间: 2025-1-15 20:59
itispip 发表于 2024-12-16 00:32
求15的蓝牙mesh灯链接。(已解决 )

求链接啊
作者: itispip    时间: 2025-1-16 00:24
yb997471 发表于 2025-1-15 20:59
求链接啊

PDD上大把。
作者: yb997471    时间: 2025-1-16 16:22
itispip 发表于 2025-1-16 00:24
PDD上大把。

买回来测试了自动化没有亮度设置,只有亮一点或者暗一点
作者: mobility    时间: 2025-1-22 16:02
我个人的理解是,只要收到 某一状态的变化,就读取 文本信息,那 小米zigbbe插座 ,也可以吧。
作者: feileekho    时间: 2025-2-12 09:46
想請教一個最基礎的問題,大家有遇到小愛訓練的自定義指令,同一句話(例如是 切换电脑),小愛對話記錄那邊確認是同一句,但是小愛不是每次都可以觸發到 小愛訓練 的內容,有時候會亂回覆,大家有什麼解決或避免方法嗎?
作者: gtyun    时间: 2025-2-15 14:19
a431115 发表于 2024-12-14 17:16
一开始我也使用插件在homeassistant虚拟一个可以调节亮度的灯出来,然后接入巴法云,在小爱使用个人训练改 ...

怎么修改灯的亮度?是用模式吗
作者: 玩AI的辣条哥    时间: 2025-2-15 21:37
真棒,感谢分享。
作者: Luz_HA    时间: 2025-3-2 21:06
a431115 发表于 2024-12-14 17:16
一开始我也使用插件在homeassistant虚拟一个可以调节亮度的灯出来,然后接入巴法云,在小爱使用个人训练改 ...

好思路,刚好手上有一个米家空调伴侣空闲着,可以用它的温度值啊模式啊风速啊什么的来作为HA的自动化触发条件
作者: miaoguoqiang    时间: 2025-3-7 09:28
hasslife直接就可以控制了
作者: zhengkai123    时间: 2025-3-11 15:02
想问一下使用自动化优化过后一套下来延迟是多少秒
作者: gzm001    时间: 2025-7-17 10:17
请教:目前我有小米音箱,小米除湿机,小米扫地机器人。 如果想按楼主思路实现,是不是还要买两件东西:小米网关和小米网关控制的某个设备??
作者: yxb    时间: 2025-7-18 14:17
gzm001 发表于 2025-7-17 10:17
请教:目前我有小米音箱,小米除湿机,小米扫地机器人。 如果想按楼主思路实现,是不是还要买两件东西:小 ...

你的除湿机和扫地机器人都可以直接用小米音箱控制呀,为什么还要买网关
作者: yxb    时间: 2025-7-18 14:18
zhengkai123 发表于 2025-3-11 15:02
想问一下使用自动化优化过后一套下来延迟是多少秒

感觉1秒左右吧,实时性跟网络有关,跟小米的服务器也有关,反正没有明显的延迟
作者: gzm001    时间: 6 天前
yxb 发表于 2025-7-18 14:17
你的除湿机和扫地机器人都可以直接用小米音箱控制呀,为什么还要买网关 ...

就是还有非小米设备想语音控制啊




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5