Détection de présence avec HomeKit et Home Assistant

Domotique 5 min de lecture

Sans accès distant à ma box domotique, j'utilise HomeKit et l'app Maison pour détecter la présence de chacun et la remonter dans Home Assistant.

iPhone à l'extérieur
Image de Pexels

Comme indiqué dans l'article décrivant ma box domotique, nous n'avons pas accès à la box domotique à distance et, par conséquent, nous n'utilisons pas la localisation de l'application mobile Home Assistant. Une solution simple et fiable consiste à passer par HomeKit, à l'aide de l'application Maison, depuis nos iPhone.

⚠️ Cet article a été publié initialement en 2022 et le mécanisme décrit ci-dessous est désormais déprécié. L'action device_tracker.see, qui fait le lien entre HomeKit et Home Assistant, sera supprimée avec la version 2027.5 ; elle génère déjà un avertissement dans les journaux. Le remplaçant officiel est le device tracker de type template, disponible depuis la version 2026.6. Le principe général reste valable, mais il vous faudra adapter les exemples à votre version.

Prérequis

Pour gérer la présence d'autres personnes, il suffit de les inviter et de partager le contrôle de votre domicile.

Configuration sur Home Assistant

Dans un premier temps, il va falloir créer un input_boolean pour chacune des personnes dont vous souhaitez suivre la présence (en remplaçant xxx par le prénom de la personne, par exemple) :

input_boolean:
  presence_at_home_xxx:
    name: xxx à la maison
    icon: mdi:account

Si vous n'utilisez aucun device_tracker, vous pouvez l'activer en ajoutant cette ligne à votre fichier de configuration :

device_tracker: []

Nous allons maintenant ajouter l'automatisation qui fera la liaison entre l'input_boolean (HomeKit) et le device_tracker (Home Assistant).

Pour gérer la présence d'une seule personne :

automation:
  - description: Homekit to Device Tracker
    alias: homekit_to_device_tracker
    id: be7d19d0-0671-464c-9a45-01d7af3f854c
    mode: queued
    max: 10
    trigger:
      - platform: state
        entity_id: input_boolean.presence_at_home_xxx
      - platform: homeassistant
        event: start
    action:
      - service: device_tracker.see
        data:
          dev_id: homekit_presence_at_home_xxx
          location_name: "{{ 'home' if is_state('input_boolean.presence_at_home_xxx', 'on') else 'not_home' }}"

Pour gérer la présence d'au moins 2 personnes (à adapter pour davantage de personnes) :

automation:
  - description: Homekit to Device Tracker
    alias: homekit_to_device_tracker
    id: be7d19d0-0671-464c-9a45-01d7af3f854c
    mode: queued
    max: 10
    trigger:
      - platform: state
        entity_id: input_boolean.presence_at_home_xxx1
        id: presence_at_home_xxx1
      - platform: state
        entity_id: input_boolean.presence_at_home_xxx2
        id: presence_at_home_xxx2
      - platform: homeassistant
        event: start
        id: homeassistant_start
    action:
      - if:
          or:
            - condition: trigger
              id: presence_at_home_xxx1
            - condition: trigger
              id: homeassistant_start
        then:
          - service: device_tracker.see
            data:
              dev_id: homekit_presence_at_home_xxx1
              location_name: "{{ 'home' if is_state('input_boolean.presence_at_home_xxx1', 'on') else 'not_home' }}"
      - if:
          or:
            - condition: trigger
              id: presence_at_home_xxx2
            - condition: trigger
              id: homeassistant_start
        then:
          - service: device_tracker.see
            data:
              dev_id: homekit_presence_at_home_xxx2
              location_name: "{{ 'home' if is_state('input_boolean.presence_at_home_xxx2', 'on') else 'not_home' }}"

Ces deux automatisations sont des alternatives : n'en conservez qu'une seule, elles partagent le même identifiant.

Si vous filtrez les entités que vous envoyez sur HomeKit, n'oubliez pas d'ajouter les input_boolean de gestion de présence :

homekit:
  name: Home Assistant
  filter:
    include_entity_globs:
      - input_boolean.presence_at_home_*

Vous pouvez à présent redémarrer Home Assistant et vérifier que le ou les interrupteurs correspondants ont bien été créés !

Configuration sur Maison

Répétez les opérations pour chacune des personnes dont vous gérez la présence. Dans les étapes qui suivent, « touchez » sur iPhone et iPad correspond à « cliquez » sur Mac.

Gestion de l'arrivée d'une personne

  1. Dans l'application Maison, accédez à l'onglet Automatisation. Touchez le bouton + en haut à droite, puis sélectionnez Ajouter une automatisation
  2. Touchez Des personnes arrivent
  3. Dans Quand, touchez Quelqu'un arrive et ne choisissez qu'une seule personne. Laissez le Lieu sur Domicile et l'Heure sur Tout, puis touchez Suivant en haut à droite
  4. Sélectionnez l'interrupteur xxx à la maison, puis touchez Suivant
  5. Réglez l'interrupteur sur Allumer
  6. Touchez OK

Gestion du départ d'une personne

  1. Dans l'application Maison, accédez à l'onglet Automatisation. Touchez le bouton + en haut à droite, puis sélectionnez Ajouter une automatisation
  2. Touchez Des personnes partent
  3. Dans Quand, touchez Quelqu'un part et ne choisissez qu'une seule personne. Laissez le Lieu sur Domicile et l'Heure sur Tout, puis touchez Suivant en haut à droite
  4. Sélectionnez l'interrupteur xxx à la maison, puis touchez Suivant
  5. Réglez l'interrupteur sur Éteindre
  6. Touchez OK

Chaque automatisation dispose d'un bouton Tester l'automatisation : appuyez dessus pour observer le changement d'état de l'interrupteur et du device_tracker dans Home Assistant. Une fois le fonctionnement validé, vous pouvez rattacher le device_tracker à la personne concernée (SettingsPeople).

Ajout du device_tracker à un utilisateur sous Home Assistant
Ajout du device_tracker à un utilisateur sous Home Assistant

Conclusion

J'utilisais déjà cette méthode sur Jeedom et nous n'avons jamais eu le moindre problème de géolocalisation. Cette solution me sert pour beaucoup d'automatisations, comme l'activation de l'alarme ou l'extinction des lumières quand la maison est vide.