过滤器

filter integration集成将 Home Assistant 与您的设备、服务等连接和集成。 [Learn more] 启用处理其他实体状态的传感器。

filter 将信号处理算法应用于传感器的先前和当前状态,并根据所选算法生成一个 new state。下图展示了一个原始传感器和使用 历史图 集成的该传感器的过滤器传感器。

配置

要将 过滤器 helper 添加到您的 Home Assistant 实例中,请使用此 My 按钮:

手动配置步骤

如果上述 My 按钮不起作用,您也可以手动执行以下步骤:

  • 浏览到您的 Home Assistant 实例。

  • 转到 设置 > 设备与服务

  • 在屏幕顶部,选择标签:Helpers

  • 在右下角,选择 创建助手 按钮。

  • 从列表中选择 过滤器

  • 按照屏幕上的说明完成设置。

Note

UI 配置仅支持设置一个过滤器。对于需要多个过滤器的更高级配置,请使用 YAML 配置选项来配置您的过滤器传感器。

关于这些配置选项的进一步信息可以在 YAML 配置 中找到。

名称

传感器所应具有的名称。

实体

提供输入的实体。仅支持 sensor 实体。

过滤器

用于过滤数据的算法。可用的过滤器有 “低通”,“离群值”,“范围”,“节流”,“时间节流” 和 “移动平均(基于时间)”。

精度

定义过滤状态的精度。

窗口大小

先前状态的窗口大小。基于时间的过滤器需要时间段,而其他过滤器需要一个整数。

时间常数

模糊地与状态影响输出所需的时间量相关。

半径

从先前状态的中位数开始的带半径。

类型

定义简单移动平均的类型。

下界

过滤器范围的下界。

上界

过滤器范围的上界。

YAML 配置

要在您的安装中启用过滤传感器,请将以下内容添加到您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中。 在更改了configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件后,重启 Home Assistant 以应用更改。

# 示例 configuration.yaml 条目
sensor:
  - platform: filter
    name: "过滤后的真实湿度"
    entity_id: sensor.realistic_humidity
    filters:
      - filter: outlier
        window_size: 4
        radius: 4.0
      - filter: lowpass
        time_constant: 10
        precision: 2
  - platform: filter
    name: "过滤后的真实温度"
    entity_id: sensor.realistic_temperature
    filters:
      - filter: outlier
        window_size: 4
        radius: 2.0
      - filter: lowpass
        time_constant: 10
      - filter: time_simple_moving_average
        window_size: "00:05"
        precision: 2

过滤器可以串联,并根据配置文件中的顺序应用。

Configuration Variables

entity_id string Required

要过滤的传感器的实体 ID。

名称 string (Optional)

前端使用的名称。

unique_id string (Optional)

唯一标识过滤传感器的 ID。将此设置为唯一值,以允许通过 UI 进行自定义。

filters list Required

将要使用的过滤器。

filter string Required

用于过滤数据的算法。可用的过滤器有 lowpassoutlierrangethrottletime_throttletime_simple_moving_average

precision integer (Optional, default: 2)

通过 round() 的参数定义过滤状态的精度。

window_size integer | time (Optional, default: 1)

先前状态的窗口大小。基于时间的过滤器如 time_simple_moving_average 将需要时间段(以时间为单位的大小),而其他过滤器如 outlier 将需要整数(以状态数量为单位的大小)。时间段采用 hh:mm 格式,并且必须用引号括起来。

time_constant integer (Optional, default: 10)

lowpass 过滤器。模糊地与状态影响输出所需的时间量相关。

radius float (Optional, default: 2.0)

outlier 过滤器。从先前状态的中位数开始的带半径。

type string (Optional, default: last)

time_simple_moving_average 过滤器。定义简单移动平均的类型。

lower_bound float (Optional, default: 负无穷)

range 过滤器。过滤器范围的下界。

upper_bound float (Optional, default: 正无穷)

range 过滤器。过滤器范围的上界。

Warning

在配置 window_size 为非时间且值大于默认的 1 时,数据库必须在 Home Assistant 启动期间检查几乎每个存储的该实体的状态。如果您已修改 Recorder purge_keep_days 值或为过滤实体存储了许多状态,这可能会导致您的 Home Assistant 实例在启动时响应不佳。

过滤器

低通

低通过滤器 (lowpass) 是信号处理最常见的过滤器之一,因为它通过消除峰值和谷值来平滑数据。

包含的低通过滤器非常基础,并基于 指数平滑,其中先前的数据点与新的数据点加权。

B = 1.0 / time_constant
A = 1.0 - B
LowPass(state) = A * previous_state + B * state

离群值

离群值过滤器 (outlier) 是基于的基础带通过滤器,因为它切除任何超出特定范围的值。

包含的离群值过滤器将丢弃超出先前值中位数的带的任何值,并将其替换为先前值的中位数。如果在带内,将返回当前状态。

distance = abs(state - median(previous_states))

if distance > radius:
    median(previous_states)
else:
    state

节流

节流过滤器 (throttle) 只会更新窗口中第一个状态的传感器状态。这意味着过滤器将跳过所有其他值。

要调整速率,您需要设置 window_size。为了将传感器的输出限制到 10%,window_size 应设置为 10,50% 应设置为 2。

当您有一个以非常高的速率生成状态的传感器时,此过滤器是相关的,您可能希望降低速率以用于存储或可视化目的。

时间节流

时间节流过滤器 (time_throttle) 只会更新窗口中第一个状态的传感器状态。这意味着过滤器将跳过所有其他值。

要调整速率,您需要设置 window_size。为了将传感器的输出限制到每分钟 1 个值,window_size 应设置为 “00:01”。

当您有一个以非常高的不规则速率生成状态的传感器时,此过滤器是相关的,您可能希望将其限制为某个固定速率以用于存储或可视化目的。

时间简单移动平均

时间 SMA 过滤器 (time_simple_moving_average) 基于 Andreas Eckner 的论文 算法用于不均匀间隔的时间序列:移动平均和其他滚动运算符

论文定义了三种类型/版本的简单移动平均 (SMA):lastnextlinear。目前仅实现了 last

如论文所述,Theta 是 window_size 参数,并且可以使用时间标记表示(例如,“00:05” 表示五分钟的时间窗口)。

范围

范围过滤器 (range) 将传入数据限制在由下界和上界指定的范围内。

所有大于上界的值都将被上界替换,所有小于下界的值都将被下界替换。默认情况下,没有上界和下界。

if new_state > upper_bound:
    upper_bound
if new_state < lower_bound:
    lower_bound
new_state