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 & Visonic

Jadis, quand j'ai commencé à m'intéresser à la domotique, avec une Zibase, j'avais intégré les capteurs de mon système d'alarme Visonic Powermaster Pro. Ensuite sous Jeedom je les ai perdus, j'ai bien tenté avec un RFPLayer, qui dans l'absolu intégrait la techno ZiBase, de les retrouver, mais sans succès tant le plugin dédié et payant étant en dessous de tout. Un échec de plus pour Jeedom, peu importe que ce soit de leur faite ou celle de ZiBlue qui ne fournissait que peu d'informations, le résultat était négatif.

Sous Home Assistant j'ai bien essayé de me servir de la ZiBase pour récupérer ces informations, mais je n'ai pas trop insisté et j'ai fini par tout doubler avec des capteurs Xiaomi/Aqara.

Jusqu'à ce que je découvre la semaine dernière qu'il existait une intégration Visonic ! Mais pour ça il faut que ça communique. La centrale a des options que je n'ai pas et j'étais moyennement chaud pour commander une option RS232 à 80 € sur un site exotique. En lisant un peu j'ai fini par découvrir que cette option ne faisait qu'exposer physiquement le signal qui existe en TTL sur des broches accessibles. Alors j'ai fait des tests avec un câble RS232, USB/RS232 et j'ai même acheté un adaptateur Ethernet / RS232 (USR-TCP232-302) mais ça succès alors que certains disent y être parvenus, et même une pince pour sertir des connecteurs Dupont (l'enfer !), bref je me suis cassé le crane tout un week-end sans succès.

Reste une solution que je n'ai jamais explorée, utiliser un ESP_01 avec le firmware ESP-Link qui convertir les signaux TTL série afin de pouvoir les utiliser en Ethernet depuis l'intégration sous Home Assistant.

Communication

Alors d'abord il faut se procurer le module ESP NodeMCU. Ca doit pouvoir fonctionner avec d'autres ESP et d'autres firmwares mais je me suis contenté de suivre ce que j'ai trouvé. Ca vaut 1 €, c'est minuscule et ca peut tenir dans la centrale qui ainsi devient "WI-FI" !

Pour flasher le firmware ESP-Link il faut un adaptateur USB que je n'avais pas commandé pensant pouvoir le faire avec mon adaptateur USB éclaté. Certains ESP ont un bouton pour les passer en mode flashage, sur celui ci rien de tel, pas plus que sur l'adaptateur... C'est un peu le mystère laissé par les barbus, ne pas tout documenter sans quoi ce serait trop facile, ce genre de montage ça se mérite ! Bref, il faut shunter IO0 et GND avant d'insérer l'objet dans le port USB, ça permet de passer en mode programmation (je l'ai fait juste avec un câble Dupont...).

Maintenant il va falloir trouver un outil de flashage. Mais les barbus bossent sous Linux, et même s'il est possible de faire du Bash ou du Python sous Windows, ma machine ne s'est pas avérée très coopérative...

curl -L https://github.com/jeelabs/esp-link/releases/download/v2.2.3/esp-link-v2.2.3.tgz | \
    tar xzf -
cd esp-link-v2.2.3
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash -fs 4m -ff 40m \
    0x00000 boot_v1.5.bin \
    0x1000 user1.bin \
    0x7C000 esp_init_data_default.bin \
    0x7E000 blank.bin

Si la plupart des outils de flashage sous Windows fonctionnent, et même Tasmotizer, (Mathieu si tu me lis...), on va avoir besoin ici de flasher plusieurs fichiers .bin à des adresses particulières et le seul utilitaire qui a fonctionné est NodeMCU Firmware Programmer, qui selon les ESP utilisés permet de les fichiers flasher au bon endroit...

Une fois cette opération réussie (YES ! Ca m'a pris l'après midi...), on peu détacher l'ESP_01 de son support USB et aller le brancher dans la centrale. Il sera alimenté en 3.5 v par elle et servira d'interface TCP/Serie. Visonic a prévu des connecteurs dans la centrale afin d'y connecter des cartes optionnelles et couteuses, sauf que les signaux sont disponibles sur les connecteurs et que les cartes ne servent qu'à supporter des connecteurs... Des petits malins on fait un joli travail de recherche (voir les sources). Le connecteur qui nous intéresse est celui de gauche et en branchant un petit câble Dupont à 4 fils sur les 4 du haut à droite on sortira aisément GND TX RX et les 3.75 v nécessaires à l'alimentation de notre ESP.

Il ne reste plus qu'à connecter ça à notre ESP aux bons endroits, en inversant RX/TX et en faisant attention au connecteur d'alimentation car il n'y a pas de fusible...

Ensuite on se connecte en WI-FI sur son SSID (ESPxxx) et on renseigne le réseau WI-FI que l'on consacre aux IoT dans l'onglet WI-FI Station, il redémarre et on peu le pinguer... On pense à le mettre en réservation DHCP... Le seul réglage qui nous intéresse est la vitesse (9600 ou 38400 selon les modèles de centrales), et même si ce firmware permet de faire du MQTT et autres joyeusetées on désactive tout, il ne servira qu'à ça !

Intégration à Home Assistant

Cette intégration j'ai du la lancer 50 fois, mais quand on a la bonne communication ça fonctionne du premier coup. Elle permet beaucoup de choses, mais le mode standard qui me permet de voir et utiliser mes capteurs est suffisant. Je m'en contenterais car dans mes bricolages j'ai perdu le code installateur de la centrale ce qui va me limiter à l'avenir ! (code impossible à reseter). EDIT : Je viens d'apprendre qu'on peut justement le récupérer, grâce à une fonction non documentée de cette intégration...

On installe donc l'intégration Visonic, encore un excellent travail d'un passionné, et on renseigne l'IP et le port (23) de notre ESP. Et c'est tout, comme par magie les capteurs remontent ainsi que le panneau de commande. Il sera ainsi possible d'armer et désarmer la centrale depuis Home Assistant (Géoloc, présence pour l'armement et tag NFC pour le désarmement dans mon cas) et de savoir quel capteur à déclenché l'alarme dans une notification (Slack, TG ou SMS), mais aussi de conserver un log (CSV et/ou XML).

Ce qui m'embête c'est que je me retrouve avec d'un coté mes capteurs Xiaomi / Aqara qui me servaient à l'alarme HA, à couper le chauffage quand on ouvre les fenêtre ou allumer une lampe en cas de passage, et mes capteurs Visonic qui peuvent faire la même chose... Bref, j'aurais su avant je ne me serait pas lâché sur Ali Express...

Bonus

Allez c'est cadeau. Pour utiliser le logiciel de configuration PowerMax depuis Windows :

Téléchargez le logiciel ici (mot de passe du fichier Zip : PowerMaxPRO) et la doc (spartiate) se trouve ici. Et pour rediriger le port série depuis Windows je vous conseille ceci. Il vous faudra le code de téléchargement (par défait AAAA)  que vous trouverez dans la centrale.

Et pour retrouver le code installateur depuis l'intégration HA, vous décommentez les lignes 2322 à 2326 dans le fichier pyvisonic.py (supprimez le «#»), définissez le paramètre de l'enregistreur sur débogage, puis regardez votre fichier journal pour le code d'installation [Paramètres de processus], vous verrez votre code d'installation.... Pas si sécure que ça....

Sources

J'ai écrit ça rapidement, mais voici mes sources qui contiennent pas mal d'informations pour qui voudra se lancer dans l'expérience