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

 找回密码
 立即注册
12
返回列表 发新帖
楼主: leeh

[技术探讨] esphome自动化求助

[复制链接]

2

主题

30

帖子

182

积分

注册会员

Rank: 2

积分
182
金钱
152
HASS币
0
 楼主| 发表于 2024-2-27 14:50:06 | 显示全部楼层
我看到可以直接看cpp源文件?请问这个文件在哪?我没有找到,我对c和c++还是比较熟悉的。应该能找到问题
回复

使用道具 举报

14

主题

262

帖子

2223

积分

金牌会员

Rank: 6Rank: 6

积分
2223
金钱
1956
HASS币
50
发表于 2024-2-27 15:52:52 | 显示全部楼层
我觉得首先要搞清楚你要用什么触发unlockbutton? 如果用binary_sensor 触发,要把操作语句放到binary_sensor下面。你现在的写法是switch触发,这个时候binary_sensor是条件。
回复

使用道具 举报

14

主题

262

帖子

2223

积分

金牌会员

Rank: 6Rank: 6

积分
2223
金钱
1956
HASS币
50
发表于 2024-2-27 16:01:39 | 显示全部楼层
还有下面的语句只是列印“响铃is on”,并不能显示binary_sensor的状态。
on_press:
      then:
            - logger.log: "响铃is on"
回复

使用道具 举报

14

主题

262

帖子

2223

积分

金牌会员

Rank: 6Rank: 6

积分
2223
金钱
1956
HASS币
50
发表于 2024-2-27 16:31:52 | 显示全部楼层
查看binary_sensor的在switch打开时的状态,试试下面代码看看,我没有验证,攻参考:
switch:
  - platform: output
    id: autoopendoorlock
    name: "自动开锁模式" 
    output: 'autounlock'
    on_turn_on:

      - if:
          condition:
            lambda: return (id(sounddoor).state));
          then:         
            - logger.log: "ON"
          else:
            - logger.log: "OFF"

      - if:
          condition:
             binary_sensor.is_on: sounddoor #自动开锁模式开关打开时,if sounddoor触发 then 触发开锁按钮一次
          then:
             button.press: unlockbutton  

回复

使用道具 举报

24

主题

581

帖子

2691

积分

金牌会员

Rank: 6Rank: 6

积分
2691
金钱
2110
HASS币
0
发表于 2024-2-27 17:33:33 | 显示全部楼层
   
switch:
  - platform: output
    id: autoopendoorlock
    name: "自动开锁模式" 
    output: 'autounlock'
    on_turn_on:
      
      if:
        condition:
           binary_sensor.is_on: sounddoor #自动开锁模式开关打开时,if sounddoor触发 then 触发开锁按钮一次   
        then:
           button.press: unlockbutton    


binary_sensor.is_on: sounddoor
on_turn_on时检查sounddoor是否打开 没有打开就不执行
既然不执行也就代表sounddoor没有打开
你应该先检测sounddoor能不能正常打开
回复

使用道具 举报

2

主题

30

帖子

182

积分

注册会员

Rank: 2

积分
182
金钱
152
HASS币
0
 楼主| 发表于 2024-2-27 18:15:49 | 显示全部楼层
book123 发表于 2024-2-27 16:31
查看binary_sensor的在switch打开时的状态,试试下面代码看看,我没有验证,攻参考:

...

非常感谢你的帮助,我把逻辑写到sounddoor的传感器里就好了。我一会找cpp文件看下估计就知道什么问题了。
回复

使用道具 举报

2

主题

30

帖子

182

积分

注册会员

Rank: 2

积分
182
金钱
152
HASS币
0
 楼主| 发表于 2024-2-27 18:23:45 | 显示全部楼层
switch的 on_turn_on是一个边沿触发,只扫描一次,同理所有的自动化任务中的触发大部分的cpp代码都是这样的,所以只能触发时检测,或者加入循环检测。
回复

使用道具 举报

2

主题

30

帖子

182

积分

注册会员

Rank: 2

积分
182
金钱
152
HASS币
0
 楼主| 发表于 2024-2-27 18:35:24 | 显示全部楼层
output:
  - platform: gpio
    pin: 0
    id: 'unlock' #解锁/开锁开关定义位gpio0=继电器
    inverted: true #低电平输出
  - platform: gpio
    pin: 2
    id: 'autounlock' #解锁/开锁开关定义位gpio2=板载指示灯
    inverted: true #低电平输出
   
switch:
  - platform: output
    id: autoopendoorlock
    name: "自动开锁模式" 
    output: 'autounlock'
    on_turn_on:
      then:
        - delay: 15min
        - switch.turn_off: autoopendoorlock
        - logger.log: "打开后计时15min,自动关闭"
    
    
button:
  - platform: output
    id: unlockbutton
    name: "开锁"
    icon: "mdi:lock"
    output: 'unlock'
    duration: 500ms
     
binary_sensor: #检测单元门呼叫rx引脚 gpio3
  - platform: gpio
    id: sounddoor
    pin:
     number: 3
     inverted: true
     mode:
      input: true
      pullup: true #内部上拉
    name: "响铃"
    device_class: sound
    
    filters:
      - delayed_on: 500ms #100ms延时滤波
      - delayed_off: 300ms
    on_press:
        - if:
           condition:
             lambda: return id(autoopendoorlock).state;
           then:
            lambda: id(unlockbutton).press();
回复

使用道具 举报

14

主题

262

帖子

2223

积分

金牌会员

Rank: 6Rank: 6

积分
2223
金钱
1956
HASS币
50
发表于 2024-2-28 11:39:31 | 显示全部楼层
leeh 发表于 2024-2-27 18:15
非常感谢你的帮助,我把逻辑写到sounddoor的传感器里就好了。我一会找cpp文件看下估计就知道什么问题了。 ...

Good!祝顺利!
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 18:42 , Processed in 0.071299 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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