过滤器
filter
integration集成将 Home Assistant 与您的设备、服务等连接和集成。 [Learn more] 启用处理其他实体状态的传感器。
filter
将信号处理算法应用于传感器的先前和当前状态,并根据所选算法生成一个 new state
。下图展示了一个原始传感器和使用 历史图 集成的该传感器的过滤器传感器。
配置
要将 过滤器 helper 添加到您的 Home Assistant 实例中,请使用此 My 按钮:
手动配置步骤
如果上述 My 按钮不起作用,您也可以手动执行以下步骤:
-
浏览到您的 Home Assistant 实例。
-
转到
设置 > 设备与服务。 -
在屏幕顶部,选择标签:Helpers。
-
在右下角,选择
创建助手 按钮。 -
从列表中选择 过滤器。
-
按照屏幕上的说明完成设置。
UI 配置仅支持设置一个过滤器。对于需要多个过滤器的更高级配置,请使用 YAML 配置选项来配置您的过滤器传感器。
关于这些配置选项的进一步信息可以在 YAML 配置 中找到。
YAML 配置
要在您的安装中启用过滤传感器,请将以下内容添加到您的 configuration.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中。
在更改了configuration.yaml
configuration.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
将要使用的过滤器。
用于过滤数据的算法。可用的过滤器有 lowpass
,outlier
,range
,throttle
,time_throttle
和 time_simple_moving_average
。
先前状态的窗口大小。基于时间的过滤器如 time_simple_moving_average
将需要时间段(以时间为单位的大小),而其他过滤器如 outlier
将需要整数(以状态数量为单位的大小)。时间段采用 hh:mm 格式,并且必须用引号括起来。
见 lowpass 过滤器。模糊地与状态影响输出所需的时间量相关。
见 outlier 过滤器。从先前状态的中位数开始的带半径。
见 time_simple_moving_average 过滤器。定义简单移动平均的类型。
见 range 过滤器。过滤器范围的下界。
见 range 过滤器。过滤器范围的上界。
在配置 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):last,next 和 linear。目前仅实现了 last。
如论文所述,Theta 是 window_size
参数,并且可以使用时间标记表示(例如,“00:05” 表示五分钟的时间窗口)。
范围
范围过滤器 (range
) 将传入数据限制在由下界和上界指定的范围内。
所有大于上界的值都将被上界替换,所有小于下界的值都将被下界替换。默认情况下,没有上界和下界。
if new_state > upper_bound:
upper_bound
if new_state < lower_bound:
lower_bound
new_state