home-assistant.io/source/_components/binary_sensor.bayesian.markdown
Jorim Tielemans 873bbada90 Update Bayesian Binary Sensor configuration (#6998)
* Update Bayesian Binary Sensor configuration

* Clarify observation platform example differences

* Update binary_sensor.bayesian.markdown
2018-10-22 21:45:37 +02:00

134 lines
4.1 KiB
Markdown

---
layout: page
title: "Bayesian Binary Sensor"
description: "Instructions on how to integrate threshold Bayesian sensors into Home Assistant."
date: 2017-08-27 20:05
sidebar: true
comments: false
sharing: true
footer: true
logo: home-assistant.png
ha_category: Utility
ha_iot_class: "Local Polling"
ha_release: 0.53
ha_qa_scale: internal
---
The `bayesian` binary sensor platform observes the state from multiple sensors and uses [Bayes' rule](https://en.wikipedia.org/wiki/Bayes%27_theorem) to estimate the probability that an event has occurred given the state of the observed sensors. If the estimated posterior probability is above the `probability_threshold`, the sensor is `on` otherwise it is `off`.
This allows for the detection of complex events that may not be readily observable, e.g., cooking, showering, in bed, the start of a morning routine, etc. It can also be used to gain greater confidence about events that _are_ directly observable, but for which the sensors can be unreliable, e.g., presence.
## {% linkable_title Configuration %}
To enable the Bayesian sensor, add the following lines to your `configuration.yaml`:
```yaml
# Example configuration.yaml entry
binary_sensor:
- platform: bayesian
prior: 0.1
observations:
- entity_id: 'switch.kitchen_lights'
prob_given_true: 0.6
prob_given_false: 0.2
platform: 'state'
to_state: 'on'
```
{% configuration %}
prior:
description: >
The prior probability of the event. At any point in time
(ignoring all external influences) how likely is this event to occur?
required: true
type: float
probability_threshold:
description: The probability at which the sensor should trigger to `on`.
required: false
type: float
default: 0.5
name:
description: Name of the sensor to use in the frontend.
required: false
type: string
default: Bayesian Binary Sensor
observations:
description: The observations which should influence the likelihood that the given event has occurred.
required: true
type: list
keys:
entity_id:
description: Name of the entity to monitor.
required: true
type: string
prob_given_true:
description: The probability of the observation occurring, given the event is `true`.
required: true
type: float
prob_given_false:
description: The probability of the observation occurring, given the event is `false` can be set as well.
required: false
type: float
default: "`1 - prob_given_true` if `prob_given_false` is not set"
platform:
description: >
The only supported observation platforms are `state` and `numeric_state`,
which are modeled after their corresponding triggers for automations,
requiring `below` and/or `above` instead of `to_state`.
required: true
type: string
to_state:
description: The target state.
required: true
type: string
{% endconfiguration %}
## {% linkable_title Full examples %}
The following is an example for the `state` observation platform.
```yaml
# Example configuration.yaml entry
binary_sensor:
name: 'in_bed'
platform: 'bayesian'
prior: 0.25
probability_threshold: 0.95
observations:
- entity_id: 'sensor.living_room_motion'
prob_given_true: 0.4
prob_given_false: 0.2
platform: 'state'
to_state: 'off'
- entity_id: 'sensor.basement_motion'
prob_given_true: 0.5
prob_given_false: 0.4
platform: 'state'
to_state: 'off'
- entity_id: 'sensor.bedroom_motion'
prob_given_true: 0.5
platform: 'state'
to_state: 'on'
- entity_id: 'sun.sun'
prob_given_true: 0.7
platform: 'state'
to_state: 'below_horizon'
```
Next up an example which targets the `numeric_state` observation platform,
as seen in the configuration it requires `below` and/or `above` instead of `to_state`.
```yaml
# Example configuration.yaml entry
binary_sensor:
name: 'Heat On'
platform: 'bayesian'
prior: 0.2
probability_threshold: 0.9
observations:
- entity_id: 'sensor.outside_air_temperature_fahrenheit'
prob_given_true: 0.95
platform: 'numeric_state'
below: 50
```