按键收集器组件
key_collector 组件从以下组件收集按键按下事件:
矩阵键盘、Wiegand 键盘
或 LVGL 按钮矩阵、键盘
小部件。它允许您处理按键序列并将其视为一个整体,
例如用于输入 PIN 码或密码。该组件将按键序列的结果
输出为可在自动化中使用的变量,并可以将结果发布到 text_sensor。
# 示例配置条目key_collector: - id: pincode_reader source_id: mykeypad min_length: 4 max_length: 4 start_keys: "A" end_keys: "#" end_key_required: true back_keys: "*" clear_keys: "C" allowed_keys: "0123456789" timeout: 5s on_progress: - logger.log: format: "输入进度: '%s', 由 '%c' 启动" args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ] on_result: - logger.log: format: "输入结果: '%s', 由 '%c' 启动, 由 '%c' 结束" args: [ 'x.c_str()', "(start == 0 ? '~' : start)", "(end == 0 ? '~' : end)" ] on_timeout: - logger.log: format: "输入超时: '%s', 由 '%c' 启动" args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ]-
id (可选, ID): 设置此条目的 ID 以便在 lambda 中使用。
-
source_id (可选, ID): 按键输入设备的 ID。
-
min_length (可选, 整数): 所需按键序列的最小长度。低于 此长度,即使按下了任何
end_keys,也不会触发on_result自动化。 -
max_length (可选, 整数): 所需按键序列的最大长度, 达到此长度后将触发
on_result自动化,无需按下任何end_keys -
start_keys (可选, 字符串): 用于启动序列的按键。如果指定,在 按下启动键之前不会收集任何按键。按下的启动键在 自动化的
start变量中可用。 -
end_keys (可选, 字符串): 用于确认序列的按键。
-
end_key_required (可选, 布尔值): 仅在按下
end_keys之一时触发on_result自动化。默认为false。 -
back_keys (可选, 字符串): 用于删除最后按下的键的按键。类似键盘上的 退格键。
-
clear_keys (可选, 字符串): 用于完全清除序列的按键,即清除所有已按下的键。
-
allowed_keys (可选, 字符串): 允许使用的按键。如果未指定,则任何 未被其他用途使用的键都将被允许。
-
timeout (可选, 时间): 超时后取消构建序列并删除所有按键。
-
enable_on_boot (可选, 布尔值): 如果启用,此按键收集器将在启动时启用。默认为
true。
必须至少指定 end_keys 或 max_length 中的一个。其余为可选。
如果同时指定了 end_keys 和 max_length,则一旦收集了 max_length 个键,在按下结束键之前将不再接受更多按键。
-
on_progress (可选, 自动化): 当按下按键时执行的 自动化。当前按下的键序列放置在
vector<uint8_t>变量x中,start保存激活此序列的启动键,否则为0。 如果您想让显示器显示当前值或按键次数,或按键时扬声器发出提示音,这很有用。 -
on_result (可选, 自动化): 当序列完成时执行的 自动化(例如达到
max_length或按下了end_keys之一)。 最终的键序列放置在vector<uint8_t>变量x中,start保存激活此序列的启动键或0,end保存终止此序列的结束键或0。 -
on_timeout (可选, 自动化): 如果发生超时则执行的 自动化。当前按下的键序列放置在
vector<uint8_t>变量x中,start保存激活此序列的启动键或0。
key_collector.enable 动作
Section titled “key_collector.enable 动作”此动作激活 key_collector。它将开始接受按键。
如果有多个按键收集器,您需要提供要启用的那个的 id。
on_...: then: - key_collector.enable:key_collector.disable 动作
Section titled “key_collector.disable 动作”此动作停用 key_collector。它将停止接受按键并清除已收集的按键。
如果有多个按键收集器,您需要提供要禁用的那个的 id。
on_...: then: - key_collector.disable:Lambda
Section titled “Lambda”send_key(uint8_t key): 直接向收集器发送一个键。
key_collector 组件支持一个 文本传感器
,在成功产生结果时发布收集的键序列。