传感器组件
ESPHome 支持许多不同类型的传感器。每个传感器都是
sensor 域的一个平台,且每个传感器都有若干基础
配置选项。
传感器基础配置
Section titled “传感器基础配置”ESPHome 中的所有传感器都有一个名称和一些其他 可选配置选项。默认情况下,传感器平台将 为所有选项自动选择合适值,但您始终可以 根据需要覆盖它们。
# Example sensor configurationname: Livingroom Temperature
# Optional variables:unit_of_measurement: "°C"icon: "mdi:water-percent"device_class: "temperature"state_class: "measurement"accuracy_decimals: 1expire_after: 30sfilters: - 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 选项:
NOTE
如果您试图为有多个输出的传感器(例如同时报告温度和湿度的 DHT22)设置过滤器,请将 filters 选项放入每个传感器输出中,如下所示:
sensor: - platform: dht # ... temperature: filters: # ... humidity: filters: # ...传感器过滤器
Section titled “传感器过滤器”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;线性校准滤波器
Section titled “线性校准滤波器”通过使用与精确”真值”源测量得到的值来校准传感器数值。
配置变量:
-
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 且给定超过两个值时,将计算线性解,
但不一定精确表示每个值。

多项式校准滤波器
Section titled “多项式校准滤波器”通过将传感器数值拟合到多项式函数来校准。这与
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 entryfilters: - clamp: min_value: 10 max_value: 75 ignore_out_of_range: trueDebounce Filter
Section titled “Debounce Filter”只有当最后一个传入的值至少已有 specified time period 旧时,才发送数值。例如,如果两个值几乎同时到达,此过滤器仅输出最后一个值,并且仅在指定时间范围内没有新值传入时才会输出。
Delta 滤波器
Section titled “Delta 滤波器”此滤波器存储通过该滤波器的最后一个值,仅在当前值与之前通过的值
足够不同时才传递当前值。
此差异可以通过两种方式计算:绝对差异或百分比差异,并
相对于最小值 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 entryfilters: - 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 entryfilters: - delta: 20%在设置最大 Delta 滤波器时,传感器值可能会超出 滤波器允许的带宽范围且无法返回。在这种情况下,覆盖 默认的被比较值(最后通过的值)为其他任意决定基线的传感器可能会有所帮助:
# Example configuration entrysensors: # 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();指数移动平均滤波器
Section titled “指数移动平均滤波器”对最近几个值进行简单的 指数移动平均。它可以用来在传感器上设置较短的更新间隔,但仅在特定间隔 推送平均值(从而增加分辨率)。
配置变量:
-
alpha(可选,float):滤波器的遗忘因子/alpha 值。 较高的值在输出中包含更多细节,而较低的值则去除更多噪声。 默认为
0.1。 -
send_every(可选,int):应多久推送一次传感器值。默认为
15。 -
send_first_at(可选,int):默认情况下,启动时第一个原始值会立即 发布。使用此参数可以指定第一次值何时发送。 默认为
1。
Filter Out 滤波器
Section titled “Filter Out 滤波器”(必填,number):过滤掉特定值以显示,例如过滤掉值 85.0
# Example configuration entryfilters: - filter_out: 85.0可以提供一个值列表,且值是可模板化的:
# Example configuration entryfilters: - filter_out: - 85.0 - !lambda return id(some_sensor).get_state();Heartbeat 滤波器
Section titled “Heartbeat 滤波器”以指定的时间间隔定期发送传感器值。如果传感器值在此间隔内 发生变化,计时器不会重置——当间隔结束时,传感器最后一次已知的值仍将 被发送。
例如,值 10s 将使滤波器每 10 秒输出最后一次已知的值,
而不管输入值变化的频率。
使用 optimistic 模式时,滤波器仍会在配置的间隔处重复发送最后一次已知的值,
但此外,每个新输入的 value 都会在到达时立即发布。这确保
传感器输出在变化时即时更新,同时在更新之间保持稳定的最后一值的周期
性”心跳”。此模式适用于需要即时响应的传感器。
配置变量:
- period(必填,time):重新发布最后一次已知值的间隔。
- optimistic(可选,布尔值):启用后,每个新输入的 value 都会在到达时立即发布,而 不管配置的时间间隔。
# Example filtersfilters: - heartbeat: 5s - heartbeat: period: 5s optimistic: trueLambda 滤波器
Section titled “Lambda 滤波器”对传感器值执行简单的数学运算。输入值是 x,
lambda 的结果用作输出(使用 return)。
# Example configuration entryfilters: - lambda: return x * (9.0/5.0) + 32.0;请确保在 lambda 中的所有值后添加 .0,否则整数除法将
得到整数(而不是浮点值)。
要阻止值发布,返回 {}:
# Example configuration entryfilters: - lambda: |- if (x < 10) return {}; return x-10;最大值滤波器
Section titled “最大值滤波器”对最近几个值进行移动最大值计算。较大的窗口大小会使滤波器对 输入变化的反应变慢。
# 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。
中位数滤波器
Section titled “中位数滤波器”对最近几个值进行 简单移动中位数 计算。这可以用于过滤接收到的传感器数据中的异常值。较大的 窗口大小会使滤波器对输入变化的反应变慢。
# 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。
最小值滤波器
Section titled “最小值滤波器”对最近几个值进行移动最小值计算。较大的窗口大小会使滤波器对 输入变化的反应变慢。
# 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。
将每个值乘以一个可模板化的值。
偏移量滤波器
Section titled “偏移量滤波器”向每个传感器值添加一个值。该值可以是一个常量,也可以是返回 float 的 lambda。
# Example configuration entryfilters: - offset: 2.0 - offset: !lambda return id(some_sensor).get_state();Or 滤波器
Section titled “Or 滤波器”将第一个返回的子滤波器的值转发出去。下面的示例 将只转发那些 要么 至少 1s 旧 或者 绝对 差异至少为 5.0 的值。
# Example configuration entryfilters: - or: - throttle: 1s - delta: 5.0分位数滤波器
Section titled “分位数滤波器”对最近几个值进行 简单移动分位数 计算。这可以用于过滤接收到的传感器数据中的异常值。较大的 窗口大小会使滤波器对输入变化的反应变慢。
# 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。
Round To Multiple Of 滤波器
Section titled “Round To Multiple Of 滤波器”将值四舍五入到最近的倍数。接受一个大于零的浮点数。
# Example configuration entryfilters: - round_to_multiple_of: 10 # 123 -> 120 # 126 -> 130
# Example configuration entryfilters: - round_to_multiple_of: 0.25 # 3.1415 -> 3.25 # 1.6180 -> 1.5有效数字舍入滤波器
Section titled “有效数字舍入滤波器”将值四舍五入到指定的有效数字位数。接受一个 1 到 6 之间的整数。应理解的是,由于 32 位浮点数的精度有限,舍入的结果可能与预期值不完全相等,这使得某些值无法表示。
# Example configuration entryfilters: - round_to_significant_digits: 2 # 3.14159 -> 3.1 # 157079 -> 160000
# Example configuration entryfilters: - round_to_significant_digits: 4 # 3.14159 -> 3.142 # 157079 -> 157100将值四舍五入到指定的小数位。
# Example configuration entryfilters: - round: 1 # will round to 1 decimal placeSkip Initial 滤波器
Section titled “Skip Initial 滤波器”简单的跳过滤波器;skip_initial: N 跳过前 N 个传感器读数,并传递
其余的。当传感器需要几次读数来”预热”时,可以使用此滤波器。在初始
读数被跳过之后,此滤波器不再做任何事情。
# Example configuration entryfilters: - skip_initial: 3滑动窗口移动平均滤波器
Section titled “滑动窗口移动平均滤波器”对最近几个值进行 简单移动平均 计算。它可以用来在传感器上设置较短的更新间隔,但仅在特定间隔 推送平均值(从而增加分辨率)。
# 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。
Throttle Average 滤波器
Section titled “Throttle Average 滤波器”在 指定时间段 上的平均值,可能会对输入的值进行节流。当此滤波器接收到输入值时,它会汇总所有值,并在 指定时间段 过后推送平均值。在 指定时间段 内有两种边界情况需要考虑:
- 未接收任何值:返回
NaN- 如果需要定期推送,请添加heartbeat滤波器;如需要,可添加filter_out: nan - 只接收一个值:在
指定时间段过后直接推送该值,不进行平均计算
例如,throttle_average: 60s 将每 60 秒推送一个值,前提是这些 60 秒内至少收到一个传感器值。
与 throttle 滤波器相比,它不会丢弃任何值。与 sliding_window_moving_average 滤波器相比,它支持变化的传感器报告速率,而不会影响滤波器的报告间隔(除第一种边界情况外)。
NOTE
throttle_average 的时间段上限为 24 小时。指定更长周期的配置将在验证时被拒绝。多日滚动平均最好使用其他聚合策略(例如,在 Home Assistant 中计算平均值),因为跨多天累积单一运行总和会遭受浮点精度丢失。
Throttle With Priority 滤波器
Section titled “Throttle With Priority 滤波器”对输入的值进行节流,除非它们匹配一个优先级值。当此滤波器接收到一个输入值时,首先
检查它是否匹配优先级值之一。如果是,该值会立即通过。否则,它会
检查上一个输入值是否至少已经过 指定时间段。如果它不大于配置的
值,则不传递该值。
# Example configuration entryfilters: - throttle_with_priority: timeout: 1s value: - nan - 0Throttle 滤波器
Section titled “Throttle 滤波器”对输入的值进行节流。当此滤波器接收到一个输入值时,
它会检查上一个输入值是否至少已经过 指定时间段。
如果它不大于配置的值,则不传递该值。
# Example configuration entryfilters: - throttle: 1sTimeout 滤波器
Section titled “Timeout 滤波器”在发送第一个值之后,如果在指定的 timeout 时间段内没有发布后续值,则发送
一个可模板化的值,默认为 NaN。该值也可以设置为 last,这将导致滤波器接收到的最后
一个值再次被发送。
此滤波器在以下情况下特别有用:
- 数据源自某个通信通道(例如串口),该通道可能会被中断。
- 放在节流滤波器之前,以确保最后发布的值能通过节流。
# Example configuration entryfilters: - 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 filterTo Ntc Resistance 滤波器
Section titled “To Ntc Resistance 滤波器”使用 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 entryon_value: then: - output.set_level: id: output_id level: !lambda return x / 100000.0;To Ntc Temperature 滤波器
Section titled “To Ntc Temperature 滤波器”使用 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示例:摄氏度转换为华氏度
Section titled “示例:摄氏度转换为华氏度”虽然我个人不喜欢华氏温度标度,但我确实 理解让温度值以华氏单位显示对一些用户 非常有用。ESPHome 内部使用摄氏度温度 单位,我也没有计划让两者之间的转换变得简单(😉),但您可以使用此过滤器将摄氏度值转换为 华氏度。
filters: - lambda: return x * (9.0/5.0) + 32.0;unit_of_measurement: "°F"传感器自动化
Section titled “传感器自动化”您可以在 lambdas 中使用
id(sensor_id).get_state() 访问传感器的最新状态,并使用 id(sensor_id).get_raw_state() 访问最近的原始状态。
on_value
Section titled “on_value”当经过所有过滤器并发布的新值时,此自动化将被触发。在 Lambdas 中,您可以使用
x 从触发器中获取值。
sensor: - platform: dht # ... on_value: then: - light.turn_on: id: light_1 red: !lambda "return x/255;"配置变量:参见 Automation。
on_value_range
Section titled “on_value_range”通过此自动化,您可以观察传感器值是否从 定义的范围之外过渡到范围内。例如,您可以设置一个 在湿度越过阈值时触发并打开除湿机的自动化。 此触发器仅在新值在范围内且之前的值 在范围外时触发。启动时,恢复重启前的最后状态,如果值在启动过程中 越过了边界,也会执行触发器。
使用 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。
on_raw_value
Section titled “on_raw_value”当收到未经过任何过滤器的新值时,此自动化将被触发。在 Lambdas 中,您可以使用
x 从触发器中获取值。
sensor: - platform: dht # ... on_raw_value: then: - light.turn_on: id: light_1 red: !lambda "return x/255;"配置变量:参见 Automation。
sensor.in_range 条件
Section titled “sensor.in_range 条件”如果给定传感器的状态在范围内,则此条件通过。
使用 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): 条件的最大值。
Lambda 调用
Section titled “Lambda 调用”在 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());