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 !

 

Home Assistant & Wake on Lan

L'heure est aux économies d'énergies et il parait qu'il faut éteindre "la" Wi-Fi ! Ce n'est peut être pas ce qui consomme le plus et notre domotique fait certainement mieux.... Par contre nombre d'entre nous ont des PC énergivores qui mériteraient de passer en veille. Sauf que dans la pratique on laisse souvent ce PC allumé en se disant que l'on pourra en avoir besoin depuis l'extérieur... Ce que j'ai longtemps fait !

Un PC moderne avec un SSD sait sortir de veille en quelques secondes. Alors pourquoi ne pas ressortit une vieille fonctionnalité très peu utilisée, le Wake on Lan.

Sous Linux, Windows, voire même les mobiles il existe des application GUI ou CLI. Il faut tout de même savoir que Wake on Lan n'a pas été conçu à l'époque pour fonctionner à distance, et même s'il existe des possibilités ça reste compliqué. Alors pourquoi ne pas simplement utiliser Home Assistant qui lui sera toujours disponible, voire même simplement ajouter ça à un ESP existant, sous ESP Home par exemple..

La première chose pour vos tests sera de vérifier en local que le Wake on Lan fonctionne (il y a pas mal d'utilitaires et d'explications sur ce site).

Avec Home Assistant

On commence par ajouter l'intégration au fichier de configuration et on redémarre :

wake_on_lan:

Ensuite on peur créer un switch: , mais aujourd'hui on préfèrera un button: dans Lovelace qui actionnera le service correspondant :

  - action_name: 'Sleep/UnSleep'
    double_tap_action:
      action: call-service
      service: button.press
      target:
        entity_id: button.lia_monitors_off
      action: call-service
      confirmation:
        text: Etes vous sur ?
    tap_action:
      action: call-service
      service: wake_on_lan.send_magic_packet
      data:
        mac: 00-0C-29-FB-77-97
    icon: mdi:microsoft-windows
    name: 'Windows 10 PC'
    type: button

Vous remarquerez que j'ai configuré ça sur le tap_action:, le double_tap_action: étant lui configuré pour la commande de mise en veille via Home Assistant Agent.

Avec ESP Home

J'ai un client full cloud qui dispose d'une douzaine de PC, mais pas de serveur et encore moins de Home Assistant. La première solution était de laisser un PC allumé et y installer de quoi faire du Wake on Lan en remote. Il y a également des possibilités via TeamViewer et hélas pas de base dans l'UDM Pro d'Ubiquiti. On verra ce l'on utilisera mais j'ai également pensé faire ça via un simple ESP qui lui pourrait resté allumé...

Dans ESP Home on va éditer la config et simplement ajouter (attention, ici les séparateurs ne sont pas des "-" mais ":") :

web_server:    

button:
- platform: wake_on_lan
  name: "VM Annia"
  target_mac_address: 00:0C:29:FB:77:97

A partir de là il est possible de presser notre button: qui remonte dans Home Assistant, sur la page web de l'Esp, mais également via la commande curl (la doc est ici) :

curl -X POST http://192.168.210.153/button/vm_annia/press

Et comme on ne va pas demander à l'utilisateur final de faire un "curl" on va lui emballer tout ça dans une page web accessible que l'on sécurisera afin que lui seul puisse y accéder, en partant de cette base :

<HTML>
<center>

	<form name="myform" action="http://192.168.210.153/button/vm_annia/press" method="post">
  	<button>PC Annia ON</button>
	</form>

</center>
</HTML>

Variante avec un WebHook

L'ESP remonte sur Home Assistant via ESPHome. De fait on peu presser un bouton pour réveiller le PC distant, voire même intégrer ce bouton sur un autre Home Assistant en remote. Mais il est également possible de créer un WebHook et de déclencher avec un raccourcis depuis le PC de l'utilisateur distant :

- alias: Réveil PC Carole (WebHook)
  description: ""
  trigger:
    - platform: webhook
      webhook_id: "secret-id"
  condition: []
  action:
    - service: button.press
      data: {}
      target:
        entity_id: button.reveil_pc_carole
  mode: single

Et le raccourcis à créer sur le PC de l'utilisateur qui doit réveiller son PC de bureau...

curl -X POST https://ha-online.suptel.org/api/webhook/<secret-id>

Infos

  • Attention, Microsoft a introduit un concept de veille moderne qui souvent demandera à être désactivé. Des infos ici et .
  • Il n'est pas possible de réveiller un PC connecté en Wi-Fi ou en Ethernet via USB.
  • A noter que la Freebox dispose d'une option permettant de laisser passer du Wake on Lan. Ce n'est pas le cas pour tous les routeurs et il faut parfois ruser avec le port 9.

Sources