Bayesian Binary Sensor


The bayesian binary sensor platform observes the state from multiple sensors and uses Bayes’ rule 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.

Configuration

To enable the Bayesian sensor, add the following lines to your configuration.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 variables:

  • prior (Required): The prior probability of the event. At any point in time (ignoring all external influences) how likely is this event to occur?
  • probability_threshold (Optional): The probability at which the sensor should trigger to on.
  • name (Optional): Name of the sensor to use in the frontend. Defaults to Bayesian Binary sensor.
  • observations array (Required): The observations which should influence the likelihood that the given event has occurred.
    • entity_id (Required): Name of the entity to monitor.
    • prob_given_true (Required): The probability of the observation occurring, given the event is true.
    • prob_given_false (Optional): The probability of the observation occurring, given the event is false can be set as well. If prob_given_false is not set, it will default to 1 - prob_given_true.
    • platform (Required): 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.
    • to_state (Required): The target state.

Full examples

# 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'
# 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