Kalman filter-based sensor fusion¶
The kalman_combinator
sensor platform allows you to filter one or several
sensors into one with a reduced error. If using a single sensor as data source,
it acts like a exponential_moving_average filter. With
multiple sensors, it combines their values based on their respective standard
deviation.
The unit_of_measurement
, device_class
, entity_category
, icon
, and
accuracy_decimals
properties are by default inherited from the first sensor.
state_class
is explicitly not inherited, because total_increasing
states
could still decrease when multiple sensors are used.
# Example configuration entry
sensor:
- platform: kalman_combinator
name: "Temperature"
unit_of_measurement: °C
process_std_dev: 0.001
sources:
- source: temperature_sensor_1
error: 1.0
- source: temperature_sensor_2
error: !lambda |-
return 0.5 + std::abs(x - 25) * 0.023
Configuration variables:¶
process_std_dev (Required, float): The standard deviation of the measurement’s change per second (e.g.
1/3600 = 0.000277
if the temperature usually changes at most by one Kelvin per hour). A low value here will place high importance on the current state and be slow to respond to changes in the measured samples. A high value will update faster, but also be more noisy.std_dev (Optional, Sensor): A sensor that publishes the current standard deviation of the state with each update.
sources (Required, list): A list of sensors to use as source. Each source must have either error or error_function set. These work like the process_std_dev parameter, with low values marking accurate data.
source (Required, ID of a Sensor Component): The sensor that is used as sample source
error (Required, float, templatable): The standard deviation of the sensor’s measurements. If implemented as a template, the measurement is in parameter
x
.
All other options from Sensor.