Home Assistant & Présence

En 2020 je vous parlais déjà de la gestion de la présence à l'aide d'objets BLE. Je vais essayer d'être plus exhaustif. Le BLE reste toujours d'actualité, mais il convient de définir la présence dont on a besoin et les sources à y associer. Pour faire bref il s'agit de savoir si on souhaite savoir si une personne est présente ou absente de la maison (ou dans une autre zone géographique définie), ou encore si une personne est présente dans une pièce particulière de la maison. Et là c'est un peu plus compliqué. On va voir avec quelles sources on va gérer tous ça.

A quoi ça sert ?

Savoir si on est à la maison permettre se d'intégrer à des automation, pour par exemple gérer le chauffage. On peut également associer la géolocalisation avec l'intégration proximity: afin de déclencher des actions en s'approchant de la maison, par exemple pour allumer des lampes ou ouvrir un portail. Surveiller les entrées sorties des enfants ?

Quant à la présence dans une pièce particulière, cela sera utile pour maintenir une action. Si le chauffage supporte la latence d'un indicateur de présence, Imaginons par exemple un détecteur de présence qui va allumer une lampe combiné à une indicateur de présence qui va la maintenir allumée tant que l'on se trouve dans la pièce. Ici l'indicateur de présence n'est pas suffisant car sa latence ne permettrait pas l'allumage suffisamment rapide. A noter qu'il existe des capteurs plus sophistiqués, donc plus couteux, qui permettent une détection de présence.

Simple ?

Oui et non. Savoir si une personne est présente à la maison est simple. Pour savoir dans quelle pièce elle se trouve ça devient plus compliqué et fastidieux à étalonner afin d'éviter les fausses informations. De plus ça impose de "porter" un tracker ou un mobile lorsque l'on se déplace dans la maison. Autant ça m'a amusé de tester toutes ces intégrations, autant je ne suis pas sur de les mettre en production.

Présence ou absence

  • Application mobile Home Assistant : C'est un peu la base. L'application va nous remonter la zone (home, not_home ainsi que les zones que l'on aura définies et l'adresse). L'application communique directement avec HA.
  • Google Maps : On obtient le même retour avec parfois une meilleure position. La configuration est devenue extrêmement simple avec cette intégration qui ne nécessite ni cookie, ni yaml ! Avec l'accord de son propriétaire on peut facilement suivre un mobile. Et pour rappel on partage la localisation avec un compte Google dédié qui sera utilisé dans HA.
  • Life 360 : Obsolète, l'API n'est plus disponible.
  • Tile : Il y a plusieurs façons d'utiliser un tracker et on en parlera plus loin, mais il est également possible de créer un compte Tile sans tracker, de l'installer sur un mobile afin de remonter la position (home, not_homeainsi que les coordonnées GPS). C'est peut tordu, mais ça peut éviter de faire un partage Google.
  • Owntrack : Il faut une application dédiée et le résultat est inégal, toutefois meilleur sur IOS.

Pour une meilleure précision on combine bien sur plusieurs sources sur l'entité person. Ces solutions présentent toutefois l'inconvénient d'être dépendantes du cloud ou de l'exposition à Internet de Home Assistant.

On peut également utiliser le WI-FI, pas mal d'intégrations de routeurs (Unifi par exemple) permettent de remonter à HA si un device est connecté. (home, not_home). Attention toutefois à la latence.

Et bien sur le Bluetooth, et plus particulièrement BLE (Bluetooth low energy). On va parler ici de présence locale (home, not_home), mais également de présence dans une pièce précise.

De base et intégré à Home Assistant

La communication se fait avec une clé Bluetooth ou des proxys qui peuvent être des ESP ou des Shelly gen2 et +. On commence à placer ceci dans configuration.yaml (l'option track_new_devices: true va servir à ce que son nom indique, mais je vous conseille de le laisser à false et d'utiliser une application mobile (WIFIMan IOS ou Android par exemple, mail il y en a d'autres) pour rechercher l'adresse MAC de vos devices :

device_tracker:
  - platform: bluetooth_le_tracker  
    interval_seconds: 12
    consider_home: 180
    track_new_devices: false  

Et ensuite le device à suivre dans le fichier known_devices.yaml :

ha_ble_amazfit:
  name: Amazfit
  mac: BLE_A9:13:AB:43:22:64
  icon:
  picture:
  track: true
Après un redémarrage de Home Assistant on obtient cette entité : device_tracker.ha_ble_amazfit

Via un ESP sous ESPHome

Pour la faire courte il suffit d'ajouter ceci à la configuration ESPHome. La porté dépend de l'antenne et on aura bien sur de meilleurs résultats avec un ESP32 pourvu d'une antenne extérieure, genre Olimex...

esp32_ble_tracker:
  scan_parameters:
    # interval: 5s
    # window: 5s
    active: true # ou false

binary_sensor:
  - platform: ble_presence
    mac_address: A8:DF:32:B0:00:30
    name: "ESP Tile"

Via TheengsGateway

TheengsGateway, qui reprends l'ancien projet BLE to MQTT, s'installe sur différents types de devices, mais peut également l'installer sous forme d'addon sur Home Assistant. Il utilisera alors une clé Bluetooth et communiquera via le brooker MQTT. Si l'on peut remonter le home, not_home des devices (trackers ou autres), je verrais plus son usage en remplacement de BLE Passive Monitor pour qui veut des devices MQTT. Pour avoir un sensor dédié à la distance il faudra le créer et redémarrer :

sensor:
- platform: mqtt_room
  device_id: "E9:13:CD:43:20:66"
  unique_id: fc9dc91f-522d-43d1-bfaf-e3cdbec1026-9
  name: "Theengs : Amazfit"
  state_topic: "home/presence"

Via ESPresence

Dans l'idée ESPresence est plutôt fait pour monitorer la présence dans une pièce particulière. Il faut installer le firmware dédié sur un ESP. La communication avec Home Assistant se fait en MQTT. On disposera alors d'un sensor avec le home, not_home et la distance en attribut. Bien sur ça demande un peu d'étalonnage, mais en plaçant un ESP par pièce on peut parvenir à un résultat intéressant. L'autre avantage est que ce projet permet de découvrir l'IRK d'un mobile (Android et IOS) et de le tracker malgré son adresse MAC qui est nativement aléatoire.

sensor:
- platform: mqtt_room
  device_id: "irk:dff2a090agdfgdfgd66a4d97f4dc1ac4c9e"
  unique_id: fc9dc91f-522d-43d1-bfaf-e3cdbec1026-2
  name: 'ESPresence : IRK'
  state_topic: 'espresense/devices/irk:dff2a090agdfgdfgd66a4d97f4dc1ac4c9e'
  timeout: 10
  away_timeout: 120

Je vous conseille cette vidéo :

Via Bermuda BLE Trilateration

Cette intégration est à mon gout la plus moderne et fonctionnelle pour monitorer des pièces. Elle zappe l'étape MQTT et elle s'appuie sur une clé Bluetooth, mais on préfèrera des les proxy BLE dans chaque zone, qu'ils soient sous espHome ou Shelly gen2+ (avec lesquels j'ai obtenu les meilleurs résultats). S'agissant d'une intégration moderne tout se fait sans une ligne de yaml ce qui ravira les réfractaires. L'intégration gère nativement les mobiles via l'IRK et on choisit les devices un à un. Le plus compliqué restera l'étalonnage...

Amusez vous bien !