跳转到内容

传感器组件

ESPHome 支持多种不同的传感器。每个传感器都是 sensor 域的一个平台,每个传感器都有若干基本配置选项。

ESPHome 中的所有传感器都有一个名称和其他可选的配置选项。默认情况下,传感器平台会自动选择适当的默认值,但您可以随时覆盖这些值。

# 示例传感器配置
name: 客厅温度
# 可选变量:
unit_of_measurement: "°C"
icon: "mdi:water-percent"
device_class: "temperature"
state_class: "measurement"
accuracy_decimals: 1
expire_after: 30s
filters:
- sliding_window_moving_average:
window_size: 15
send_every: 15

配置变量:

  • id (可选, 字符串): 手动指定用于代码生成的 ID。idname 中至少必须指定一个。
  • name (可选, 字符串): 传感器的名称。idname 中至少必须指定一个。

NOTE

如果您为设备设置了 friendly_name,并且希望传感器使用该名称,可以设置 name: None

  • unit_of_measurement (可选, 字符串): 手动设置传感器应使用的测量单位。这实际上不会进行任何数学运算(单位之间的转换)。

  • device_class (可选, 字符串): 传感器的设备类别。请参阅 https://www.home-assistant.io/integrations/sensor/#device-class 获取可用选项列表。设置为 "" 可移除传感器的默认设备类别。

  • state_class (可选, 字符串): 传感器的状态类别。请参阅 https://developers.home-assistant.io/docs/core/entity/sensor/#available-state-classes 获取可用选项列表。设置为 "" 可移除传感器的默认状态类别。

  • icon (可选, 图标): 手动设置前端中传感器使用的图标。

  • accuracy_decimals (可选, 整数): 设置数据使用者应使用的小数点后位数。虽然这不会改变通过 API 发送的值,但 Home Assistant 的 ESPHome 集成会在使用或存储之前相应地舍入该值。该位数也将用于设置实体的默认显示精度。因此,可以显示较少的小数位,但无法在 Home Assistant 中提高传感器值的精度。(默认值因组件和传感器而异。)

  • filters (可选): 指定用于对值进行一些基本转换的过滤器。有关更多信息,请参阅 传感器过滤器

  • internal (可选, 布尔值): 将此组件标记为内部组件。内部组件不会暴露给前端(如 Home Assistant)。仅指定 id 而不指定 name 将隐式将其设置为 true。

  • force_update (可选, 布尔值): 如果为 true,此选项将强制前端(通常是 Home Assistant)在传感器更新时创建状态更改事件,即使值保持不变。某些应用程序(如 Grafana)在与 Home Assistant 配合使用时需要此功能,但请注意这可能会显著增加数据库大小。默认为 false

  • disabled_by_default (可选, 布尔值): 如果为 true,则此实体不应添加到任何客户端的前端(通常是 Home Assistant),除非用户手动启用(通过 Home Assistant UI)。默认为 false

  • entity_category (可选, 字符串): 实体的类别。请参阅 https://developers.home-assistant.io/docs/core/entity/#generic-properties 获取可用选项列表。设置为 "" 可移除默认实体类别。

  • 如果启用了 Webserver 并选择了版本 3,则支持 Webserver 组件的所有其他选项。请参阅 Webserver 版本 3

自动化:

  • on_value (可选, 自动化): 当发布新值时执行的自动化。请参阅 on_value

  • on_value_range (可选, 自动化): 当发布的值从范围外转换到范围内时执行的自动化。请参阅 on_value_range

  • on_raw_value (可选, 自动化): 当收到尚未通过任何过滤器的原始值时执行的自动化。请参阅 on_raw_value

MQTT 选项:

  • expire_after (可选, 时间): 手动设置传感器值应标记为”过期”/“未知”的时间。不提供任何值意味着不过期。

  • MQTT 组件的所有其他选项。

NOTE

如果您尝试为具有多个输出的传感器设置过滤器 - 例如报告温度湿度的 DHT22 - 请将 filters 选项放入每个传感器输出中,如下所示:

sensor:
- platform: dht
# ...
temperature:
filters:
# ...
humidity:
filters:
# ...

ESPHome 允许您在将传感器值发送到 Home Assistant 之前对其进行预处理。例如,如果您想对最近几次读数应用平均值,这很有用。

传感器有许多可用的过滤器,您可以通过在传感器配置中添加 filters 块来定义它们(与 platform 处于同一级别,或对于具有多个传感器的平台,在每个传感器块内)。

过滤器按照它们在配置中定义的顺序应用。

# 示例过滤器:
filters:
- offset: 2.0
- multiply: !lambda return 1.2;
- calibrate_linear:
- 0.0 -> 0.0
- 40.0 -> 45.0
- 100.0 -> 102.5
- filter_out:
- 42.0
- 43.0
- median:
window_size: 5
send_every: 5
send_first_at: 1
- quantile:
window_size: 5
send_every: 5
send_first_at: 1
quantile: .9
- sliding_window_moving_average:
window_size: 15
send_every: 15
- exponential_moving_average:
alpha: 0.1
send_every: 15
- throttle: 1s
- throttle_average: 1s
- throttle_with_priority:
timeout: 1s
value:
- 42.0
- 43.0
- heartbeat: 5s
- debounce: 0.1s
- timeout: 1min
- delta:
min_value: 5.0
max_value: 2%
- or:
- throttle: 1s
- delta: 5.0
- lambda: return x * (9.0/5.0) + 32.0;

通过使用准确”真实”源测量的值来校准传感器值。

配置变量:

  • method (可选, 字符串): 计算线性函数的方法。可选值为 least_squaresexact。默认为 least_squares

  • datapoints (必需): 数据点列表。

首先,收集一组传感器显示值和真实值应该是什么的数据。对于温度,例如可以使用准确的温度计来实现。对于其他传感器(如功率传感器),可以通过连接已知负载然后记下传感器显示的值来完成。

# 示例配置条目
- platform: dht
# ...
temperature:
name: "DHT22 温度"
filters:
- calibrate_linear:
method: least_squares
datapoints:
# 将 0.0(来自传感器)映射到 1.0(真实值)
- 0.0 -> 1.0
- 10.0 -> 12.1

参数是数据点列表,每个数据点格式为 测量值 -> 真实值。根据 method,ESPHome 将要么对值拟合线性方程(使用最小二乘法),要么使用多条线性方程精确连接这些值。您需要至少提供两个值。当使用 least_squares 且提供超过两个值时,将计算线性解,可能无法精确表示每个值。

通过将传感器值拟合到多项式函数来校准您的传感器数值。这与 calibrate_linear 过滤器类似,但也支持更高阶的函数,如二次多项式。

# 示例配置条目
- platform: adc
# ...
filters:
- calibrate_polynomial:
degree: 2
datapoints:
# 将 0.0(来自传感器)映射到 0.0(真实值)
- 0.0 -> 0.0
- 10.0 -> 12.1
- 13.0 -> 14.0

参数是一个数据点列表,每个数据点的格式为 测量值 -> 真实值。此外,您需要指定结果多项式的阶数,数据点将通过最小二乘法拟合到指定的阶数。

将数值限制在 min_valuemax_value 之间的闭区间内。

配置变量:

  • min_value (可选, float): 范围的下限。
  • max_value (可选, float): 范围的上限。
  • ignore_out_of_range (可选, bool): 如果为 true,则忽略所有超出范围的传感器值。默认为 false

必须至少指定 min_valuemax_value 中的一个。

当传感器值通过此过滤器时,如果它小于 min_value,它将被设置为 min_value。如果它大于 max_value,它将被设置为 max_value。 未指定的边界被视为无界限(即,如果未设置 min_value,则没有下限)。

NaN(非数字)值如果设置了 min_value 将被钳位到下限,否则被钳位到上限。 正无穷或负无穷值如果设置了相应的边界,将分别被钳位到上限或下限。

如果 ignore_out_of_range 为 true,任何不在指定范围内的值将被忽略而不是被钳位。

# 示例配置条目
filters:
- clamp:
min_value: 10
max_value: 75
ignore_out_of_range: true

仅在上一个传入值至少已有指定时间段时才发送值。例如,如果几乎同时传入两个值,此过滤器将仅输出最后一个值,并且只有在指定时间段过去且没有任何新传入值后才输出。

此过滤器存储通过此过滤器的最后一个值,仅当传入值与先前传递的值有足够差异时才传递传入值。 这种差异可以通过两种方式计算:绝对差异或百分比差异,并且可以相对于最小值 min_value 和最大值 max_value

配置变量:

  • min_value (可选, 浮点数, 百分比): 所需的最小绝对或百分比差异(默认为 0.0
  • max_value (可选, 浮点数, 百分比): 允许的最大绝对或百分比差异(默认为无穷大)
  • baseline (可选, 浮点数, lambda): 计算差异时使用的基线。默认使用最后传递的值。

必须指定 min_valuemax_value 中的至少一个。除了将 min_value 和/或 max_value 指定为键之外,您也可以只提供单个浮点数或百分比值。在这种情况下,该值被解释为 min_value

过滤器将拒绝与基线差异不超过 min_value 的值,或与基线差异超过 max_value 的值。 例如,如果过滤器配置为值 2.0,则只有与最后传递的值差异超过 2.0 的值才会被传递。

NOTE

min_value0.0 意味着与最后值相等的值不会被传递,只有不同的值才会被传递,这对于消除重复值很有用。

# 示例配置条目
filters:
- delta:
min_value: 2.0
# 与上面相同,此处隐含 min_value。
- delta: 2.0
- delta:
max_value: 10%
# 同时指定 min_value 和 max_value 是允许的。
- delta:
min_value: 2.0
max_value: 10%

如果指定百分比,则使用最后值的百分比作为所需差异。 例如,如果过滤器配置为 20% 且最后传递的值为 10,则只有大于或等于 12 或小于或等于 8 的值才会被传递。 但是,如果最后传递的值为 100,则只有大于或等于 120 或小于或等于 80 的值才会被传递。

# 示例配置条目
filters:
- delta: 20%

设置最大差值过滤器时,传感器值可能会脱离过滤器允许的带宽而不返回。在这种情况下,将比较值从默认的最后值覆盖为确定基线的任意其他传感器可能会有帮助:

# 示例配置条目
sensors:
# 此传感器仅计算基线。
- platform: copy
source_id: my_sensor_to_be_filtered
id: baseline
filters:
- median:
window_size: 6
send_every: 1
send_first_at: 1
# 此传感器将发布应用了最大差值过滤器的传感器值。
- platform: copy
source_id: my_sensor_to_be_filtered
name: "带基线的最大过滤器"
id: filter_baseline_max
filters:
- delta:
max_value: 10
baseline: !lambda return id(baseline).state;

对最近的几个值进行简单的指数移动平均。它可以用于在传感器上设置较短的更新间隔,但只在特定间隔推送平均值(从而提高分辨率)。

配置变量:

  • alpha (可选, float): 过滤器的遗忘因子/alpha 值。 较高的值在输出中包含更多细节,而较低的值则去除更多噪声。 默认为 0.1

  • send_every (可选, int): 传感器值应该多久推送一次。默认为 15

  • send_first_at (可选, int): 默认情况下,启动时的第一个原始值会立即 发布。使用此参数,您可以指定第一个值何时发送。 默认为 1

(必需, 数字): 过滤掉要显示的特定值,例如过滤掉值 85.0

# 示例配置条目
filters:
- filter_out: 85.0

可以提供值列表,并且值可以模板化:

# 示例配置条目
filters:
- filter_out:
- 85.0
- !lambda return id(some_sensor).state;

按指定时间间隔定期发送传感器值。如果传感器值在此间隔期间发生变化,计时器不会重置 — 当间隔结束时,传感器的最后一个已知值仍将被发送。

例如,值为 10s 将使过滤器每 10 秒输出最后一个已知值,无论输入值更改的频率如何。

当使用 optimistic 模式时,过滤器仍会按配置的间隔重复最后一个已知值,但此外,每个新传入的值都会在到达时立即发布。这确保传感器输出在更改时立即更新,同时在更新之间保持最后一个值的稳定定期”心跳”。此模式适用于需要即时响应的传感器。

配置变量:

  • period (必需, 时间): 重新发布最后一个已知值的间隔。
  • optimistic (可选, 布尔值): 启用时,每个新传入的值都会在到达时立即发布,无论配置的时间间隔如何。
# 示例过滤器
filters:
- heartbeat: 5s
- heartbeat:
period: 5s
optimistic: true

对传感器值执行简单的数学运算。输入值为 x,lambda 的结果用作输出(使用 return)。

# 示例配置条目
filters:
- lambda: return x * (9.0/5.0) + 32.0;

确保在 lambda 中为所有值添加 .0,否则整数除法将导致整数(而不是浮点值)。

要阻止值被发布,返回 {}

# 示例配置条目
filters:
- lambda: |-
if (x < 10) return {};
return x-10;

对最近的几个值进行移动最大值计算。较大的窗口大小会使过滤器对输入变化的反应变慢。

配置变量:

  • window_size (可选, int): 在推送值时计算最小/最大值所使用的 值的数量。 默认为 5

  • send_every (可选, int): 传感器值应该多久推送一次。例如, 在上述配置中,最大值是在每接收到第 4 个传感器值后计算的, 基于最近接收到的 7 个值。 默认为 5

  • send_first_at (可选, int): 默认情况下,启动时的第一个原始值会立即 发布。使用此参数,您可以指定第一个值何时发送。 必须小于或等于 send_every。 默认为 1

对最近的几个值进行简单移动中值计算。这可用于从接收到的传感器数据中过滤掉异常值。较大的窗口大小会使过滤器对输入变化的反应变慢。

# 示例配置条目
- platform: wifi_signal
# ...
filters:
- median:
window_size: 7
send_every: 4
send_first_at: 3

配置变量:

  • window_size (可选, int): 在推送值时计算中值所使用的 值的数量。如果您希望推送实际接收到的值, 此数字应为奇数。 默认为 5

  • send_every (可选, int): 传感器值应该多久推送一次。例如, 在上述配置中,中值是在每接收到第 4 个传感器值后计算的, 基于最近接收到的 7 个值。 默认为 5

  • send_first_at (可选, int): 默认情况下,启动时的第一个原始值会立即 发布。使用此参数,您可以指定第一个值何时发送。 必须小于或等于 send_every。 默认为 1

对最近的几个值进行移动最小值计算。较大的窗口大小会使过滤器对输入变化的反应变慢。

# 示例配置条目
- platform: wifi_signal
# ...
filters:
- min:
window_size: 7
send_every: 4
send_first_at: 3

配置变量:

  • window_size (可选, int): 在推送值时计算最小/最大值所使用的 值的数量。默认为 5

  • send_every (可选, int): 传感器值应该多久推送一次。例如, 在上述配置中,最小值是在每接收到第 4 个传感器值后计算的, 基于最近接收到的 7 个值。 默认为 5

  • send_first_at (可选, int): 默认情况下,启动时的第一个原始值会立即 发布。使用此参数,您可以指定第一个值何时发送。 必须小于或等于 send_every。 默认为 1

将每个值乘以一个可模板化的值。

向每个传感器值添加一个值。该值可以是常量或返回浮点数的 lambda。

# 示例配置条目
filters:
- offset: 2.0
- offset: !lambda return id(some_sensor).state;

使用第一个返回值的子过滤器转发值。下面的示例只会转发那些至少有 1 秒旧或者绝对差值至少为 5.0 的值。

# 示例配置条目
filters:
- or:
- throttle: 1s
- delta: 5.0

对最近的几个值进行简单移动分位数计算。这可用于从接收到的传感器数据中过滤掉异常值。较大的窗口大小会使过滤器对输入变化的反应变慢。

# 示例配置条目
- platform: wifi_signal
# ...
filters:
- quantile:
window_size: 7
send_every: 4
send_first_at: 3
quantile: .9

配置变量:

  • window_size (可选, int): 在推送值时计算分位数所使用的 值的数量。 默认为 5

  • send_every (可选, int): 传感器值应该多久推送一次。例如, 在上述配置中,分位数是在每接收到第 4 个传感器值后计算的, 基于最近接收到的 7 个值。 默认为 5

  • send_first_at (可选, int): 默认情况下,启动时的第一个原始值会立即 发布。使用此参数,您可以指定第一个值何时发送。 必须小于或等于 send_every。 默认为 1

  • quantile (可选, float): 从 0 到 1 的值,用于确定选择哪个分位数。 默认为 .9

将数值四舍五入到最接近的倍数。接受一个大于零的浮点数。

# 示例配置条目
filters:
- round_to_multiple_of: 10
# 123 -> 120
# 126 -> 130
# 示例配置条目
filters:
- round_to_multiple_of: 0.25
# 3.1415 -> 3.25
# 1.6180 -> 1.5

将数值四舍五入到指定的小数位数。

# 示例配置条目
filters:
- round: 1 # 将四舍五入到 1 位小数

一个简单的跳过过滤器;skip_initial: N 会跳过前 N 次传感器读数,然后传递剩余的读数。这可以在传感器需要几次读数来”预热”时使用。在跳过初始读数之后,此过滤器不再起作用。

# 示例配置条目
filters:
- skip_initial: 3

对最近几个值进行简单移动平均。它可以用于在传感器上设置较短的更新间隔,但仅在特定间隔输出平均值(从而提高分辨率)。

# 示例配置条目
- platform: wifi_signal
# ...
filters:
- sliding_window_moving_average:
window_size: 15
send_every: 15

配置变量:

  • window_size (可选, 整数): 在输出值时用于计算平均值的数值数量。

  • send_every (可选, 整数): 传感器值应输出的频率。例如,在上述配置中,加权平均值仅在每收到第 15 个传感器值时才输出。

  • send_first_at (可选, 整数): 默认情况下,启动时的第一个原始值会立即发布。使用此参数可以指定何时发送第一个值。默认为 1

指定的时间周期内计算平均值,可能会节流传入的数值。当此过滤器接收到数值时,它会累加所有数值,并在指定的时间周期结束后推送平均值。在指定的时间周期内需要考虑两种边缘情况:

  • 未接收到数值:返回 NaN - 如果需要定期推送,请添加 heartbeat 过滤器,和/或在需要时添加 filter_out: nan
  • 接收到一个数值:该数值将在指定的时间周期结束后被推送,不计算平均值

例如,throttle_average: 60s 将每 60 秒推送一次数值,前提是在这 60 秒内至少接收到一个传感器数值。

throttle 过滤器相比,它不会丢弃任何数值。与 sliding_window_moving_average 过滤器相比,它支持可变的传感器报告频率,而不会影响过滤器报告间隔(第一种边缘情况除外)。

对传入数值进行节流,除非它们匹配优先级值。当此过滤器接收到一个数值时,它首先检查是否与某个优先级值匹配。如果匹配,该数值将立即通过。否则,它会检查上一个传入数值是否至少已经过了指定的时间周期。如果未超过配置的值,该数值将不会被传递。

# 示例配置条目
filters:
- throttle_with_priority:
timeout: 1s
value:
- nan
- 0

节流传入的值。当此过滤器收到传入值时,它会检查上一个传入值是否至少已有指定时间段。如果未超过配置的值,则该值不会向前传递。

# 示例配置条目
filters:
- throttle: 1s

在发送第一个数值后,如果在指定的 timeout 时间内没有发布后续数值,则发送一个可模板化的值,默认为 NaN。该值也可以设置为 last,这将导致再次发送过滤器接收到的最后一个数值。

此过滤器在以下情况下特别有用:

  • 数据来自可能中断的通信通道(例如串口)。
  • 放置在节流过滤器之前,以确保最后发布的数值能够通过节流。
# 示例配置条目
filters:
- timeout: 10s # 发送的值将为 NaN
- timeout:
timeout: 10s
value: !lambda return 0;
- timeout:
timeout: 10s
value: last # 发送的值将为过滤器接收到的最后一个数值

使用 NTC 特性曲线将传感器可用的温度值转换为对应的电阻值。

配置变量:

  • calibration (必需): 校准数据。

使用此过滤器需要电阻/温度特性曲线。这可以从数据手册中的相应图表获取。如果您没有数据手册或想自己计算这些值,必须首先在不同温度下测量三个电阻值。将 NTC 加热或冷却到三个不同的温度(最好是相差较大的温度),并记录这些温度下的电阻值。然后将这些值输入校准参数:

# 示例配置条目
- platform: template
id: to_ntc_resistance_sensor1
unit_of_measurement: "Ohm"
lambda: |-
return id(some_sensor).state;
update_interval: 1s
filters:
- to_ntc_resistance:
calibration:
- 10.0kOhm -> 25°C
- 27.219kOhm -> 0°C
- 14.674kOhm -> 15°C

过滤器从指定的数值对中确定 Steinhart-Hart 方程的系数,也可以直接指定这些系数作为替代方案。

# 示例配置条目
- platform: template
id: to_ntc_resistance_sensor2
unit_of_measurement: "Ohm"
lambda: |-
return id(some_sensor).state;
update_interval: 1s
filters:
- to_ntc_resistance:
calibration:
a: 1.439114856904070E-03
b: 2.693066430764570E-04
c: 1.653440958554570E-07

要将此传感器生成的电阻值发送到输出组件(例如数字电位器或 DAC),可以使用传感器自动化 on_value。这使得替换物理 NTC 并使其变得”智能”成为可能。

输出组件可以接受 0..1 范围内的值(参见 output.set_level Action),因此需要根据模拟 NTC 的实际电阻值进行缩放。

# 示例配置条目
on_value:
then:
- output.set_level:
id: output_id
level: !lambda return x / 100000.0;

使用 NTC 特性曲线将传感器可用的电阻值转换为对应的温度值。

配置变量:

  • calibration (必需): 校准数据。

使用此过滤器需要电阻/温度特性曲线。这可以从数据手册中的相应图表获取。如果您没有数据手册或想自己计算这些值,必须首先在不同温度下测量三个电阻值。将 NTC 加热或冷却到三个不同的温度(最好是相差较大的温度),并记录这些温度下的电阻值。然后将这些值输入校准参数:

# 示例配置条目
- platform: template
id: to_ntc_temperature_sensor1
unit_of_measurement: "°C"
lambda: |-
return id(some_sensor).state;
update_interval: 1s
filters:
- to_ntc_temperature:
calibration:
- 10.0kOhm -> 25°C
- 27.219kOhm -> 0°C
- 14.674kOhm -> 15°C

过滤器从指定的数值对中确定 Steinhart-Hart 方程的系数,也可以直接指定这些系数作为替代方案。

# 示例配置条目
- platform: template
id: to_ntc_temperature_sensor2
unit_of_measurement: "°C"
lambda: |-
return id(some_sensor).state;
update_interval: 1s
filters:
- to_ntc_temperature:
calibration:
a: 1.439114856904070E-03
b: 2.693066430764570E-04
c: 1.653440958554570E-07

虽然我个人不喜欢华氏温度刻度,但我理解让温度值以华氏度单位显示对某些用户来说相当有用。ESPHome 内部使用摄氏温度单位,我不打算让两者之间的转换变得简单(😉),但您可以使用此过滤器将摄氏值转换为华氏度。

filters:
- lambda: return x * (9.0/5.0) + 32.0;
unit_of_measurement: "°F"

您可以在 lambdas 中使用 id(sensor_id).state 访问传感器的最新状态,使用 id(sensor_id).raw_state 访问最新的原始状态。

当发布通过所有过滤器的新值时,将触发此自动化。在 Lambdas 中,您可以使用 x 从触发器获取该值。

sensor:
- platform: dht
# ...
on_value:
then:
- light.turn_on:
id: light_1
red: !lambda "return x/255;"

配置变量:请参阅 自动化

使用此自动化,您可以观察传感器值是否从定义的值范围外传递到范围内。例如,您可以有一个在湿度超过阈值时触发的自动化,然后打开除湿机。此触发器仅在新值在范围内且前一个值在范围外时触发。启动时,会恢复重启前的最后状态,如果在启动过程中值越过了边界,也会执行触发器。

使用 abovebelow 定义范围。如果只定义了其中一个,则区间是半开的。例如,只有 above: 5 而没有 below 将意味着从 5 到正无穷的范围。

sensor:
- platform: dht
# ...
on_value_range:
- below: 5.0
then:
- switch.turn_on: relay_1
- above: 5.0
below: 10.0
then:
- switch.turn_on: relay_2
- above: 10.0
then:
- switch.turn_on: relay_3

配置变量:

  • above (可选, 浮点数): 触发器的最小值。
  • below (可选, 浮点数): 触发器的最大值。
  • 请参阅 自动化

当收到尚未通过任何过滤器的新值时,将触发此自动化。在 Lambdas 中,您可以使用 x 从触发器获取该值。

sensor:
- platform: dht
# ...
on_raw_value:
then:
- light.turn_on:
id: light_1
red: !lambda "return x/255;"

配置变量:请参阅 自动化

如果给定传感器的状态在范围内,则此条件通过。

使用 abovebelow 定义范围。如果只定义了其中一个,则区间是半开的。例如,只有 above: 5 而没有 below 将意味着从 5 到正无穷的范围。

# 在触发器中:
on_...:
if:
condition:
sensor.in_range:
id: my_sensor
above: 50.0
then:
- script.execute: my_script

配置变量:

  • above (可选, 浮点数): 条件的最小值。
  • below (可选, 浮点数): 条件的最大值。

lambdas 中,您可以调用所有传感器的多种方法来执行一些高级操作(有关更多信息,请参阅完整的 API 参考)。

  • publish_state(): 手动使传感器推送出一个值。然后该值将由传感器过滤器处理,过滤后将通过 ESPHome 传播,并通过 API 传播到 Home Assistant 或通过 MQTT 输出(如果已配置)。
// 在 lambda 中,推送一个值 42.0
id(my_sensor).publish_state(42.0);
  • .state: 检索已通过所有传感器过滤器的传感器当前值。如果还没有值通过所有过滤器,则为 NAN
// 例如,在收到值时创建自定义日志消息:
ESP_LOGI("main", "我的传感器的值: %f", id(my_sensor).state);
  • raw_state: 检索尚未通过任何过滤器的传感器当前值。如果传感器本身还没有推送任何值,则为 NAN
// 例如,在收到值时创建自定义日志消息:
ESP_LOGI("main", "我的传感器的原始值: %f", id(my_sensor).raw_state);