跳转到内容

传感器组件

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

ESPHome 中的所有传感器都有一个名称和一些其他 可选配置选项。默认情况下,传感器平台将 为所有选项自动选择合适值,但您始终可以 根据需要覆盖它们。

# Example sensor configuration
name: Livingroom Temperature
# Optional variables:
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 (可选,string): 手动指定代码生成的 ID。至少需指定 id 和 name 中的一个。
  • name (可选,string): 传感器的名称。至少需指定 id 和 name 中的一个。

NOTE

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

  • unit_of_measurement (可选,string): 手动设置传感器应公告值的测量单位。这 实际上不进行任何数学运算(单位之间的转换)。

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

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

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

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

  • filters (可选): 指定用于值基本 转换的过滤器。更多信息参见 Sensor 过滤器。

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

  • force_update (可选,boolean): 如果为 true,此选项将强制前端(通常是 Home Assistant)在传感器更新时创建状态变更事件,即使值未发生变化。 Grafana 等应用在使用 Home Assistant 时需要此选项,但请注意这可能会 显著增加数据库大小。默认为 false。

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

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

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

自动化:

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

  • on_value_range (可选,Automation): 当发布的值从范围 外部过渡到范围内时执行的自动化。参见 on_value_range。

  • on_raw_value (可选,Automation): 收到未经过任何过滤器的 原始值时执行的自动化。参见 on_raw_value。

MQTT 选项:

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

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

NOTE

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

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

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

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

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

# Example filters:
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(可选,字符串):计算线性函数(s)的方法。 可选 least_squares 或 exact。默认为 least_squares。

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

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

# Example configuration entry
- platform: dht
# ...
temperature:
name: "DHT22 Temperature"
filters:
- calibrate_linear:
method: least_squares
datapoints:
# Map 0.0 (from sensor) to 1.0 (true value)
- 0.0 -> 1.0
- 10.0 -> 12.1

参数是一组数据点,每个数据点格式为 MEASURED -> TRUTH。根据 method,ESPHome 将使用最小二乘法将线性方程拟合到这些值, 或者使用多个线性方程精确连接这些值。你需要提供至少两个 值。当使用 least_squares 且给定超过两个值时,将计算线性解, 但不一定精确表示每个值。

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

# Example configuration entry
- platform: adc
# ...
filters:
- calibrate_polynomial:
degree: 2
datapoints:
# Map 0.0 (from sensor) to 0.0 (true value)
- 0.0 -> 0.0
- 10.0 -> 12.1
- 13.0 -> 14.0

参数是一组数据点,每个数据点格式为 MEASURED -> TRUTH。此外,你需要 指定所得多项式的次数,数据点将使用最小二乘法求解器拟合到给定的次数。

将值限制在 min_value 和 max_value 之间的闭区间范围内。

配置变量:

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

必须指定 min_value 或 max_value 中的至少一个。

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

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

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

# Example configuration entry
filters:
- clamp:
min_value: 10
max_value: 75
ignore_out_of_range: true

只有当最后一个传入的值至少已有 specified time period 旧时,才发送数值。例如,如果两个值几乎同时到达,此过滤器仅输出最后一个值,并且仅在指定时间范围内没有新值传入时才会输出。

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

配置变量:

  • min_value(可选,float、百分比):所需的最小绝对或百分比差异(默认为 0.0)
  • max_value(可选,float、百分比):允许的最大绝对或百分比差异(默认为无穷大)
  • baseline(可选,float、lambda):计算差异时使用的基线 默认情况下使用最后通过的值。

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

此滤波器将拒绝与基线的差异不大于 min_value 的值,或 与基线的差异大于 max_value 的值。 例如,如果滤波器配置的值是 2.0,则只有与最后通过值相差超过 2.0 的值 才会被通过。

NOTE

min_value 为 0.0 表示 与上一个值相等的值不会被通过,只有不同的值才会通过,这对于 消除重复值非常有用。

# Example configuration entry
filters:
- delta:
min_value: 2.0
# Same as above, min_value is implied here.
- delta: 2.0
- delta:
max_value: 10%
# Specifying both min_value and max_value is permitted.
- delta:
min_value: 2.0
max_value: 10%

如果指定了百分比,则最后一个值的百分比将用作所需差异。 例如,如果滤波器配置的值是 20%,且最后通过的值是 10, 则只有大于或等于 12 或小于或等于 8 的值才会被通过。 然而,如果最后通过的值是 100,则只有大于或等于 120 或小于或 等于 80 的值才会被通过。

# Example configuration entry
filters:
- delta: 20%

在设置最大 Delta 滤波器时,传感器值可能会超出 滤波器允许的带宽范围且无法返回。在这种情况下,覆盖 默认的被比较值(最后通过的值)为其他任意决定基线的传感器可能会有所帮助:

# Example configuration entry
sensors:
# This sensor just calculates the baseline.
- platform: copy
source_id: my_sensor_to_be_filtered
id: baseline
filters:
- median:
window_size: 6
send_every: 1
send_first_at: 1
# This sensor will publish the values from your sensor with the max delta filter applied.
- platform: copy
source_id: my_sensor_to_be_filtered
name: "Filter Max With Baseline"
id: filter_baseline_max
filters:
- delta:
max_value: 10
baseline: !lambda return id(baseline).get_state();

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

配置变量:

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

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

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

(必填,number):过滤掉特定值以显示,例如过滤掉值 85.0

# Example configuration entry
filters:
- filter_out: 85.0

可以提供一个值列表,且值是可模板化的:

# Example configuration entry
filters:
- filter_out:
- 85.0
- !lambda return id(some_sensor).get_state();

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

例如,值 10s 将使滤波器每 10 秒输出最后一次已知的值, 而不管输入值变化的频率。

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

配置变量:

  • period(必填,time):重新发布最后一次已知值的间隔。
  • optimistic(可选,布尔值):启用后,每个新输入的 value 都会在到达时立即发布,而 不管配置的时间间隔。
# Example filters
filters:
- heartbeat: 5s
- heartbeat:
period: 5s
optimistic: true

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

# Example configuration entry
filters:
- lambda: return x * (9.0/5.0) + 32.0;

请确保在 lambda 中的所有值后添加 .0,否则整数除法将 得到整数(而不是浮点值)。

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

# Example configuration entry
filters:
- lambda: |-
if (x < 10) return {};
return x-10;

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

# Example configuration entry
- platform: ...
# ...
filters:
- max:
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。

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

# Example configuration entry
- 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。

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

# Example configuration entry
- 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。

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

向每个传感器值添加一个值。该值可以是一个常量,也可以是返回 float 的 lambda。

# Example configuration entry
filters:
- offset: 2.0
- offset: !lambda return id(some_sensor).get_state();

将第一个返回的子滤波器的值转发出去。下面的示例 将只转发那些 要么 至少 1s 旧 或者 绝对 差异至少为 5.0 的值。

# Example configuration entry
filters:
- or:
- throttle: 1s
- delta: 5.0

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

# Example configuration entry
- 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。

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

# Example configuration entry
filters:
- round_to_multiple_of: 10
# 123 -> 120
# 126 -> 130
# Example configuration entry
filters:
- round_to_multiple_of: 0.25
# 3.1415 -> 3.25
# 1.6180 -> 1.5

将值四舍五入到指定的有效数字位数。接受一个 1 到 6 之间的整数。应理解的是,由于 32 位浮点数的精度有限,舍入的结果可能与预期值不完全相等,这使得某些值无法表示。

# Example configuration entry
filters:
- round_to_significant_digits: 2
# 3.14159 -> 3.1
# 157079 -> 160000
# Example configuration entry
filters:
- round_to_significant_digits: 4
# 3.14159 -> 3.142
# 157079 -> 157100

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

# Example configuration entry
filters:
- round: 1 # will round to 1 decimal place

简单的跳过滤波器;skip_initial: N 跳过前 N 个传感器读数,并传递 其余的。当传感器需要几次读数来”预热”时,可以使用此滤波器。在初始 读数被跳过之后,此滤波器不再做任何事情。

# Example configuration entry
filters:
- skip_initial: 3

对最近几个值进行 简单移动平均 计算。它可以用来在传感器上设置较短的更新间隔,但仅在特定间隔 推送平均值(从而增加分辨率)。

# Example configuration entry
- platform: wifi_signal
# ...
filters:
- sliding_window_moving_average:
window_size: 15
send_every: 15

配置变量:

  • window_size(可选,int):推送值时执行 平均所涉及的值数量。

  • send_every(可选,int):应多久推送一次传感器值。例如, 在上面的配置中,加权平均值仅在 每 15 次接收到的传感器值时才被推出。

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

在 指定时间段 上的平均值,可能会对输入的值进行节流。当此滤波器接收到输入值时,它会汇总所有值,并在 指定时间段 过后推送平均值。在 指定时间段 内有两种边界情况需要考虑:

  • 未接收任何值:返回 NaN - 如果需要定期推送,请添加 heartbeat 滤波器;如需要,可添加 filter_out: nan
  • 只接收一个值:在 指定时间段 过后直接推送该值,不进行平均计算

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

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

NOTE

throttle_average 的时间段上限为 24 小时。指定更长周期的配置将在验证时被拒绝。多日滚动平均最好使用其他聚合策略(例如,在 Home Assistant 中计算平均值),因为跨多天累积单一运行总和会遭受浮点精度丢失。

对输入的值进行节流,除非它们匹配一个优先级值。当此滤波器接收到一个输入值时,首先 检查它是否匹配优先级值之一。如果是,该值会立即通过。否则,它会 检查上一个输入值是否至少已经过 指定时间段。如果它不大于配置的 值,则不传递该值。

# Example configuration entry
filters:
- throttle_with_priority:
timeout: 1s
value:
- nan
- 0

对输入的值进行节流。当此滤波器接收到一个输入值时, 它会检查上一个输入值是否至少已经过 指定时间段。 如果它不大于配置的值,则不传递该值。

# Example configuration entry
filters:
- throttle: 1s

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

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

  • 数据源自某个通信通道(例如串口),该通道可能会被中断。
  • 放在节流滤波器之前,以确保最后发布的值能通过节流。
# Example configuration entry
filters:
- timeout: 10s # sent value will be NaN
- timeout:
timeout: 10s
value: !lambda return 0;
- timeout:
timeout: 10s
value: last # sent value will be the last value received by the filter

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

配置变量:

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

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

# Example configuration entry
- platform: template
id: to_ntc_resistance_sensor1
unit_of_measurement: "Ohm"
lambda: |-
return id(some_sensor).get_state();
update_interval: 1s
filters:
- to_ntc_resistance:
calibration:
- 10.0kOhm -> 25°C
- 27.219kOhm -> 0°C
- 14.674kOhm -> 15°C

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

# Example configuration entry
- platform: template
id: to_ntc_resistance_sensor2
unit_of_measurement: "Ohm"
lambda: |-
return id(some_sensor).get_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 操作), 因此需要对模拟 NTC 的实际电阻值进行缩放。

# Example configuration entry
on_value:
then:
- output.set_level:
id: output_id
level: !lambda return x / 100000.0;

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

配置变量:

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

使用此滤波器需要电阻/温度特性曲线。 如果你有热敏电阻的数据手册,可以查看其 “B 常数”和参考温度/电阻。例如, 此产品 将具有 以下校准配置。

# Example configuration entry
- platform: template
id: to_ntc_temperature_sensor1
unit_of_measurement: "°C"
lambda: |-
return id(some_sensor).get_state();
update_interval: 1s
filters:
- to_ntc_temperature:
calibration:
b_constant: 3950
reference_temperature: 25°C
reference_resistance: 10kOhm

这可以从数据手册中的相应图表中获取。如果你没有 访问数据手册或想自己计算这些值,你 必须首先测量三个不同温度下的电阻值。 将 NTC 加热或冷却到三个不同温度(最好是相隔较远 的温度),并记录这些温度下的电阻值。 然后将这些值输入校准参数中:

# Example configuration entry
- platform: template
id: to_ntc_temperature_sensor1
unit_of_measurement: "°C"
lambda: |-
return id(some_sensor).get_state();
update_interval: 1s
filters:
- to_ntc_temperature:
calibration:
- 10.0kOhm -> 25°C
- 27.219kOhm -> 0°C
- 14.674kOhm -> 15°C

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

# Example configuration entry
- platform: template
id: to_ntc_temperature_sensor2
unit_of_measurement: "°C"
lambda: |-
return id(some_sensor).get_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).get_state() 访问传感器的最新状态,并使用 id(sensor_id).get_raw_state() 访问最近的原始状态。

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

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

配置变量:参见 Automation。

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

使用 above 和 below 定义范围。如果仅定义了其中一个,则区间为半开区间。 例如,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 (可选,float): 触发的最小值。
  • below (可选,float): 触发的最大值。
  • 参见 Automation。

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

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

配置变量:参见 Automation。

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

使用 above 和 below 定义范围。如果仅定义了其中一个,则区间为半开区间。 例如,above: 5 且无 below 表示从 5 到正无穷的范围。

# in a trigger:
on_...:
if:
condition:
sensor.in_range:
id: my_sensor
above: 50.0
then:
- script.execute: my_script

配置变量:

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

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

  • publish_state() : 手动让传感器推送出一个值。然后 它将被传感器过滤器处理,经过过滤后将通过 ESPHome 传播,并通过 API 到 Home Assistant 或通过 MQTT 输出(如果已配置)。
// Within lambda, push a value of 42.0
id(my_sensor).publish_state(42.0);
  • .get_state() : 获取传感器通过所有传感器过滤器后的当前值。 如果尚无值通过所有过滤器,则为 NAN。
// For example, create a custom log message when a value is received:
ESP_LOGI("main", "Value of my sensor: %f", id(my_sensor).get_state());
  • .get_raw_state() : 获取未经过任何过滤器的传感器当前值。 如果传感器本身尚未推送任何值,则为 NAN。
// For example, create a custom log message when a value is received:
ESP_LOGI("main", "Raw Value of my sensor: %f", id(my_sensor).get_raw_state());