找回密码
 立即注册
楼主: bugensui

[技术探讨] 打开设备和关闭设备的简单意图分享

[复制链接]

6

主题

69

回帖

375

积分

中级会员

积分
375
金钱
300
HASS币
0
发表于 2025-1-14 12:22:13 | 显示全部楼层
学习,谢谢分享
回复

使用道具 举报

168

主题

2521

回帖

8386

积分

元老级技术达人

积分
8386
金钱
5692
HASS币
30
 楼主| 发表于 2025-1-14 12:28:16 | 显示全部楼层
hzcoolwind 发表于 2025-1-14 12:02
是的,ai不稳定是真的,目前还只能玩玩。   不过我是把这些简单的打开关闭设备语音控制用小爱、巴法云就 ...

巴法云也不好,毕竟要走外网,最好的其实我这样,家里设备如果不多的情况下,就全部写死在自动化规则里。设备的名字是固定的,打开某某,关闭某某,只要你发音准确,100%能执行,用ai集成,即使chatgpt,有的时候会正确处理,有的时候,就不会了,

你说打开书房灯,这个时候,就是自动化意图直接处理了。如果你说的不标准,你说:帮我打开下书房的灯,这个时候,自动化就不触发了,因为他匹配不上,这个时候ai集成就会处理了。虽然慢了1-2秒,但是也会去执行,
回复

使用道具 举报

16

主题

216

回帖

2555

积分

论坛技术达人

积分
2555
金钱
2303
HASS币
40
发表于 2025-1-14 14:20:20 | 显示全部楼层
bugensui 发表于 2025-1-14 12:28
巴法云也不好,毕竟要走外网,最好的其实我这样,家里设备如果不多的情况下,就全部写死在自动化规则里。 ...

你的语音控制设备是什么,是手机ha app吧,  用小爱音箱呢,不用巴法云好像还没看到很完美的解决方案
回复

使用道具 举报

168

主题

2521

回帖

8386

积分

元老级技术达人

积分
8386
金钱
5692
HASS币
30
 楼主| 发表于 2025-1-14 14:29:23 | 显示全部楼层
hzcoolwind 发表于 2025-1-14 14:20
你的语音控制设备是什么,是手机ha app吧,  用小爱音箱呢,不用巴法云好像还没看到很完美的解决方案 ...

Home Assistant Voice官方硬件,这个买来,全家都可以用,手机app不行,还没有苹果的siri方便,小爱音响也可以,ha官方硬件,是本地的,不需要联网,小爱是要联网的
回复

使用道具 举报

16

主题

216

回帖

2555

积分

论坛技术达人

积分
2555
金钱
2303
HASS币
40
发表于 2025-1-14 15:03:56 | 显示全部楼层
bugensui 发表于 2025-1-14 14:29
Home Assistant Voice官方硬件,这个买来,全家都可以用,手机app不行,还没有苹果的siri方便,小爱音响 ...

这个可以,不错
回复

使用道具 举报

55

主题

1401

回帖

6309

积分

论坛DIY达人

积分
6309
金钱
4853
HASS币
30
发表于 2025-1-14 15:55:33 | 显示全部楼层
bugensui 发表于 2025-1-14 10:36
不一样,这个可以享受内置ai快速处理的同时,还可以用ai处理

ASR PRO的话,我在3层楼的任何个房间说语音命令,都能控制,您·这个方案能否实现?
回复

使用道具 举报

168

主题

2521

回帖

8386

积分

元老级技术达人

积分
8386
金钱
5692
HASS币
30
 楼主| 发表于 2025-1-14 16:00:35 | 显示全部楼层
本帖最后由 bugensui 于 2025-1-14 16:03 编辑
sorrypqa 发表于 2025-1-14 15:55
ASR PRO的话,我在3层楼的任何个房间说语音命令,都能控制,您·这个方案能否实现? ...

不行,这个不是我方案的问题,是ha官方语音助手硬件麦克风的问题,他的麦克风做不到,如果他的麦克风能3层楼听到,那就肯定能执行,是他的硬件问题
我测试过了。官方硬件,只能隔一堵墙,除非自己想办法解决远距离收音问题。
回复

使用道具 举报

29

主题

1386

回帖

6370

积分

元老级技术达人

积分
6370
金钱
4930
HASS币
100
发表于 2025-1-14 16:39:27 | 显示全部楼层
bugensui 发表于 2025-1-13 15:07
我自己写的,你自己新建个自动化就行了,简单的意图(打开和关闭设备),直接用自动化接管 ...

奥明白了
回复

使用道具 举报

16

主题

216

回帖

2555

积分

论坛技术达人

积分
2555
金钱
2303
HASS币
40
发表于 2025-1-16 14:59:05 | 显示全部楼层
还是这个方法直接有效
回复

使用道具 举报

0

主题

33

回帖

231

积分

中级会员

积分
231
金钱
198
HASS币
0
发表于 2025-2-7 10:39:31 | 显示全部楼层
下面是我将作者的代码输入deep seek后返回的:
你的配置是一个基于 Home Assistant 自动化 的语音控制脚本,用于通过语音命令打开或关闭设备(如电视、灯光等)。以下是对配置的详细解析和优化建议:

一、配置解析
1. 触发器(Triggers)
打开设备意图:

yaml
复制
triggers:
  - trigger: conversation
    command:
      - 打开(电视|客厅电视|空调|电风扇|窗帘|吊灯|筒灯|厨房灯|卫生间灯|书房灯|阳台灯|入户灯)
    id: open
当用户说出类似“打开电视”或“打开厨房灯”时,触发 open 意图。

关闭设备意图:

yaml
复制
triggers:
  - trigger: conversation
    command:
      - 关闭(电视|客厅电视|空调|电风扇|窗帘|吊灯|筒灯|厨房灯|卫生间灯|书房灯|阳台灯|入户灯)
    id: close
当用户说出类似“关闭电视”或“关闭厨房灯”时,触发 close 意图。

2. 动作(Actions)
打开设备意图:

检查触发命令是否为“打开电视”或“打开客厅电视”:

yaml
复制
if:
  - condition: template
    value_template: "{{ trigger.sentence in ('打开电视', '打开客厅电视') }}"
如果设备未连接(通过 binary_sensor 判断),执行脚本 script.1663328520990 打开电视。

返回语音响应:“客厅电视已打开”。

检查触发命令是否为“打开厨房灯”:

yaml
复制
if:
  - condition: template
    value_template: "{{ trigger.sentence == '打开厨房灯' }}"
如果灯处于关闭状态(通过 light 实体判断),调用 light.turn_on 服务打开灯。

返回语音响应:“厨房灯已打开”。

关闭设备意图:

逻辑与“打开设备意图”类似,但执行关闭操作。

3. 模式(Mode)
mode: single:确保同一时间只有一个实例运行,避免重复触发。

二、优化建议
1. 简化条件判断
当前配置中,每个设备都需要单独的条件判断,导致代码冗长。可以通过 字典映射 和 循环 简化逻辑:

yaml
复制
actions:
  - alias: 打开设备意图
    if:
      - condition: trigger
        id: open
    then:
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence in ('打开电视', '打开客厅电视') }}"
            sequence:
              - if:
                  - condition: device
                    type: is_not_connected
                    device_id: 07df812f488fc97948cb2f06f1923dfd
                    entity_id: 181c8dd54283152d56817940fd2b3648
                    domain: binary_sensor
                then:
                  - service: script.1663328520990
              - set_conversation_response: 客厅电视已打开
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence == '打开厨房灯' }}"
            sequence:
              - if:
                  - condition: device
                    type: is_off
                    device_id: 264f69209f99770695f4f8b4371262f8
                    entity_id: 1d03ed53a167a83b7ee9322cc6bbb611
                    domain: light
                then:
                  - service: light.turn_on
                    target:
                      entity_id: light.sonoff_minir4_chufang_lamp
              - set_conversation_response: 厨房灯已打开
2. 动态设备映射
使用字典将语音命令与设备实体动态关联,避免硬编码:

yaml
复制
variables:
  device_map:
    打开电视:
      entity_id: media_player.living_room_tv
      service: script.turn_on_tv
    打开厨房灯:
      entity_id: light.sonoff_minir4_chufang_lamp
      service: light.turn_on
actions:
  - alias: 打开设备意图
    if:
      - condition: trigger
        id: open
    then:
      - service: "{{ device_map[trigger.sentence].service }}"
        target:
          entity_id: "{{ device_map[trigger.sentence].entity_id }}"
      - set_conversation_response: "{{ trigger.sentence }}已打开"
3. 错误处理
添加默认处理逻辑,当命令不匹配时返回提示:

yaml
复制
actions:
  - alias: 打开设备意图
    if:
      - condition: trigger
        id: open
    then:
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence in device_map.keys() }}"
            sequence:
              - service: "{{ device_map[trigger.sentence].service }}"
                target:
                  entity_id: "{{ device_map[trigger.sentence].entity_id }}"
              - set_conversation_response: "{{ trigger.sentence }}已打开"
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence not in device_map.keys() }}"
            sequence:
              - set_conversation_response: "未找到匹配的设备"
4. 日志记录
添加日志记录以便调试:

yaml
复制
actions:
  - alias: 打开设备意图
    if:
      - condition: trigger
        id: open
    then:
      - service: system_log.write
        data:
          level: info
          message: "用户尝试打开设备:{{ trigger.sentence }}"
三、完整优化示例
yaml
复制
alias: 打开和关闭设备意图
description: ""
variables:
  device_map:
    打开电视:
      entity_id: media_player.living_room_tv
      service: script.turn_on_tv
    打开厨房灯:
      entity_id: light.sonoff_minir4_chufang_lamp
      service: light.turn_on
    关闭电视:
      entity_id: media_player.living_room_tv
      service: script.turn_off_tv
    关闭厨房灯:
      entity_id: light.sonoff_minir4_chufang_lamp
      service: light.turn_off
triggers:
  - trigger: conversation
    command:
      - 打开(电视|客厅电视|空调|电风扇|窗帘|吊灯|筒灯|厨房灯|卫生间灯|书房灯|阳台灯|入户灯)
    id: open
  - trigger: conversation
    command:
      - 关闭(电视|客厅电视|空调|电风扇|窗帘|吊灯|筒灯|厨房灯|卫生间灯|书房灯|阳台灯|入户灯)
    id: close
conditions: []
actions:
  - alias: 打开设备意图
    if:
      - condition: trigger
        id: open
    then:
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence in device_map.keys() }}"
            sequence:
              - service: "{{ device_map[trigger.sentence].service }}"
                target:
                  entity_id: "{{ device_map[trigger.sentence].entity_id }}"
              - set_conversation_response: "{{ trigger.sentence }}已打开"
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence not in device_map.keys() }}"
            sequence:
              - set_conversation_response: "未找到匹配的设备"
    enabled: true
  - alias: 关闭设备意图
    if:
      - condition: trigger
        id: close
    then:
      - choose:
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence in device_map.keys() }}"
            sequence:
              - service: "{{ device_map[trigger.sentence].service }}"
                target:
                  entity_id: "{{ device_map[trigger.sentence].entity_id }}"
              - set_conversation_response: "{{ trigger.sentence }}已关闭"
          - conditions:
              - condition: template
                value_template: "{{ trigger.sentence not in device_map.keys() }}"
            sequence:
              - set_conversation_response: "未找到匹配的设备"
    enabled: true
mode: single
四、总结
优化点:通过字典映射和动态逻辑简化配置,提高可维护性。

扩展性:新增设备只需更新 device_map,无需修改核心逻辑。

调试建议:使用日志记录和默认响应提升用户体验。

如果有更多需求(如支持更多设备或复杂逻辑),请补充说明!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-5-5 01:12 , Processed in 0.962125 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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