跳转到内容

模板二进制传感器

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

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

# 示例配置条目
binary_sensor:
- platform: template
name: "Garage Door Open"
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(可选,Condition):用于确定二进制传感器值时要检查的条件。lambda 和 condition 不能同时出现在配置中。

  • 来自 Binary Sensor 的所有其他选项。

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

# 示例配置条目
binary_sensor:
- platform: template
name: "Garage Door Open"
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(必选,boolean,templatable): 要发布的状态。

NOTE

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

id(template_bin).publish_state(true);