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

 找回密码
 立即注册
查看: 1958|回复: 5

[技术探讨] ESPHOME的延时执行代码怎样写才会执行最后一次的触发延时?

[复制链接]

8

主题

27

帖子

174

积分

注册会员

Rank: 2

积分
174
金钱
147
HASS币
0
发表于 2023-4-11 03:40:12 | 显示全部楼层 |阅读模式
ESPHOME的延时执行代码怎样写才会执行最后一次的触发延时?
感应传感器延时时间是 5秒。 想在ESPHOME代码增加延时时间为60秒。

现在问题是在传感器5秒内没再次触发时状态就是OFF, 60内秒重复触发多次就会有多次OFF。代码中的延时60秒也会有多次重叠在倒计时中。这样子会让有人在动时也会执行多次关灯指令。

怎样才能在OFF后重置之前的60秒  重新计算只执行最后一次倒计时60秒。

怎样才能让传感器在60秒内多次OFF  只执行最后一次延时60秒?

作用是有人在动时开灯,人走开60秒后就关灯。 不接入HA的,装在室外,单独运行。


11.jpg




switch:
  - platform: gpio
    name: "ld1030灯"
    restore_mode: ALWAYS_OFF
    id: "switch"
    pin: 2




binary_sensor:
  - platform: gpio
    device_class: door
    id: ld1030
    name: "ld1030"
    pin:
      number: 0
      mode: INPUT_PULLUP
     
    on_press:
      then:
        - switch.turn_on: switch

    on_release:
        then: 
          - delay: 60s      #  这60秒会在每次传感器OFF时重叠执行下去。比如在10秒有三次OFF  就会有3个 60秒在倒计时。怎样才能在OFF后重置之前的60秒  重新计算只执行最后一次倒计时60秒。
          - switch.turn_off: switch



请求各位大佬帮帮忙改改代码。万分感谢!




回复

使用道具 举报

20

主题

484

帖子

3164

积分

论坛元老

Rank: 8Rank: 8

积分
3164
金钱
2680
HASS币
8
发表于 2023-4-11 04:52:17 来自手机 | 显示全部楼层
提供个思路:
在on_release触发器里,不要使用延时函数,而是将当前时间保存到一个全局变量里,只要每触发一次,就更新这个变量里的时间。
另外添加一个time组件,设置每秒触发一次,触发后检查当前时间与上面全局变量里的时间差,如果达到60秒就执行指定动作。
回复

使用道具 举报

27

主题

2143

帖子

8934

积分

论坛元老

Rank: 8Rank: 8

积分
8934
金钱
6786
HASS币
30

论坛元老

发表于 2023-4-11 08:33:57 | 显示全部楼层
本帖最后由 情非殇 于 2023-4-11 08:35 编辑
switch:
  - platform: gpio
    id: switch01

binary_sensor:
  - platform: gpio
    id: ld1030
    #...
    on_press:
      then:
        # 执行脚本,如在执行中自动重置
        - script.execute: script01

# 打开switch,倒计时60s关闭switch
script:
  - id: script01
    then:
      - switch.turn_on: switch01
      - delay: 60s
      - switch.turn_off: switch01

评分

参与人数 1金钱 +10 收起 理由
dscao + 10 感谢分享!感觉要加上 mode: restart.

查看全部评分

回复

使用道具 举报

2

主题

136

帖子

2029

积分

金牌会员

Rank: 6Rank: 6

积分
2029
金钱
1893
HASS币
0
发表于 2023-4-11 11:30:55 | 显示全部楼层
传感器里面有个防止抖动的触发时间,可以选择 delay off 为60s, 更简单
回复

使用道具 举报

8

主题

27

帖子

174

积分

注册会员

Rank: 2

积分
174
金钱
147
HASS币
0
 楼主| 发表于 2023-4-11 18:53:51 | 显示全部楼层

谢谢,我把这些代码全复制进去提示有错误,我不知pin引脚写在哪,帮帮忙写完整的代码给我复制好吗?谢谢
回复

使用道具 举报

8

主题

119

帖子

1005

积分

论坛DIY达人

积分
1005
金钱
881
HASS币
20
发表于 2023-4-11 23:10:40 来自手机 | 显示全部楼层
本帖最后由 cmsj 于 2023-4-11 23:24 编辑
binary_sensor:
  - platform: gpio
    device_class: door
    id: ld1030
    name: "ld1030"
    pin:
      number: 0
      mode: INPUT_PULLUP
    filters:
       - delayed_on_off: 60s
    on_press:
      then:
        - switch.turn_on: switch

    on_release:
        then: 
          - switch.turn_off: switch
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 22:34 , Processed in 0.180108 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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