跳转到内容

差值过滤器

此过滤器存储通过此过滤器的最后一个值,仅当传入值与先前传递的值有足够差异时才传递传入值。 这种差异可以通过两种方式计算:绝对差异或百分比差异,并且可以相对于最小值 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;