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

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

[经验分享] 树莓派gpio如何实现双击、单击、长按三种逻辑???

[复制链接]

3

主题

22

帖子

154

积分

注册会员

Rank: 2

积分
154
金钱
132
HASS币
0
发表于 2020-4-3 19:58:23 | 显示全部楼层 |阅读模式
背景:我的HA是安装在树莓派上的,为了节省成本(小米全家桶实在太贵了),我把树莓派放在了厨房集成吊顶上,把全屋的灯具控制线也全部接到了厨房,然后在客厅安装了三个自复位按钮开关。这三个自复位开关是通过gpio引脚,做为binary sensor组件加入到HA当中的,为了实现更丰富的控制逻辑,我希望每个按钮能实现单击、双击、长按三种逻辑。
       问题:小米无线开关(饼干)是支持单击、双击和长按三种逻辑的,需要注意的是再编写自动化时,触发器使用的是事件触发,也就是说小米无线开关这个实体,会在事件总线上广播单击、双击、长按三个事件。可惜的是查看了树莓派gpio组件的python文件,发现并没有编写相应的代码,也就是说不提供相应的事件广播。
       解决途径一:通过巧妙的自动化配置逻辑,从而实现三种控制逻辑。特点:使用起来复杂,但是不用编写组件的python代码。
       解决途径二:修改树莓派GPIO的binary sensor组件的python代码,将广播单击、双击、长按事件的功能加进去。特点:一劳永逸,使用起来特别方便,使用事件触发就可以了。
      刚接触HA不久,能力实在有限,经过尝试,这两个途径我都没能去实现,所以想求助一下组织里的大神们。不奢求帮忙完成,提供给小弟一些思路,我也是万分感激的。

PS:解决途径二我也有一点想法。就是再配置这个组件时,增加一个参数来标志用户是否想将该二进制传感器作为一个具有三种按击功能的按钮。然后修改该组件python代码中的RPiGPIOBinarySensor类。但该传感器做为按钮时,就判断按击类型,并通过hass.bus.fire方法来广播事件。可以判断逻辑我不知道怎么写,就卡在了这里。我就想着我看看小米无线开关的判断逻辑怎么写,参考一下呗,但是看来看去也是一头雾水。组件库里还有一个(flic)按钮也提供了三种控制逻辑,代码也比小米的更清晰(因为小米的产品线太丰富,代码又长又乱),但是其中有一行“import pyflic”,也就是说引用了pyflic模块中的方法或者属性函数,但是我找不到这个pyflic模块再哪里,也就不知道它定义的方法和属性函数,那代码就读不下去了。想站在巨人的肩膀上也变得不可能,所以求助大神们,谢过,谢过!!!









回复

使用道具 举报

26

主题

555

帖子

1965

积分

金牌会员

Rank: 6Rank: 6

积分
1965
金钱
1405
HASS币
40
发表于 2020-4-4 11:00:53 | 显示全部楼层
这个功能在HASS官方网站上有,还有论坛也有。
回复

使用道具 举报

3

主题

22

帖子

154

积分

注册会员

Rank: 2

积分
154
金钱
132
HASS币
0
 楼主| 发表于 2020-4-4 14:37:20 来自手机 | 显示全部楼层
dgmax 发表于 2020-4-4 11:00
这个功能在HASS官方网站上有,还有论坛也有。

求大神指教啊,我实在是没找到,可能我搜索的关键字不正确。我知道怎么加载树莓派gpio引脚的binary sensor组件,但是不知道怎么实现单双击和长按!求大神再点明一下。
回复

使用道具 举报

26

主题

555

帖子

1965

积分

金牌会员

Rank: 6Rank: 6

积分
1965
金钱
1405
HASS币
40
发表于 2020-4-4 22:41:19 | 显示全部楼层
- alias: realy1
  id: 'realy1'
  # Timer is started when the switch pumprun is set to on.
  trigger:
  - platform: state
    entity_id: binary_sensor.kai_guan_1
    to: 'on'
    for:
      seconds: 2

  action:
  - service: switch.toggle
    entity_id: switch.cha_zuo_1

---------

    for:
      seconds: 2

自行设定时间

回复

使用道具 举报

3

主题

22

帖子

154

积分

注册会员

Rank: 2

积分
154
金钱
132
HASS币
0
 楼主| 发表于 2020-4-4 23:30:02 来自手机 | 显示全部楼层
dgmax 发表于 2020-4-4 22:41
- alias: realy1
  id: 'realy1'
  # Timer is started when the switch pumprun is set to on.

问题一:这个长按逻辑没问题,但是有个现象很奇怪,持续时间设置为2秒,但实际上按键时间要远远大于两秒才有动作,想不通为什么,持续时间调小一点也得不到改善。
问题二:我是想在同一个引脚上实现单双击和长按,而不是仅仅实现长按。
回复

使用道具 举报

3

主题

22

帖子

154

积分

注册会员

Rank: 2

积分
154
金钱
132
HASS币
0
 楼主| 发表于 2020-4-4 23:35:07 来自手机 | 显示全部楼层
dgmax 发表于 2020-4-4 22:41
- alias: realy1
  id: 'realy1'
  # Timer is started when the switch pumprun is set to on.

还是很感谢你的回复,方便加个QQ290645469吗,一起学习交流
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-26 00:25 , Processed in 0.068793 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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