跳转到内容

模板二进制传感器

template 二进制传感器平台允许您定义一个布尔条件并使用它来提供二进制传感器。条件可以表示为 C++ lambda,或作为 YAML 表达式。条件表达式将持续评估,在每次调用组件的 loop() 方法时,通常每 16ms 一次。

下面的示例轮询模拟传感器并根据传感器值是否高于阈值产生一个值。

# 示例配置条目
binary_sensor:
- platform: template
name: "车库门开启"
lambda: |-
if (id(ultrasonic_sensor1).state > 30) {
// 车库门已开启。
return true;
} else {
// 车库门已关闭。
return false;
}

lambda 的可能返回值:

  • return true; 如果二进制传感器应为 ON。
  • return false; 如果二进制传感器应为 OFF。
  • return {}; 如果状态未知。将保持最后已知状态。

作为使用 lambda 的替代方案,您可以使用 ESPHome 条件表达式

# 示例配置条目
binary_sensor:
- platform: template
id: engine_running
condition:
sensor.in_range:
id: engine_rpm
above: 300.0
  • lambda (可选, lambda): 反复评估以获取二进制传感器当前状态的 C++ Lambda。

  • condition (可选, 条件): 检查以确定二进制传感器值的条件。配置中不能同时存在 lambdacondition

  • 所有其他选项来自 二进制传感器

您还可以使用 binary_sensor.template.publish 操作从 YAML 文件的其他位置向模板二进制传感器发布状态。

# 示例配置条目
binary_sensor:
- platform: template
name: "车库门开启"
id: template_bin
# 在某个触发器中
on_...:
- binary_sensor.template.publish:
id: template_bin
state: ON
# 模板化
- binary_sensor.template.publish:
id: template_bin
state: !lambda 'return id(some_sensor).state > 30;'

配置选项:

  • id (*必需, ID): 模板二进制传感器的 ID。
  • state (*必需, 布尔值, 可模板化): 要发布的状态。

NOTE

此操作也可以在 lambda 中编写:

id(template_bin).publish_state(true);