Como implementar um sensor de presença/tracking baseado Bayesian Binary Sensor


(Nelson Angelo) #1

tópico ainda a ser actualizado/editado na ortografia e etc amanha pelo adiantado da hora…###

Esta é a minha implementação uso um sensor bayesian que é um sensor baseado na regra de Bayes (google it)

Basicamente determina a probabilidade de um evento ser verdade baseado na observação prévia de eventos conhecidos que estão relacionados com o evento a ser estimado.

Ora isto permite a detecção de eventos complexos que podem ser ou não directamente observáveis, por exemplo, cozinhar, tomar banho, dormir, iniciar uma rotina. Também pode ser usado para ter maior certeza em sensores que medem eventos que são directamente observáveis, mas para os quais os sensores podem não ser confiáveis, por exemplo, presença.

(tão a ver aqui a luz!?? owntracks, ping´s BLE BT etc etc)

Ou seja criamos um sensor que calcula a probabilidade de estar em casa baseado em tres trackers

Uso três trackers em:

/config/configuration.yaml

device_tracker:
  - platform: bluetooth_tracker
  

  - platform: owntracks_http

  - platform: ping
    hosts:
      xiaomiwifi: 192.168.1.102
      redmialexawifi: 192.168.1.109

no mesmo config.yaml definem-se as zonas.


(Nelson Angelo) #2

Em: /config/binary_sensors.yaml

- platform: bayesian
  prior: 0.50
  name: 'Presença Nelson'
  probability_threshold: 0.60
  observations:
    - entity_id: 'device_tracker.xiaomiwifi'
      prob_given_true: 00.99
      prob_given_false: 0.20
      platform: 'state'
      to_state: 'home'
    - entity_id: 'device_tracker.nelson_xiaomiow'
      prob_given_true: 0.99
      prob_given_false: 0.40
      platform: 'state'
      to_state: 'home'
    - entity_id: 'device_tracker.redmi'
      prob_given_true: 00.99
      prob_given_false: 0.10
      platform: 'state'
      to_state: 'home'

O truque aqui, muito honestamente , não vos posso ajudar mais porque a minha area de formação é de longe a matematica e ou programação, cheguei a estes valores depois de muita observação da mudança de estados dos tres trackers e de aumentar as probabiiidaes nos mais confiaveis e baixar nos menos confiaveis…

Também é importante ver com atençao a literatura que coloco no fim pois tanto avaliamos a probabilidade do estado de um sensor estar certo como de errado, o bayesian depois calcula as probabilidades…

pex o sensor ping e bt são confiaveis… são, mas nem sempre detecta a primeira, ou então só detectam ja depois de estar em casa a algum tempo…

o owtracks é fiavel… é , mas as vezes engana-se ou então demora muito a actualizar a localização…

Como os sensores binarios são isso mesmo binários isto vai criar um sensor “on/off” mas o que se pretende é um sensor de presença em casa e que tambem faz de tracker nas minhas diferentes zonas (baseado no owntracks_http para android) para isso criamos um template de forma a ter um bonito badge com o nosso nome e a zona onde nos encontramos.

O sensor de status “acusa” em casa baseado na probabilidade do bayesian e estando “fora” está fora de casa, se entrar numa zona a partida só posso estar na mesma (um gajo nao vai passear ai local de trabalho certo!)

Em: /config/sensors.yaml

- platform: template
  sensors: 
    status_nelson: 
      friendly_name: ' '
      unit_of_measurement: 'Nelson'
      value_template: >-
        {% if is_state('binary_sensor.presenca_nelson', 'on') %}
          Casa
        {% endif %}
        {% if is_state('device_tracker.nelson_xiaomiow', 'Hospital') %}
          Hospital
        {% endif %}
        {% if is_state('device_tracker.nelson_xiaomiow', 'UCCI') %}
          UCCI
        {% endif %}
        {% if is_state('binary_sensor.presenca_nelson', 'off') %}
          Fora
        {% endif %}

literatura:
https://www.home-assistant.io/components/binary_sensor.bayesian/
https://philhawthorne.com/making-home-assistants-presence-detection-not-so-binary/
https://community.home-assistant.io/t/bayesian-sensor-as-device-tracker/29857