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

 找回密码
 立即注册
查看: 515|回复: 11

[技术探讨] 如何在自动化中使用日志作为条件?

[复制链接]

22

主题

241

帖子

1658

积分

金牌会员

Rank: 6Rank: 6

积分
1658
金钱
1417
HASS币
0
发表于 2024-7-16 10:12:33 | 显示全部楼层 |阅读模式
本帖最后由 wpw72 于 2024-7-17 09:39 编辑

有这么个控制风扇开关的需求,当温度高于设定温度时,人在传感器off到on触发打开风扇,人在传感器状态on到off触发关闭风扇。如何增加控制条件,当风扇是手动打开的时候,不执行人在传感器状态on到off触发关闭风扇。如何将设备日志中的“已开启 由自动化触发。。。”转化为一个实体使用?各位大神有什么好的思路?是否可以用context?
经测试,目前解决方案如下:
1,增加一个辅助元素input_select用来记录实体是由物理按键开启、HA用户界面开启还是HA自动化开启,选项为:physical_device、 HA_user_interface、HA_automation。
2,设置一自动化来设置该辅助元素的值。由需监控实体状态转为“on”时触发,记下实体是触发自物理按键、HA用户界面还是HA自动化
trigger:
  - platform: state
    entity_id:
      - switch.dining_room_switch #受监控的实体对象
    to: "on"
condition: []
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.context.id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.parent_id == none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.user_id == none }}"
        sequence:
          - alias: 切换状态
            service: input_select.select_option
            data:
              option: physical_device
            target:
              entity_id: input_select.fan_dining_room_trigger_by
        alias: 物理按键
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.context.id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.parent_id == none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.user_id != none }}"
        sequence:
          - alias: 切换状态
            service: input_select.select_option
            data:
              option: HA_user_interface
            target:
              entity_id: input_select.fan_dining_room_trigger_by
        alias: HA用户界面
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.context.id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.parent_id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.user_id == none }}"
        sequence:
          - alias: 切换状态
            service: input_select.select_option
            data:
              option: HA_automation
            target:
              entity_id: input_select.fan_dining_room_trigger_by
        alias: HA自动化
mode: restart
3,在设备的自动化中使用该辅助元素,在设备关闭的自动化中,判断辅助元素值非物理按键时,执行自动关闭。
action:
  - choose:
       - conditions:
          - condition: or
            conditions:
              - condition: trigger
                id:
                  - 离家
                  - 睡觉
              - condition: and
                conditions:
                  - condition: trigger
                    id:
                      - 餐厅没人
                  - condition: not
                    conditions:
                      - condition: state
                        entity_id: input_select.fan_dining_room_trigger_by
                        state: physical_device
        sequence:
          - service: fan.turn_off
            data: {}
            target:
              device_id: a943c8d3b35d1cd926480fc4a32a4ab4
这么做能实现所需功能,如大家有更简洁方法,欢迎交流。




微信图片_20240717093811.png
回复

使用道具 举报

4

主题

50

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
金钱
184
HASS币
0
发表于 2024-7-16 11:03:10 | 显示全部楼层
设备有办法区分是手动吗?蹲一个
回复

使用道具 举报

7

主题

346

帖子

3081

积分

论坛元老

Rank: 8Rank: 8

积分
3081
金钱
2735
HASS币
0
发表于 2024-7-16 11:19:50 | 显示全部楼层
好问题,铜球
回复

使用道具 举报

9

主题

216

帖子

1811

积分

论坛UI达人

积分
1811
金钱
1595
HASS币
0
发表于 2024-7-16 12:36:09 | 显示全部楼层
本帖最后由 hhh. 于 2024-7-16 12:37 编辑

思路:通过运行“当温度高于设定温度时,人在传感器off到on触发打开风扇”,去判断属于手动还是自动,也就是说默认手动。

使用自动化实现:

触发条件:自动开启风扇自动化已运行

环境条件:自动关闭风扇自动化已关闭

动作: 打开自动关闭风扇自动化


自动关闭风扇自动化如下:

触发条件:  人体存在传感器状态on到off

动作:关闭风扇+延时10秒+关闭自动关闭风扇自动化



高阶自动化:
思路:完全自动化执行,人在开,人走关。

自动开启风扇自动化:
  
触发条件:时间戳(每5分钟)+ 人体存在传感器已触发+ 温度高于设定值  
环境条件:温度高于设定值 + 人体存在传感器已触发

动作:开启风扇

自动关闭风扇自动化:

触发条件:时间戳(每5分钟)+ 人体存在传感器未触发 + 风扇打开已持续30秒
  
环境条件:人体存在传感器未触发已持续2分钟 +确认风扇已打开

动作:关闭风扇



回复

使用道具 举报

22

主题

241

帖子

1658

积分

金牌会员

Rank: 6Rank: 6

积分
1658
金钱
1417
HASS币
0
 楼主| 发表于 2024-7-16 14:07:31 | 显示全部楼层
hhh. 发表于 2024-7-16 12:36
思路:通过运行“当温度高于设定温度时,人在传感器off到on触发打开风扇”,去判断属于手动还是自动,也就 ...

我是想要实现电扇如果是自动化触发开的就由自动化触发关,手动开的不要被自动化触发关。
回复

使用道具 举报

9

主题

216

帖子

1811

积分

论坛UI达人

积分
1811
金钱
1595
HASS币
0
发表于 2024-7-16 14:11:32 | 显示全部楼层
wpw72 发表于 2024-7-16 14:07
我是想要实现电扇如果是自动化触发开的就由自动化触发关,手动开的不要被自动化触发关。 ...

上述自动化思路,就是如此啊:“自动化触发开的就由自动化触发关,手动开的不要被自动化触发关。”

不对吗?
回复

使用道具 举报

22

主题

241

帖子

1658

积分

金牌会员

Rank: 6Rank: 6

积分
1658
金钱
1417
HASS币
0
 楼主| 发表于 2024-7-16 14:13:10 | 显示全部楼层
hhh. 发表于 2024-7-16 14:11
上述自动化思路,就是如此啊:“自动化触发开的就由自动化触发关,手动开的不要被自动化触发关。”

不对 ...

我再来仔细研究
回复

使用道具 举报

22

主题

241

帖子

1658

积分

金牌会员

Rank: 6Rank: 6

积分
1658
金钱
1417
HASS币
0
 楼主| 发表于 2024-7-16 14:16:36 | 显示全部楼层
hhh. 发表于 2024-7-16 14:11
上述自动化思路,就是如此啊:“自动化触发开的就由自动化触发关,手动开的不要被自动化触发关。”

不对 ...

能给个范例吗?看得直观些
回复

使用道具 举报

22

主题

241

帖子

1658

积分

金牌会员

Rank: 6Rank: 6

积分
1658
金钱
1417
HASS币
0
 楼主| 发表于 2024-7-16 15:46:58 | 显示全部楼层
本帖最后由 wpw72 于 2024-7-16 16:16 编辑

查了些资料,目前这个思路:增加一个辅助元素input_select,选项为物理按键、HA用户界面、HA自动化。设置一自动化来设置该辅助元素的值。
trigger:
  - platform: state
    entity_id:
      - switch.dining_room_switch
    to: "on"
condition: []
action:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.context.id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.parent_id == none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.user_id == none }}"
        sequence:
          - alias: 切换状态
            service: input_select.select_option
            data:
              option: physical_device
            target:
              entity_id: input_select.fan_dining_room_trigger_by
        alias: 物理按键
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.context.id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.parent_id == none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.user_id != none }}"
        sequence:
          - alias: 切换状态
            service: input_select.select_option
            data:
              option: HA_user_interface
            target:
              entity_id: input_select.fan_dining_room_trigger_by
        alias: HA用户界面
      - conditions:
          - condition: template
            value_template: "{{ trigger.to_state.context.id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.parent_id != none }}"
          - condition: template
            value_template: "{{ trigger.to_state.context.user_id == none }}"
        sequence:
          - alias: 切换状态
            service: input_select.select_option
            data:
              option: HA_automation
            target:
              entity_id: input_select.fan_dining_room_trigger_by
        alias: HA自动化
mode: restart
再将此辅助元素状态用于自动化,当辅助元素值为物理按键时,不执行自动关闭。
回复

使用道具 举报

7

主题

346

帖子

3081

积分

论坛元老

Rank: 8Rank: 8

积分
3081
金钱
2735
HASS币
0
发表于 2024-7-16 17:27:42 | 显示全部楼层
wpw72 发表于 2024-7-16 15:46
查了些资料,目前这个思路:增加一个辅助元素input_select,选项为物理按键、HA用户界面、HA自动化。设置一 ...

大佬厉害,思路应该ok,不过感觉实现太麻烦。
这方面ha目前还不大好使,期待日后的进化
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-9-8 08:56 , Processed in 0.138438 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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