请选择 进入手机版 | 继续访问电脑版

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

 找回密码
 立即注册
查看: 303|回复: 14

[技术探讨] 请教小米人体off状态时长trigger写法

[复制链接]

1

主题

13

帖子

86

积分

注册会员

Rank: 2

积分
86
金钱
73
HASS币
0
发表于 2020-11-6 23:14:53 | 显示全部楼层 |阅读模式
本帖最后由 dongqiyer 于 2020-11-6 23:36 编辑

新手请教个问题,还请不吝赐教,谢谢!

使用zigbee2mqtt网关,加上小米人体感应传感器控制关灯。
看了zigbee2mqtt的文档,有四个属性,见 https://www.zigbee2mqtt.io/devices/RTCGQ11LM.html如下:

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "%"
    value_template: "{{ value_json.battery }}"
    device_class: "battery"

binary_sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    value_template: "{{ value_json.occupancy }}"
    payload_on: true
    payload_off: false
    device_class: "motion"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "lx"
    value_template: "{{ value_json.illuminance }}"
    device_class: "illuminance"

sensor:
  - platform: "mqtt"
    state_topic: "zigbee2mqtt/<FRIENDLY_NAME>"
    availability_topic: "zigbee2mqtt/bridge/state"
    unit_of_measurement: "lqi"
    value_template: "{{ value_json.linkquality }}"
    icon: "mdi:signal"
设置自动加入,hass通过zigbee2mqtt,能够自动接入小米人体感应传感器,
有四个实体,binary_sensor.0x00158d0004ab35bc_occupancy,binary_sensor.0x00158d0004ab35bc_battery等。


-想要实现关灯操作,现在使用的逻辑是 to: 'off' 关灯(下面代码中的trigger1,但这种逻辑一定要捕捉到 到off 的转换瞬间,配合延时;
这个逻辑有个缺陷,比如人体感应已连续处于off态4个小时,此时有人遥控开了灯,但一直没有触发人体感应,那这个逻辑就无法关灯,因为上一次to off至今已超过4小时了,早过了180秒。
-请问能否加上判断处于 off 状态超过多长时间,触发关灯操作。尝试写了下面代码的trigger2,测试无效。
-我还没有发现zigbee2mqtt中有类似小米网关的no_motion_since 类似属性
-请教这个功能改如何写?新人对基本规范还不太熟悉,希望大家多指教,谢谢!
- alias: Respond_kitchen_motion_off
  initial_state: true
  trigger:
    - platform: state
      entity_id: binary_sensor.0x00158d0004ab35bc_occupancy
      to: 'off'
      for:
        seconds: 180
    - platform: template
      value_template: "{{ is_state('binary_sensor.0x00158d0004ab35bc_occupancy', 'off') }}"
      for:
        seconds: 180





回复

使用道具 举报

1

主题

71

帖子

399

积分

中级会员

Rank: 3Rank: 3

积分
399
金钱
328
HASS币
5
发表于 2020-11-6 23:41:25 | 显示全部楼层
我用node red 感觉比你这个好实现
回复

使用道具 举报

1

主题

13

帖子

86

积分

注册会员

Rank: 2

积分
86
金钱
73
HASS币
0
 楼主| 发表于 2020-11-6 23:51:26 | 显示全部楼层
请问可以判断处于 off状态的时长么?ha如何写?多谢
回复

使用道具 举报

14

主题

578

帖子

2524

积分

金牌会员

Rank: 6Rank: 6

积分
2524
金钱
1941
HASS币
10
发表于 2020-11-6 23:57:52 | 显示全部楼层
trigger:
    - platform: template
      value_template: '{{states.binary_sensor.motion_sensor_158d0XXXXX.attributes["No motion since"] | int >= 180}}'
回复

使用道具 举报

14

主题

578

帖子

2524

积分

金牌会员

Rank: 6Rank: 6

积分
2524
金钱
1941
HASS币
10
发表于 2020-11-6 23:59:01 | 显示全部楼层
没详细看帖子……哈哈哈
回复

使用道具 举报

10

主题

92

帖子

845

积分

论坛分享达人

积分
845
金钱
748
HASS币
60
发表于 2020-11-7 00:18:18 | 显示全部楼层
本帖最后由 dscao 于 2020-11-7 00:25 编辑

我有点不明白这种场景需求,如果有人遥控开了灯,那不是应该遥控关灯吗?或者说不需要通过人体判断来自动关灯啊。真的需要这种场景我也想到个思路如下,未测试是否可行,仅供参考。

自动化A:
如果说任何方式开灯后一段时间都需要关灯,那用“灯亮”作为触发条件,延时180S关灯。

自动化B:
检测到有人移动为触发条件,1、关闭自动化A,2、符合开灯条件则执行1开灯,

自动化C:
to: 'off' 为触发条件,1、关灯,2、打开自动化A。

我现在用的是蓝牙夜灯,有个“无人移动时间”传感器,通过它就很容易实现大部分情况下适用的关灯。据我目前的认识,这个触发条件一定是变化到一个状态,是一个瞬间的事件或变化,不能是一个持续的状态。也许是我还不知道,毕竟入坑时间也不长,才几个月。

前些天入了一个小米多模网关,以后也准备弄个zigbeeg学习学习。


回复

使用道具 举报

1

主题

13

帖子

86

积分

注册会员

Rank: 2

积分
86
金钱
73
HASS币
0
 楼主| 发表于 2020-11-7 00:50:08 | 显示全部楼层
余歌唱晚 发表于 2020-11-6 23:57
trigger:
    - platform: template
      value_template: '{{states.binary_sensor.motion_sensor_158d0X ...

多谢热心回复!
现在用的zigbee2mqtt网关,好像没有No motion since 这个属性,小米网关中应该是支持的。我不确定,请明示,谢谢!
回复

使用道具 举报

1

主题

13

帖子

86

积分

注册会员

Rank: 2

积分
86
金钱
73
HASS币
0
 楼主| 发表于 2020-11-7 00:54:28 | 显示全部楼层
本帖最后由 dongqiyer 于 2020-11-7 00:58 编辑
dscao 发表于 2020-11-7 00:18
我有点不明白这种场景需求,如果有人遥控开了灯,那不是应该遥控关灯吗?或者说不需要通过人体判断来自动关 ...

关于您所述的思路,我大体明白一部分,特别是自动化A,更换了触发条件为“灯亮”,很有启发。
还不会写 如何关闭自动化A: 有点菜,刚学了一周。 automation 的id 就是这个么?“ - alias: Respond_button_double_click”
刚才看了一个input_datatime 的用法,不知道在 to: 'off' 时,使用timestamp记录能否实现,不知道这是否需要用mqtt topic 做


谢谢!
回复

使用道具 举报

1

主题

13

帖子

86

积分

注册会员

Rank: 2

积分
86
金钱
73
HASS币
0
 楼主| 发表于 2020-11-7 03:58:39 | 显示全部楼层
现在用 time pattern 触发,配合input_boolean,凑活实现了主贴中的功能。
有没有更合适,简洁的方法?
configration:
input_boolean:
  trigger_washroom_motion_close_allow:
    name: washroom close allow 
    icon: mdi:kettle


automation:
# 更改trigger_washroom_motion_close_allow状态
- alias: change_trigger_washroom_motion_close_allow
  initial_state: true
  trigger:
    - platform: state
      entity_id: binary_sensor.0x00158d000542c12b_occupancy
      to: 'on'
    - platform: state
      entity_id: binary_sensor.0x00158d000542c12b_occupancy
      to: 'off'
  action:
      - service_template: "homeassistant.turn_{% if trigger.to_state.state == 'off' %}on{% else %}off{% endif %}"
        entity_id: input_boolean.trigger_washroom_motion_close_allow
- alias: Respond_washroom_door_open_timeout_2_light_fan_off
  initial_state: true
  trigger:
    - platform: time_pattern
      minutes: "/2"
  condition:
     condition: and
     conditions:    
       - condition: state
         entity_id: input_boolean.trigger_washroom_motion
         state: 'on'
       - condition: state
         entity_id: switch.hassmart_0f494e_1
         state: 'on'
       - condition: state
         entity_id: binary_sensor.0x00158d0003983d98_contact
         state: 'on'
  action:
    - service: switch.turn_off
      entity_id: switch.hassmart_0f494e_1
    - service: switch.turn_off
      entity_id: switch.hassmart_0f494e_2
回复

使用道具 举报

1

主题

13

帖子

86

积分

注册会员

Rank: 2

积分
86
金钱
73
HASS币
0
 楼主| 发表于 2020-11-7 09:36:08 来自手机 | 显示全部楼层
本帖最后由 dongqiyer 于 2020-11-7 09:37 编辑

我用的是门磁加小米人体,照着论坛大神们的逻辑,但是写的有点麻烦。1 开门或有人,开灯
2 开灯且关门,开风扇
3 每2分钟,检查开灯且开门,同时检查关闭使能有效性,关灯关风扇
4 每20分钟,检查开灯且关门,同时检查关闭使能有效性,关灯关风扇
5 人体动作检测,如有 to on,关闭上面的使能有效标识,如有to off,打开标识  用了很复杂方法,是为了避开长时间没有 人体状态转换,而其他非常规手动开灯的关闭处理。
怎么做才能更简洁有效呢?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2020-12-4 03:30 , Processed in 0.091432 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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