按键收集器组件
key_collector 组件从诸如 矩阵键盘、Wiegand 键盘
或 LVGL 按钮矩阵、键盘
等组件的小部件收集按键。它允许你将按键序列作为一个整体来处理,例如
用于输入 PIN 码或密码。该组件将按键序列的结果以变量形式输出,
可在自动化中使用,并可将结果发布到 text_sensor。
# 示例配置条目key_collector: - id: pincode_reader source_id: mykeypad start_keys: "*" 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: "input progress: '%s', started by '%c'" args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ] on_result: - logger.log: format: "input result: '%s', started by '%c', ended by '%c'" args: [ 'x.c_str()', "(start == 0 ? '~' : start)", "(end == 0 ? '~' : end)" ] on_timeout: - logger.log: format: "input timeout: '%s', started by '%c'" args: [ 'x.c_str()', "(start == 0 ? '~' : start)" ]- id (可选, ID): 设置此条目的 ID,供在 lambda 中使用。
- source_id (可选, ID): 按键输入设备的 ID。
- min_length (可选, integer): 所需按键序列的最小长度。低于此限制时,
即使按下任何
end_keys中的键,on_result自动化也不会触发。 - max_length (可选, integer): 所需按键序列的最大长度。达到此限制
后,收集器将根据
end_key_required的设置,要么忽略额外的按键,要么触发on_result自动化。 - start_keys (可选, string): 用于开始按键序列的键;设置后,在按下其中一个开始键之前, 不会接受任何按键。
- end_keys (可选, string): 用于结束按键序列并触发
on_result自动化的键。 - end_key_required (可选, boolean): 仅当按下
end_keys中的某个键时才触发on_result自动化,而不在输入达到max_length个字符时触发。默认为false。 - back_keys (可选, string): 用于删除上次按下按键的键。就像键盘上的退格键一样。
- clear_keys (可选, string): 用于取消构建按键序列的键。
- allowed_keys (可选, string): 允许使用的键。如果未指定,则任何其他 未使用的键都将被允许。
- timeout (可选, Time): 之后取消构建 按键序列的超时时间。
- enable_on_boot (可选, boolean): 启用后,此按键收集器将在启动时启用。默认为
true。
必须至少指定 end_keys 或 max_length 之一。其余均为可选。
当按键序列被取消时(因超时或按下了某个 clear_keys),也必须重新按下 start_keys(如果配置了)中的某个键。
-
on_progress (可选, Automation): 当按下按键时执行的自动化。 当前按键序列存放在一个
vector<uint8_t>变量x中,start保存启动此按键序列的开始键,否则为0。 如果你想让显示屏显示当前值或按键次数, 或者在按键按下时让扬声器发出提示音,这会很有用。 -
on_result (可选, Automation): 当按键序列完成时执行的自动化 (例如已达到
max_length或按下了某个end_keys中的键)。最终确定的按键序列存放在一个vector<uint8_t>变量x中,start保存启动此按键序列的开始键或0,而end保存终止此按键序列的结束键或0。 -
on_timeout (可选, Automation): 如果发生超时则执行的自动化。 当前按键序列存放在一个
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:Lambdas
Section titled “Lambdas”clear(bool progress_update=true): 取消构建按键序列。将progress_update设为false可跳过触发on_progress自动化。send_key(uint8_t key): 直接将一个按键发送给收集器。
key_collector 组件支持一个 文本传感器,
当产生成功的结果时,它会发布收集到的按键序列。