米家的无线开关有极速和标准两个模式,前者响应快,后者花样多。由于双无线开关拥有两个按键,所以自然而然的,为什么不能一个按键走极速响应,另一个按键走标准模式,允许单击、双击甚至更多。

一、基础信息

1.1 前置条件

  • 网关(必须):小米智能中枢网关;
  • 开关:小米无线开关(双键版);
  • 小米无线开关操作模式设置为极速模式。

1.2 前置知识

关于事件处理

已知中枢网关处理触发事件(事件发生或状态更新类卡片)不是实时响应的,而是每隔一秒钟处理一次,对于开关而言,连续的点击行为相当于存进了一个先入先出的待处理队列中。

关于延时卡片

极客版中的延时卡片天生是一个防抖实现:每一次流程到达延迟卡片时其状态均会被重置,在延时未完前重复触发将推迟最终的结束时间;此外延时卡片没有中途停止功能,这点需要留意。

二、设计思路

以按键的单击事件作为触发信号,利用『到达指定次数时』卡片区分实际按下次数,利用『自定义状态』卡片作为条件区分需要响应的分支路线,利用『延时』卡片在时间到达后作为执行信号,利用『当-如果-就』卡片根据执行信号和条件去执行具体真实的操作,这样整体就可以拆分成触发事件和状态条件两部分。

基础逻辑

触发事件

主要用途:作为执行操作的时间信号,在用户按下开关的一定时间后触发任务的执行。

无线开关一秒上报一次按下的事件,而延时卡片则在二次触发后重置其延时状态,结合硬件特性和延时卡片的特性,就可以用作后期事件的触发执行条件了。此外为了避免网络延时造成网路上的时间损耗,实际延时定为 1050ms。

触发事件

状态条件

主要用途:区分实际的按下次数,输出一个布尔值用于执行操作前的判断。

无线开关按下后开始计数,自定义状态卡片未初始化时默认为假,利用下一次的计数到达否认上一次的计数状态,再将自己的状态置为真。

状态控制

最后再结合上面的触发事件,延时结束时重置计数和重置自定义状态,那么可以得到这样的结果:

按键模拟

三、总结分析

原则上可以无限制的添加下去,但受限于硬件属性,即无线开关的上报时间间隔为 1 秒,所以等待判断所需的时间为 n-1(n>1) 秒。

评论