问答社区分类: 树莓派如何让树莓派gpio的binary sensor组件实现单击、双击、长按三个事件?

如何让树莓派gpio的binary sensor组件实现单击、双击、长按三个事件?

qiang19862006 提问于 7月 前
    2020年5月4日更新

背景:我的HA是安装在树莓派上的,为了节省成本(小米全家桶实在太贵了),我把树莓派放在了厨房集成吊顶上,把全屋的灯具控制线也全部接到了厨房,然后在客厅安装了三个自复位按钮开关。这三个自复位开关是通过gpio引脚,做为binary sensor组件加入到HA当中的,为了实现更丰富的控制逻辑,我希望每个按钮能实现单击、双击、长按三种逻辑。

 

问题:小米无线开关(饼干)是支持单击、双击和长按三种逻辑的,需要注意的是再编写自动化时,触发器使用的是事件触发,也就是说小米无线开关这个实体,会在事件总线上广播单击、双击、长按三个事件。可惜的是查看了树莓派gpio组件的python文件,发现并没有编写相应的代码,也就是说不提供相应的事件广播。

 

解决途径一:通过巧妙的自动化配置逻辑,从而实现三种控制逻辑。特点:使用起来复杂,但是不用编写树莓派GPIO的binarysensor组件的python代码。

 

解决途径二:修改树莓派GPIO的binary sensor组件的python代码,将广播单击、双击、长按事件的功能加进去。特点:一劳永逸,使用起来特别方便,使用事件触发就可以了。

 

刚接触HA不久,能力实在有限,经过尝试,这两个途径我都没能去实现,所以想求助一下组织里的大神们。不奢求帮忙完成,提供给小弟一些思路,我也是万分感激的。

 

1个回答


采纳

建议接一个esp,然后再连入HA吧。
1.可以不用拉那么长的线
2.esphome中有现成的

Andrew 版主 回答于 7月 前

我大概明白了老师的意思。你的想法类似于分布式网络控制,在开关(或者其他各种各样的实体组件)比较集中的地方设置一个esp8266,然后通过mqtt的方式和HA交互就行了。

但实际情况是,家里的装修我是diy的,甚至电全部都是我自己走的,我已经把自复位开关的线,以及灯的控制线全部集中到厨房了,这么做也是为了省钱(不用购买esp8266模块了,当然通过有线接入理论上讲比无线接入更稳定一些吧),俗话说叫穷折腾。所以还是想通过软件解决这个问题。

感谢版主的回答,谢谢!

看了几天资料 我还是一头雾水。想着先解决在事件总线上发布单击和长按事件,现在有一些想法是:在device_state_attributes字典中加入一个last_off_to_on,然后这个binary sensor实体监听自身的状态改变事件,如果自身的状态改变是从off到on的话,那么last_off_to_on= last_changed(last_changed这个属性是内建的),如果自身的状态改变是从on变成off,那么last_off_to_on的值不改变,但是要比较last_off_to_on和last_changed的时间差,如果时间差大于预设值就在事件总线上广播一个长按事件,如果时间差小于预设值就广播一个单击事件。但是不知道具体怎么把这个自然语言加入到组件的代码中,求助下版主,给个灵感。

qiang19862006
评论于 6月 前