[TUTO] Gestion de présence avec iOS et Homebridge

Gestion de présence avec iOS & Jeedom

Présentation :

Voici un tuto permettant de gérer la présence dans une maison en fonction de la présence des habitants, grâce à la géolocalisation des téléphones. Cela sera une adaptation du tuto de Nebz présent sur son site (Gestion de présences avec Homebridge sur Jeedom - La domotique de Nechry)

Ce tuto est fait pour l’environnement Apple avec les iBidules en natif. S’il existe la même chose pour Android, je laisse présenter dans les réponses les solutions possibles sous Android.

Je l’ai adapté pour gérer l’ouverture et la fermeture de mon portail : l’ouverture du portail lors de l’arrivée d’un habitant de la maison, et la fermeture du portail quand un des habitants s’en va de la maison.

Principe de fonctionnement :

On part sur le principe que la présence ou l’absence de chaque habitant est représenté par un interrupteur sous HomeKit et sous forme d’un virtuel dans Jeedom.

Par habitant : état « présent » (valeur = 1) et état « absent » (valeur = 0)

La maison aura aussi son interrupteur qui change d’état, dès qu’un des habitants sera dans la maison (état « occupé » (valeur = 1)) et quand il n’y a plus personne (état « vide » (valeur = 0)). Ce dernier interrupteur, pourra permettre de gérer une alarme par exemple.

On ajoutera les heures de départ et d’arrivée de chaque habitant et de la maison sur le dashboard, qui du coup se mettront à jour automatiquement…

Prérequis :

  • Un iPhone par habitant de la maison
  • Un Concentrateur (AppleTV, iPad, HomePod…) (la configuration de celui-ci ne sera pas abordée ici)
  • Homekit fonctionnel
  • Plugin « Virtuel »
  • Plugin « HomeBridge » (je vous laisse lire le github de Nebz qui explique très bien son plugin)

Supplément non obligatoire (voir à la fin) :

Plugin Telegram avec bot fonctionnel (non abordé dans ce tuto)

Création de chacun interrupteur via le plugin « Virtuel » :

Créer un nouvel équipement « virtuel » appelé « Presence A » et ajouter :

  • 1 info virtuelle « Status »
  • 1 commande virtuelle « Absent » (avec action qui mets l’info « Status » à 0)
  • 1 commande virtuelle « Présent » (avec action qui mets l’info « Status » à 1)
  • 1 info virtuelle « Absent à : » ayant pour valeur « variable(Heure_depart_A) »
  • 1 info virtuelle « Présent à : » ayant pour valeur « variable(Heure_arrivee_A) »

Faites exactement la même chose pour les x habitants (ici nous ajouterons un 2eme habitant « B »)

  • 1 info virtuelle « Status »
  • 1 commande virtuelle « Absent » (avec action qui mets l’info « Status » à 0)
  • 1 commande virtuelle « Présent » (avec action qui mets l’info « Status » à 1)
  • 1 info virtuelle « Absent à : » ayant pour valeur « variable(Heure_depart_B) »
  • 1 info virtuelle « Présent à : » ayant pour valeur « variable(Heure_arrivee_B) »

Pour le virtuel de la maison, ajouter juste :

  • 1 info virtuelle « Status » et mettre en valeur la variable « Presence_maison »
  • 1 info virtuelle « Occupée à : » ayant pour valeur « variable(Heure_maison_occupee) »
  • 1 info virtuelle « Vide à : » ayant pour valeur « variable(Heure_maison_vide) »

Les virtuels doivent être actifs et visibles sous jeedom bien évidemment sur le dashboard :

Capture d’écran 2022-01-29 à 16.39.09

Déclaration dans le script « Homebridge » :

Une fois les interrupteurs virtuels créés, il faut les déclarer sur le plugin « homebridge » sous forme de prise électrique (Info / Prise Etat).

Pour chaque interrupteur créé de chaque personne (A, B) paramètrer comme tel :

Capture d’écran 2022-02-13 à 12.35.14

pour l’interrupteur « maison » paramétrer l’équipement comme tel :

Capture d’écran 2022-01-29 à 16.46.01

Sous HomeKit vous devez obtenir 3 prises électriques :

Maintenant il faut dire à HomeKit en fonction des mouvements de chaque habitant, de passer la prise (donc le virtuel dédié) à 0 ou 1.

Définition du départ de « l’habitant x » :

Sous HomeKit, cliquer sur « Automatisation », puis sur le « + » en haut à droite.

Cliquer sur « Des personnes arrivent » pour définir l’état quand l’habitant A arrive à la maison.

Cliquer sur le « i » à droite de « quelqu’un arrive » pour définir dans la liste qui apparaît, l’habitant A (il faudra bien sur avoir partagé le domicile sous HomeKit pour que l’habitant B apparaisse dans la liste)

Cliquer sur « Suivant »

Sélectionner la prise correspondant à l’habitant A dans la liste d’accessoires (une petite coche orange en haut à droite de l’accessoire doit apparaître dans le petit rond)

IMG_391CFFFFE0D2-1

IMG_05AE5C8B22E1-1

puis appuyer sur « Suivant »

Allumer la prise (Allumer doit être indiqué sous le nom de l’accessoire)

Puis Valider par « OK » en haut à droite

Définition de l’arrivée « habitant x »

Faites la même chose pour quand « des personnes partent », pour définir ce qu’il se passe quand l’habitant A part de la maison (la prise doit être éteinte).

Faites la même chose pour l’habitant B (arrivée et départ)

Résumé automatisation :

Vous devez obtenir à peu près cette vue dans les automatisations (j’ai modifié ma localisation je n’ai pas mis ma maison mais celle de mon voisin pour décaler la zone de déclenchement)

Rien à faire sur la prise de la maison, son état (allumée (occupée) ou éteinte (vide)) sera gérée directement dans Jeedom.

Maintenant si l’habitant A s’éloigne du domicile (ou de l’adresse que vous avez défini dans l’automatisation) sa prise va s’éteindre automatiquement sur HomeKit et sur Jeedom… et s’allumer quand l’habitant A va revenir…

Idem pour l’habitant B…

Élaboration du scenario :

C’est bien d’avoir l’état de présence de l’habitant A et/ou B, mais cela n’apporte pas grand-chose pour l’instant… surtout que l’état de la maison n’est pas géré pour le moment…

C’est là où le scenario de présence devient intéressant…
Dans mon exemple, en plus de la gestion de présence de A, B et de la maison, j’ai ajouté :

  • Dès que A ou B s’en va, le portail se ferme des que A ou B est considéré « parti » (on vérifie que le portail est bien fermé au bout de 10 sec, sinon message sur telegram via à l’habitant qui part)

  • Dès que A ou B revient à la maison, le portail s’ouvre dès que l’habitant entre dans la zone de détection de la géolocalisation (considéré comme « présent »)

  • On récupère les horaires de départ et d’arrivée de chaque habitant ainsi que celles de la maison, stockées dans des variables :
    o Heure_arrivee_A
    o Heure_depart_A
    o Heure_arrivee_B
    o Heure_depart_B
    o Heure_maison_occupee
    o Heure_maison_vide

  • Afin d’affiner la detection on ajoute des variables « Presence_A » et « Presence_B » en plus de la variable « Presence_maison » définie plus haut…

Définition des déclencheurs du scenario :

Les déclencheurs du scenario doivent être les infos virtuelles « Status » de A & B créées plus haut.

Capture d’écran 2022-01-29 à 20.53.29

Contenu du scenario :

Concernant le scenario lui-même, nous procédons à plusieurs tests, via des boucles SI avec en paramètres « trigger du déclencheur » (trigger(#[Maison][Présence A (ou B)][Status]#)) qui permet d’exécuter que la boucle correspondant à l’événement déclencheur (#[Maison][Présence A][Status]# ou #[Maison][Présence B][Status]#)

1ère boucle (Test des arrivées):

Si c’est le déclencheur de A qui a déclenché (via trigger) et que A est bien arrivé à la maison ( Status = 1 = présent (via la geoloc)),
On note l’heure d’arrivée puis on mets la variable presence de A à 1

Note : c’est à ce niveau où que je commande l’ouverture de mon portail, qui se fait des que A franchi la zone de geoloc) (désactivé sur la copie d’écran pour ne pas alourdir le scenario visuellement)

Si ce n’est pas A, on refait un test pour B, pour savoir si c’est bien B qui est arrivé… idem on note l’heure d’arrive de B et passe la variable presence de B à 1

2ème boucle (Test des départs) :

On fait les mêmes tests, mais sur le départ de A, on teste si c’est bien le déclencheur de A qui a déclenché le scenario, puis on vérifie que le statut de A soit bien à 0 (parti), si oui, on note son heure de départ, puis on met la variable de présence de A, à 0.

Note : c’est ici que je fais refermer mon portail avec une vérification 20 sec plus tard avec un message sur telegram… (cf plus bas pour ceux que cela intéresse) (désactivé sur la copie d’écran pour ne pas alourdir le scenario visuellement)

Si ce n’est pas le cas, on test si B est bien parti dans le même principe (idem on note l’heure de départ de B et la variable de présence de B passe à 0)

3ème boucle (Gestion du statut de la maison) :

Peut-être la plus compliquée à comprendre … et encore… tout reste simple…

1er test dans le but de modifier l’heure d’occupation de la maison dès que le 1er habitant est arrivé (A ou B)…
Exemple : si A est déjà arrivé à 12H00, si B arrive 36min plus tard, l’heure d’occupation de la maison doit être 12H00 et non pas 12H36… on n’autorise que la 1ere mise à jour de l’heure d’occupation….

Ensuite 2eme test, si A et B sont sortis de la maison (leurs variables de présence sont à 0) on passe la variable de la maison à 0, on note l’heure où la maison est vide.

Et si on n’entre pas dans aucune de ces conditions, on passe la variable présence de la maison à 1 (sans modifier l’heure)

Bonus « ouverture du portail avec vérification de l’ouverture et envoi d’un message sur Telegram le cas échéant » :

Si mon portail est ouvert (variable à 255, propre à mon capteur d’ouverture de mon installation, à modifier avec votre équipement capteur ), je commande la fermeture
Puis j’attends 20 secondes…
Je reste si il est ouvert :

  • Si oui, j’envoie un message sur Telegram pour indiquer que le portail est resté ouvert
  • Si non je ne fais rien

Conclusion

J’ai essayé d’expliquer au mieux, mais il se peut que cela ne soit pas clair, je mettrai à jour en fonction de vos remarques.
N’hésitez pas à poser des questions ci-dessous j’y répondrai avec plaisir.
Et comme indiqué plus haut j’aimerai bien savoir si la même chose est possible sous Android (je précise sans passer par Tasker ou autres, juste en natif ):slight_smile:

EDIT : 13/02/22 - Ajout de la declaration des habitants A,B de type « Bouton » sous Homebridge

8 « J'aime »

Super tuto.
J’avais testé un peu à l’arrache un truc du genre. Ça marche nickel.

1 « J'aime »

c’est tellement réactif comme ça. En test depuis 2 jours et pas le moindre bug pour le moment. Merci pour cette technique

2 « J'aime »

J’utilise le tuto de @nebz depuis au moins deux ans jamais eu un loupé :+1:t2:

3 « J'aime »

https://apps.apple.com/fr/app/home-remote/id926193671

Bonjour,
Bravo pour le tuto, j’ai un souci sur le virtuel présence maison qui ne se mais jamais à jour.
Une idée ?

2 « J'aime »

Bonjour,
sans montrer tes scenarios et les commandes de tes virtuels c’est compliqué de t’aider.

Bonjour @Mins95,
Oui je débute pas encore les bons réflexes :wink:
Voici les commandes virtuelles et le scénarios… je ne me suis pas embêté j’ai tout simple repris ceux du Tuto, quand j’en serai à un meilleur niveau de compétences j’utiliserai les mieux :wink:


il est indiqué dans la doc des scenarios :

Scénario (scenario) : Permet de contrôler des scénarios. La partie tags permet d’envoyer des tags au scénario, ex : montag=2 (attention il ne faut utiliser que des lettre de a à z. Pas de majuscules, **pas d’accents** et pas de caractères spéciaux)

pour commencer, retire les accents de tes variables dans ton scénario et dans ton virtuel :slight_smile:

1 « J'aime »

J’ai fait modifié mais ça ne fonctionne pas, un retour à 11:42:22 et la Présence maison ne se rafraichis pas … Le status reste à vide et d’infos sur occupée ou vide.

1 « J'aime »

remontre Virtuel et scenario

dans ton virtuel, tu as également mis les variables dans « paramètre », alors qu’elles vont dans « valeur »

Bonsoir @Mins95,

Merci pour ton aide, non seulement je débute, mais en plus je recopie mal … :frowning: … J’ai trouvé d’autres erreurs, et maintenant tout fonctionne correctement :slight_smile:

Salut @fx33,

Je viens de « tomber » sur ton tuto qui m’intéresse fortement…

Jusqu’à quelques semaines j’utilisé le plugin iOS cloud qui fonctionnait parfaitement pour gérer la présence à la maison mais aussi la localisation. Le plugin ne fonctionnant plus je cherche une solution de substitution…

Avant de me lancer dans l’utilisation de ta méthode, je souhaiterai savoir si il est possible de définir des zones de présence, car dans certains de mes scénarios j’utilise la localisation qui me permets par exemple si l’ensemble des iPhone se trouve à plus de 200km, je mets en marche le BEC 1jour sur 2 plutôt que tous les jours…

Merci par avance pour ton retour

1 « J'aime »

Tu définis dans « maison » le rayon de détection pour déclencher le changement d’état de ton statut quand tu crées l’automatisation pour chaque ibidule.
Au lieu de mettre « domicile » tu mets un point juste à côté et tu pourras agrandir le cercle de couverture au besoin…

Je ne sais pas si je suis clair ! Dis moi, si non je t’enverrai des copies d’écran…

1 « J'aime »

Super !!

Merci pour ta réponse rapide ! :ok_hand:

Je mets en place tout ça et si j’ai un soucis je me permettrai de revenir vers toi !

Bonjour,

Je suis entrain de mettre en place cette solution, seulement, sur l’iPhone, quand je crée la scene « Des personnes arrivent », je n’ai pas le choix de la personnes… Auparavant je l’ai eu fais et cela marchait sans soucis…

Des infos ?

Je le répond à moi meme, en faite il fallait que plusieurs personne soit déclarer au niveau du domicile sur l’iPhone…

1 « J'aime »

Bonjour tu peux préciser se que tu appelle « déclarer au niveau du domicile sur l’iPhone ?
Merci d’avance

Le compte propriétaire du domicile doit inviter les autres comptes icloud

1 « J'aime »