Lorsqu’on parle de la présence, on peut parler de la détection de mouvement dans une pièce, avec un détecteur de mouvement comme nous l’avons vus dans l’article Xiaomi Smart Home – Installation et configuration du détecteur de mouvement, mais aussi, et c’est ce que nous allons voir aujourd’hui, la présence ou l’absence d’une personne spécifique dans le logement.

Il existe plusieurs possibilités pour déterminer la présence. Toutes ont leurs avantages et leurs inconvénient. C’est pour cela que j’ai voulu faire un système qui prend en compte plusieurs solutions.

Le but est de pouvoir valider la présence d’une personne sur 3 critères, plutôt qu’un seul. Le bluetooth, le wifi et la géolocalisation.

La gestion de la présence est une fonction très intéressante en domotique, à condition de pouvoir lui faire confiance. On peut alors imaginer plusieurs scénarios, comme par exemple :

  • Allumer la radio lorsque l’on rentre chez soit et l’éteindre lorsque l’on part, si il n’y a plus personne.
  • Lancer l’aspirateur robot lorsque l’on sort et le mettre en pause lorsque l’on rentre pour qu’il finisse lorsque l’on repart.
  • Ouvrir la porte du garage et allumer les lumières lorsque l’on est en approche du logement.

Gestion de la présence avancées

Les prérequis pour la gestion de la présence dans Jeedom

Pour mettre en place une gestion de la présence efficace avec Jeedom, nous allons avoir besoin de pas mal de choses.

Je pars du principe que vous avez déjà Jeedom, je ne vais pas expliquer comment installer les plugins que j’utilise, sinon l’article serait encore plus long qu’il ne l’est déjà.

Si vous n’avez pas tout le matériel dont je parle dans l’article, ce n’est pas très grave, vous pourrez adapter les scénarios, mais vous risquez de perdre en précision sur la détection de la présence.

Le bluetooth et Jeedom

Le bluetooth à une très courte portée (même trop courte parfois), une dizaine de mètres, ce qui en fait un détecteur de présence assez précis. C’est pour cela que je l’utiliserai comme déclencheur principal.

Appareil Bluetooth portatif pour Jeedom

  • Ces appareils doivent toujours être avec vous pour indiquer votre présence ou votre absence à Jeedom.

Il existe différents appareils bluetooth permettant de gérer la présence, par exemple ma femme utilise un NUT Mini sous forme de porte clé et moi un Xiaomi Mi-Band 2.

  • Mi-band 2 : Ce sont des bracelets qui comptent les pas, mesurent la fréquence cardiaque, le sommeil, les calories brûlées, les distances parcourues, etc. L’avantage c’est qu’on les porte  toujours au poignet, ce qui est parfait pour la détection de la présence.
  • Nut  : Si comme ma femme vous n’êtes pas adepte des bracelets connectés, vous pouvez utiliser des petits trackers comme les NUT qui peuvent s’utiliser en porte-clés.  A l’origine, ils sont fait pour localiser les objets perdus via une application sur smartphone.

Sachez que beaucoup d’appareils bluetooth (bracelets, porte clé, montres, tracker…) sont utilisables pour la gestion de la présence. La seule contrainte, c’est que vous les ayez toujours avec vous.

Antenne Bluetooth pour Jeedom

  • Elle servira de récepteur pour détecter la présence, ou non, d’un appareil bluetooth.

L’antenne peut être intégrée comme sur les raspberry Pi 3, ou ajoutée via une clé USB Bluetooth, comme sur les Raspberry Pi précédents.

La porté du bluetooth dépend de l’environnement du logement. De l’épaisseur et de la composition des murs, ou autres éléments perturbateurs, comme des structures métalliques, etc.

Il est possible et conseillé d’ajouter une ou plusieurs antennes déportées, à l’aide par exemple d’un Raspberry pi W comme nous l’avons vu dans cet article : Jeedom – BLEA sur Raspberry pi Zero W.

L’intérêt des antennes déportées est d’augmenter la portée du bluetooth pour couvrir tout le logement.

Plugin Jeedom Bluetooth Advertisement (BLEA)

  • Le plugin permet à Jeedom de gérer la présence des appareils bluetooth.

Si vous avez lu mes articles Xiaomi Yeelight – Lampe de chevet et Jeedom – BLEA sur Raspberry pi Zero W vous connaissez le plugin BLEA, qui en plus de contrôler certains appareils comme la lampe de chevet Xiaomigère la présence de presque tout les appareils bluetooth.

Le plugin est développé par Sarakha63 et en plus il est gratuit. Si ce n’est pas déjà fait je vous invite à lire son article pour l’installation .

Le Wifi et Jeedom

Le wifi à une meilleur portée que le bluetooth, si on capte le wifi du logement, c’est qu’on est proche du logement, mais pas forcement à l’intérieur.

Appareil Wifi portatif pour Jeedom

  • Il faut un appareil wifi qui est toujours avec vous et connecté, pour indiquer votre présence ou votre absence à Jeedom.

Vous l’aurez compris, on parle ici d’un smartphone.

Routeur wifi

  • Le routeur ou la box internet serviront à connecter un appareil wifi au réseau local.

Un bon routeur avec un wifi puissant permettra d’avoir une meilleure gestion de la présence. Chez moi, j’ai une Livebox pour la Fibre optique, mais tout ce qui est réseau local, est géré par un routeur ASUS RT-AC88U, je vous invite à lire cet article pour plus d’informations : Routeur ASUS RT-AC88U – Livebox 4.

Si vous n’avez pas prévu d’investir dans un routeur, mais que votre wifi ne couvre pas tout votre logement vous pouvez utiliser des petits amplificateur Wifi comme le Xiaomi Mi WiFi 300M Amplifier 2 à moins de 10€.

Plugin Jeedom Network

  • Il servira à gérer la présence des appareils Wifi dans Jeedom.

Le plugin est développé par Loic (Créateur de Jeedom) et il est gratuit également. Il permet de faire un ping sur n’importe quel appareil connecté au réseau.

Pour l’installation, la doc officiel suffit amplement : Plugin-networks.

La géolocalisation et Jeedom

La géolocalisation à une précision d’une centaine de mètres, ce qui est bien pour savoir si une personne est en approche du logement.

Grâce au GPS présent dans les téléphones portable, on peut connaitre la position des personnes même à plusieurs kilomètres.

Applications Android pour Jeedom

Plugin Jeedom de géolocalisation

Les scenarios de gestion de la présence dans Jeedom

Les scenarios vont nous permettre d’interagir sur ces différents éléments (Bluetooth, Wifi et Géolocalisation) afin de déterminer le plus précisément possible la présence ou non d’une personne et d’exécuter des actions en conséquences.

Ils peuvent être plus ou moins long en fonction de ce que vous voulez automatiser. Je vous propose là, quelques exemples, mais libre à vous d’adapter les scénarios à vos besoins.

Certains scénarios sont spécifique à un membre et d’autres sont commun à toute la famille.

  • [Présent Membre] : C’est le scénario qui détermine la présence ou non d’un membre de la famille.
    • Il est déclenché par un appareil bluetooth (Bracelet, NUT, iTag…).
  • [Absent Membre] :  C’est le scénario qui valide l’absence d’un membre de la famille. Il va faire la triple vérification d’absence (Bluetooth, Wifi et Géolocalisation).
  • [Géolocalisation Membre] : Ce scénario permet d’informer Jeedom qu’un membre est en approche, mais pas encore présent et donc d’automatiser des scènes.
    • Ouvrir la porte du garage, allumer les lumières extérieures, prévenir par TTS de l’arrivé d’une personne s’il y a déjà quelqu’un à la maison…
  • [Scène Membre] : C’est le scénario qui va permettre l’automatisation de scènes spécifiques pour un membre.
    • Allumer la lumière du bureau, seulement lorsque c’est Membre X qui rentre…
  • [Scène Famille] : Ce scénario à la même fonction d’automatisation de scènes que le scénario précédent, mais il est commun à tous les membres.
    • Activer et désactiver l’alarme, éteindre les lumières et la musique, lorsqu’il n’y a plus personne à la maison…

Tout au long de l’article, il faudra remplacer « Membre », « Membre1 », « Membre2 » par le nom des membre de votre famille, animaux y compris 🙂

Info : Je vous conseille de faire d’abord un scénario pour vous et une fois qu’il sera bien en place, de le dupliquer pour un autre membre de la famille et ainsi de suite pour chacun des membres.

Scénario : [Présent Membre]

Gestion de la présence avancées
Le scénario sur l’image et un peu différent de celui de l’article.

Le scénario est déclenché par la présence ou l’absence d’un appareil bluetooth, Mi-Band dans l’exemple.

L’état des appareils bluetooth étant vérifiés à intervalles réguliers, il faut bien cocher l’option de « Non exécution pour cause de répétition » sur le premier SI du scénario, cercle rouge à gauche de la commande, afin de lancer le scénario, seulement sur le changement d’état.

Ce scénario est volontairement court pour qu’il s’exécute rapidement afin de déterminer au plus vite la présence d’une personne via un virtuel, ou de lancer le scénario de vérification d’absence [Absent Membre] qui lui, est plus long, mais qui demande moins de réactivité.

SI #[Membres][Mi-Band Membre][Present]# == 1 ALORS

log : Miband présent.

Si l’appareil bluetooth est détecté comme présent, alors on rentre dans la boucle pour valider la présence du membre.

SI #[Membres][Virtuel Présence Membre][Etat]# == 0 ALORS

log : On passe le virtuel à présent.

Action : #[Membres][Virtuel Présence Membre][Présent]#

variable : Nom : PresentMembre Valeur : date(‘H:i:s’)

message : Membre présent à formattime(#time#). (#[Membres][Géolocalisation Membre][Distance Maison]# m).

Le virtuel binaire « Etat / présent(1) / absent(0) «   appelé [Virtuel Présence Membre] permet de connaitre l’état de présence du membre.

Si le virtuel  [Virtuel Présence Membre] est à 0 (absent), alors on modifie l’état du virtuel pour indiquer que le membre est à nouveau présent (1).

Le changement d’état du virtuel [Virtuel Présence Membre] va déclencher le scénarios [Scène Membre].

Ce test permet d’éviter les erreurs en cas de perte momentanée du signal du bracelet, malgré que le membre soit toujours dans le logement, mais hors de porté de l’antenne bluetooth.

On enregistre l’heure dans une variable qui sera visible dans le virtuel [Virtuel Présence Membre] et on envoi un message dans le centre de message de Jeedom (Membre présent à 18h58. (20 m).), c’est utile pour le débogage.

SINON

log : Membre n’était pas absent.

Le virtuel indique que le membre est déjà présent, il y a donc eu une perte de signal du bracelet, ou alors le membre est rapidement sorti et rentré avant d’avoir été validé comme absent. On ne fait rien dans ce cas, si ce n’est un log pour le débogage.

SINON

log : Miband absent on provoque le scénario absent

variable : Nom : NbAbsMembre Valeur : 0

scenario : #[Membres][Géolocalisation & Présence][Absent Membre]# Action : start

Si le scénario est déclenché par l’absence du bracelet Mi band (0), alors on lance le scénario [Absent Membre] qui va faire la triple vérification avant de passer le virtuel à absent.

La variable « NbAbsMembre » est mise à 0, elle sera utile dans le scénario d’absence.

Scénario : [Absent Membre]

Gestion de la présence avancées
Le scénario sur l’image et un peu différent de celui de l’article.

Le scénario est déclenché par le scénario précédent [Présent Membre]ou par lui même. On ne met rien dans l’événement déclencheur.

Ce scénario va faire les différentes vérifications nécessaires pour valider l’absence d’un membre et une fois cette absence confirmée, le virtuel [Virtuel Présence Membre] passera à absent.

SI #[Membres][Virtuel Présence Membre][Etat]# == 1 ALORS

log : Membre est identifié comme présent.

Le but de ce scénario est de passer l’état du virtuel [Virtuel Présence Membre] de présent, à absent. Donc, on vérifie si le membre est absent ou présent.

SI #[Membres][Mi-Band Membre][Present]# == 0 ALORS

log : Absence confirmé par Miband.

Même si la vérification de l’absence du bracelet à déjà été faite dans le scénario [Présent Membre], on refait le test, car le scénario peut s’auto-provoquer.

SI #[Hardware][Téléphone Membre][Statut]# == 0 ALORS

log : Absence confirmée par Wifi Téléphone.

Voila le deuxième test de présence, le wifi du téléphone. Mais Il arrive que le wifi du téléphone soit parfois désactivé, sa fiabilité est donc toute relative.

SI #[Membres][Virtuel Présence Membre][EtatGeo]#== 0 ALORS

log : Absence confirmé par géolocalisation. Virtuel présence Membre à absent.

Action : #[Membres][Virtuel Présence Membre][Absent]#

variable : Nom : AbsentMembre Valeur : date(‘H:i:s’)

message : Membre absent à formattime(#time#). (#[Membres][Géolocalisation Membre][Distance Maison]# m).

Action : remove_inat

Pour finir,nous avons le troisième test de présence, la géolocalisation. On ne fait pas directement un test sur la distance, on utilise simplement l’état du virtuel [Virtuel Présence Membre]mais cette fois, avec l’état [EtatGeo] qui est mise à jour grâce au scénario [Géolocalisation Membre]. L’état de la géolocalisation est réglé sur 150 mètres pour passer d’un état Proche (1) à un état Loin (0).

Si l’état de la géolocalisation est à 0, alors le membre est vraiment absent. On passe donc le virtuel [Virtuel Présence Membre] à absent.

Comme précédemment, on enregistre l’heure dans une variable qui sera visible dans le virtuel [Virtuel Présence Membre] et on envoie un message dans le centre de message de Jeedom (Membre absent à 18h27. (310 m).) pour le débogage.

Le remove_inat permet de supprimer les taches programmées du scénario.

SINON

log : Présence par géolocalisation. Vérification dans 1 minute. #[Membres][Géolocalisation Membre][Distance Maison]# m.

Action : remove_inat

Dans le cas ou la géolocalisation ne confirme pas l’absence, malgré le bluetooth et le wifi, on relance la vérification toutes les minutes pendant 5 minutes, puis on fait une pause de 5 minutes, avant de recommencer la vérification.

Il peut arriver parfois qu’on reste à moins de 150 mètres de la maison et donc que l’état de géolocalisation reste à « présent ». Cela peu arriver le temps de sortir la voiture du garage ou de discuter avec un voisin par exemple.

SI variable(NbAbsMembre) < 5 ALORS

C’est la variable que nous avions mise à 0 dans le scénario [Présent Membre] qui va nous permettre de savoir combien de fois on a vérifié la géolocalisation. Si c’est moins de 5 fois, on continue.

DANS 1 (MIN)

variable : Nom : NbAbsMembre Valeur : variable(NbAbsMembre,1) + 1

scénario : #[Membres][Géolocalisation & Présence][Absent Membre]# Action : start

log : NbAbsMembre == variable(NbAbsMembre)

On relance simplement le scénario au bout d’une minute. L’avantage, c’est que l’on refait le triple test à chaque fois, d’ou l’importance de revérifier le bluetooth au début du scénario.

Il faut aussi incrémenter de 1 la variable NbAbsMembre, pour bloquer le test au bout des 5 vérifications.

SINON

log : On Stop pour 5 minutes le scénario après 5 relances

Apres 5 minutes (5 fois 1 minute) de test, si la géolocalisation ne confirme toujours pas l’absence, alors on fait une pause de 5 minutes avant de recommencer.

DANS 5 (MIN)

log : On relance le scénario 5 minutes plus tard

variable : Nom : NbAbsMembre Valeur : 0

scenario : #[Membres][Géolocalisation & Présence][Absent Membre]# Action : start

Au bout de 5 minutes, on réinitialise la variable et on recommence les tests en relançant le scénario. Il est aussi possible d’utiliser la fonction ASK à cet endroit, pour recevoir un SMS indiquant que la géolocalisation du membre ne permet pas de valider son absence et donc de le faire manuellement.

SINON

log : Présence confirmé par Wifi Téléphone. Vérification dans 1 minute.

Action : #[Hardware][Téléphone Membre][Rafraîchir]#

DANS 1 (MIN)

scenario : #[Membres][Géolocalisation & Présence][Absent Membre]# Action : start

Si, lors du test du wifi la présence est confirmée, alors, on relance le scénario 1 minute plus tard.

SINON

log : Présence confirmé par Miband.

Action : remove_inat

Dans le cas ou le bluetooth indique présent, on arrête les vérifications, car on ne souhaite plus passer le membre à absent. On supprime les taches éventuelles.

SINON

log : Membre déjà identifié comme absent.

Théoriquement, on ne devrait jamais arriver ici, car le scénario déclencheur [Présent Membre] vérifie aussi l’état du virtuel [Virtuel Présence Membre]avant de provoquer ce scénario.

Scénario : [Géolocalisation Membre]

Gestion de la présence avancées

Ce scénario permet de définir l’éloignement d’un membre par rapport au logement. C’est le test qui va confirmer l’absence réelle d’un membre, après le bluetooth et le wifi. Il va aussi indiquer à Jeedom qu’un membre est en approche du logement.

Le scénario est déclenché par la distance entre le membre et le logement. Cette information est renvoyée par le plugin GeoLoc qui gère la géolocalisation.

La distance étant mise à jour régulièrement en fonction des déplacements du membre, il faut bien cocher l’option de « Non exécution pour cause de répétition » sur le premier SI du scénario, cercle rouge à coté de la commande, afin de n’exécuter le scénario seulement si le membre passe de moins 150 mètres à plus de 150 mètres, ou inversement.

Ce scénario peut être assez court si on veut seulement changer l’état d’un membre, mais on peut aussi ajouter des fonctions comme par exemple, ouvrir le garage, allumer les lumières extérieurs, lever les volets, lorsque le membre est en approche du logement.

SI #[Membres][Géolocalisation Membre][Distance Maison]# <= 150 ALORS

log : Membre à moins de #[Membres][Géolocalisation Membre][Distance Maison]# m.

Action : #[Membres][Virtuel Présence Membre][Proche]#

Si le membre est à une distance d’au moins 150 mètres, alors on modifie l’état [EtatGeo] du virtuel [Virtuel Présence Membre] à [Proche]. Cette action ne provoquera pas de scénario dans notre exemple, car les actions à effectuer lors de l’approche d’un membre seront directement exécutées dans ce même scénario. Mais il est possible de déporter ces actions dans un scénario spécifique.

SI #[Appartement][Modes Maison][Mode]# == « Alarme » ALORS

log : Alarme Activé alors désactivation sirène.

Action : #[Appartement][Virtuel Activation désactivation][OffSirene]#

Voila un exemple d’action que l’on peut effectuer lors de l’approche d’un membre. Si le mode alarme est activé, alors on désactive la sirène.

Le but est que l’alarme ne sonne pas, si elle ne se désactive pas automatiquement lorsqu’un membre entre dans le logement. On pourrait aussi désactiver l’alarme de la zone garage et extérieure.

SI #[Membres][Virtuel Présence Membre X][Etat]# == 0 ET #[Membres][Virtuel Présence Membre Y][Etat]# == 1 ALORS

log : Membre X Absent et Membre Y présente alors TTS.

Action : #[Salon][Google Home Mini][Parle]# Phrase : Membre X arrive il est à #[Membres][Virtuel Présence Membre X][Distance]# mètres de la maison.

Si le membre X est absent et que le membre Y est présent, alors on fait une annonce TTS pour annoncer l’arrivée du membre X.

On peut ajouter plusieurs actions ou fonctions au scénario suivent ses besoins. Dans le cas d’un grand nombre d’actions, je vous conseille d’utiliser un scénario dédié, provoqué par le changement d’état [EtatGeo] du virtuel [Virtuel Présence Membre].

SINON

log : Membre à plus de #[Membres][Géolocalisation Membre][Distance Maison]# m.

Action : #[Membres][Virtuel Présence Membre][Loin]#

Si le membre est à une distance de plus de 150 mètres, alors on modifie l’état [EtatGeo] du virtuel [Virtuel Présence Membre] à [Loin]. Cette action ne provoquera pas de scénario, mais sera utilisable dans différents autres scénarios.

Scénario : [Scène Membre]

Gestion de la présence avancées

Ce scénario permet de lancer des actions personnalisées lors de la présence, ou de l’absence, d’un membre. Pour les actions communes à tout les membres, on utilisera le scénario [Scène Famille].

Le scénario est déclenché par le changement d’état, présent ou absent, du virtuel [Virtuel Présence Membre].

SI #[Membres][Virtuel Présence Membre][Etat]# == 0 ALORS

log : Membre est absent.

Si le membre est absent, alors on Log son état, avant de lancer les actions à effectuer lors de son absence.

SI #[Membres][Virtuel Présence Membre Y][Etat]# == 0 ALORS

log : Membre Y est déjà Absent

Scénario : #[Membres][Géolocalisation & Présence][Scène Famille]# Action Start

SINON

log : Membre Y est toujours présent.

Dans un premier temps, on vérifie la présence, ou non, d’un autre membre dans le logement. Dans cet exemple, s’il n’y a personne, on lance le scénario [Scène Famille]. Sinon on ne fait rien. Libre à vous d’ajouter les actions en fonction de vos besoins.

SINON

log : Membre est présent.

Si le membre est présent, alors on Log son état, avant de lancer les actions à effectuer en cas de présence.

SI #[Membres][Virtuel Présence Membre Y][Etat]# == 0 ALORS

log : Membre Y est Absent.

Scénario : #[Membres][Géolocalisation & Présence][Scène Famille]# Action Start(sync)

Action : #[Appartement][Virtuel Google Home][Music]#

SINON

log : Membre Y est déjà présent.

Comme lors de l’absence, on vérifie la présence, ou non, d’un autre membre dans le logement. Dans cet exemple, s’il n’y a personne, on lance le scénario [Scène Famille] en mode synchrone, pour que la, ou les actions suivantes, ne soient lancées que lorsque le scénario [Scène Famille] aura été complètement exécuté. Ensuite, on lance l’action, en l’occurrence la musique sur Google Home. Par contre, s’il y a un autre membre dans le logement, on ne fait rien. Libre à vous d’ajouter les actions en fonction de vos besoins.

SI #[Appartement][Virtuel Lampe de Bureau][Etat]# == 0 ALORS

log : On allume la lumière du bureau.

Action : #[Appartement][Virtuel Lampe de Bureau][On]#

Pour ce dernier exemple, on ne vérifie pas la présence d’un autre membre. L’action est exécutée à chaque fois que le membre est à nouveau présent. Libre à vous d’ajouter les actions en fonction de vos besoins.

Scénario : [Scène Famille]

Gestion de la présence avancées

Ce scénario permet de lancer des actions en fonction de la présence, ou de l’absence, de tous les membres.

Pour les actions spécifiques à un membre, on utilisera les scénarios [Scène Membre] qui déclencheront ce scénario.

SI #[Membres][Virtuel Présence Membre X][Etat]# == 0 ET #[Membres][Virtuel Présence Membre Y][Etat]# == 0 ALORS

log : Membre X et Membre Y sont absent.

Action :#[Hardware][Mi-Box JPI][home]#

Si tous les membres sont absents, alors on Log avant le lancer les actions à effectuer. La première action, c’est de mettre ma Mi-Box TV sur Home, pour couper d’éventuelles lectures en cours via Google Home, YouTube, Google Music…

SI #[Appartement][Virtuel Activation désactivation][EtatAutoAlarme]# == « 1 » ALORS

log : Activation de l’alarme car en Automatique.

Action :#[Appartement][Modes Maison][Alarme]#

Pour ce premier exemple, l’alarme s’active si elle est réglée sur automatique.

SI #[Salon][Player Salon][Etat Decodeur]# == 1 ALORS

log : TV allumé on l’éteint.

Action :#[Salon][Player Salon][ON-OFF]#

Dans cet exemple, on éteint la Livebox TV, si elle est restée allumée.

SI #time#>=800 ET #time# <1300 ALORS

log : Infos du matin.

Scénario : #[Appartement][Notifications][Notifications 2.0]# Action : Start (sync)

Tags : Type=0 Msg= »Chambre 1= #[Chambre 1][Capteur Température Hygrométrie][Température]#°C et #[Chambre 1][Capteur Température Hygrométrie][Humidité]# %. Chambre 2= #[Chambre 2][Capteur Température Hygrométrie][Température]#°C et #[Chambre 2][Capteur Température Hygrométrie][Humidité]# %. Salon = #[Salon][ThemoHydroDigital][Température]#°C et #[Salon][ThemoHydroDigital][Humidité]# %. Extérieur= #[Extérieur][Capteur Température Hygrométrie][Température]#°C et #[Extérieur][Capteur Température Hygrométrie][Humidité]# %. »

Ici, si on est entre 8:00 et 13:00, alors on envoie un SMS vie les scénario [Notifications 2.0] avec les informations de température et d’hydrométrie de la maison.

SI #[Cuisine][Mi-Robot][Statut]# == « Au Repos » ou #[Cuisine][Mi-Robot][Statut]# == « Chargeur déconnecté » ALORS

log : L’aspirateur est au repos (Pause) on le relance.

Action : #[Cuisine][Mi-Robot][Démarrer]#

Si l’aspirateur Robot est en pause, c’est à dire « Repos ou Déconnecté », alors on le redémarre.

SINON

SI #[Cuisine][Mi-Robot][Statut]# == « En charge » ET (#[Appartement][Virtuel Mi-Robot][Fini depuis :]# >= 12 ou #[Appartement][Virtuel Mi-Robot][Surface nettoyée]# < 10) ALORS

log : L’aspirateur est en charge depuis 12 heures ou que le nettoyage est < 10m² alors on demande.

Scénario : #[Appartement][ASK][Aspirateur Script]# Action : Start

Si l’aspirateur n’est pas en pause, alors on vérifie qu’il soit bien à sa station de recharge et également si un nettoyage de plus de 10 m² à eu lieu dans les 12 dernières heures.

Je fais ce test, car il arrive qu’on utilise l’aspirateur pour une petite surface (<10m²) en nettoyage ciblé, ou dans une pièce fermée comme la salle de bain et je ne veux pas que cela bloque le nettoyage.

L’aspirateur ne démarre pas automatiquement, mais seulement via un SMS en réponse au scénario ASK, pour plus d’info voir Jeedom Scénario – Fonction ASK via JPI Plugin.

SINON

log : Un des membre de la famille est présent.

Si un des membres est présent, alors on Log avant le lancer les actions à effectuer.

SI #[Appartement][Modes Maison][Mode]# == « Alarme » ALORS

log : Alarme activé on change de mode.

Scénario : #[Informations][Programmation][Réglage Modes]# Action : Start

A l’inverse maintenant, on désactive l’alarme dès qu’un membre est à nouveau présent.

Ici, j’utilise un scénario qui me permet de mettre le bon mode en fonction de l’heure et du jour, mais on pourrait très bien forcer le mode Journée.

SI #[Cuisine][Mi-Robot][Statut]# != « En charge » ALORS

log : L’aspirateur est en marche.

A présent, on vérifie si l’aspirateur est en charge ou pas (signe différent de !=). Si il ne l’est pas, alors on rentre dans la boucle.

SI #[Cuisine][Mi-Robot][Erreur]# == « Tout va bien » ALORS

log : L’aspirateur n’est pas en erreur.

Scénario : #[Appartement][Notifications][Notifications 2.0]# Action : Start (sync)

Tags : Type=2 Msg= »L’aspirateur n’a pas fini son nettoyage, il se mets en pause. »

Action : #[Appartement][Virtuel Mi-Robot][Pause]#

Si l’aspirateur n’est pas en erreur, alors on envoie une notification TTS via le scénario [Notifications 2.0] et on met l’aspirateur en pause.

SINON

log : L’aspirateur à un problème, notification vocal.

Scénario : #[Appartement][Notifications][Notifications 2.0]# Action : Start (sync)

Tags : Type=2 Msg= »L’aspirateur est en erreur : #[Cuisine][Mi-Robot][Erreur]# »

En cas d’erreur de l’aspirateur, j’envoie aussi une notification TTS via le scénario [Notifications 2.0].

Action : #[Appartement][Virtuel Mi-Robot][Trouver]#

Pour finir, on exécute l’action « trouver l’aspirateur », pour savoir ou il se trouve, qu’il soit en pause ou en erreur.

Il faut faire bien attention de mettre les actions aux bons endroits, pour ne pas risquer d’arrêter la TV ou d’activer l’alarme, à chaque fois que quelqu’un devient absent, même si quelqu’un est encore présent.

Virtuels et Widgets Jeedom

Pour les virtuels et les widgets, c’est vraiment un choix personnel, en fonction de son design et de ce que l’on veut avoir comme informations sur le dashboard.

Virtuel : [Virtuel Présence Membre]

Gestion de la présence avancées

Vous avez vu tout au long des scénarios que le virtuel [Virtuel Présence Membre] est souvent utilisé. Il permet d’avoir l’état de présence et de géolocalisation des membres.

  • Etat (Indispensable) : C’est la commande principale du virtuel. Elle est indispensable pour le bon fonctionnement des scenarios. Elle permet de savoir si le membre est présent (1) ou absent (0). Elle sera créé automatiquement lors de l’enregistrement des commandes action « Présent » et « Absent ».
    • Sous-type : Info / Binaire.
    • Valeur : Calcul.
  • Présent (Indispensable) : Cette commande action est indispensable elle permet de changer l’état de présence du virtuel à présent (1). Il faut bien saisir « Etat » dans le champ valeur lors de la création et après l’enregistrement affecter « Etat » à la commande valeur par défaut.
    • Sous-type : Action/ Défaut.
    • Valeur :
      •  Etat.
      • 1.
    • Paramètres :
      • Etat.
      • 1.
      • Afficher. A cocher seulement si vous voulez pouvoir changer manuellement l’état d’un membre à « présent ».
  • Absent (Indispensable) : Cette commande action est indispensable. Elle permet de changer l’état de présence du virtuel à absent (0). Il faut bien saisir « Etat » dans le champ valeur lors de la création et après l’enregistrement affecter « Etat » à la commande valeur par défaut.
    • Sous-type : Action/ Défaut.
    • Valeur :
      •  Etat.
      • 0.
    • Paramètres :
      • Etat.
      • 0.
      • Afficher. A cocher seulement si vous voulez pouvoir changer manuellement l’état d’un membre à « absent ».
  • EtatGeo : Cet état spécifique à la géolocalisation permet savoir si le membre est proche (1) ou loin (0). L’état sera créé automatiquement lors de l’enregistrement des commandes action « Proche » et « Loin ».
    • Sous-type : Info / Binaire.
    • Valeur : Calcul.
  • Proche : Cette commande action permet de changer l’état de géolocalisation du virtuel à proche (1). Il faut bien saisir « EtatGeo » dans le champ valeur, lors de la création et après l’enregistrement affecter « EtatGeo » à la commande valeur par défaut.
    • Sous-type : Action/ Défaut.
    • Valeur :
      • EtatGeo.
      • 1.
    • Paramètres :
      • EtatGeo.
      • 1.
      • Afficher. A cocher seulement si vous voulez pouvoir changer manuellement l’état de géolocalisation d’un membre à « proche ».
  • Loin : Cette commande action permet de changer l’état de géolocalisation du virtuel à loin (0). Il faut bien saisir « EtatGeo » dans le champ valeur lors de la création et après l’enregistrement affecter « EtatGeo » à la commande valeur par défaut.
    • Sous-type : Action/ Défaut.
    • Valeur :
      • EtatGeo.
      • 0.
    • Paramètres :
      • EtatGeo.
      • 0.
      • Afficher. A cocher seulement si vous voulez pouvoir changer manuellement l’état de géolocalisation d’un membre à « loin ».
  • Distance : Cette commande est utile pour l’affichage de la distance entre le membre et la maison. La valeur est fournie par la commande Distance Maison du plugin Geoloc.
    • Sous-type : Info / Numérique.
    • Valeur : #[Membres][Géolocalisation Membre][Distance Maison]#.
    • Unité : m.
    • Paramètres : Afficher.
  • Présent à : Cette commande est utile pour l’affichage de l’heure de présence du membre. La valeur est fournie par une variable mise à jour dans le scénario [Présent Membre] .
    • Sous-type : Info / Autre.
    • Valeur : variable(PresentMembre).
    • Paramètres : Afficher.
  • Absent à : Cette commande est utile pour l’affichage de l’heure d’absence du membre. La valeur est fournie par une variable mise à jour dans le scénario [Absent Membre].
    • Sous-type : Info / Autre.
    • Valeur : variable(AbsentMembre).
    • Paramètres : Afficher.
  • Adresse : Cette commande est utile pour l’affichage de l’adresse du membre. La valeur est fournie par la commande Rue du plugin Localisation et Trajet (geotrav).
    • Sous-type : Info / Numérique.
    • Valeur : #[Membres][Adresses Membre][Rue]#.
    • Paramètres : Afficher.
  • Ville : Cette commande est utile pour l’affichage de la ville du membre. La valeur est fournie par la commande Ville du plugin Localisation et Trajet (geotrav).
    • Sous-type : Info / Numérique.
    • Valeur : #[Membres][Adresses Membre][Ville]#.
    • Paramètres : Afficher.

Je n’affiche pas ce virtuel en permanence sur mon Design, mais seulement lorsque je survole avec la souris le virtuel [Virtuel Famille] grâce à la fonction Zone du mode design :

  • Clique droit.
  • Ajouter un zone.
  • Paramètres d’affichage.
  • Type de zone : Widget au survol.

Pour la mise en page du virtuel, j’utilise le mode tableau disponible dans :

  • Configuration avancés.
  • Disposition.
  • Configuration général
    • Disposition : Tableau.
    • Nombre de ligne : 5.
    • Nombre de colonne : 1
    • Centrer dans les cases : coché.
    • Style général des cases (CSS) : Rien.
    • Style du tableau (CSS) : background: rgba(0,0,0,0.7);-webkit-border-radius: 20px; width: 100%;
  • Configuration détaillée (Faire glisser les commandes au bon endroit).
    • Ligne 1 : Rafraîchir (caché), Présent(si affiché), Absent(si affiché), Distance.
    • Ligne 2 : Présent à :
    • Ligne 3 : Absent à :
    • Ligne 4 : Adresse :
    • Ligne 5 : Ville :

Virtuel : [Virtuel Famille]

Ce virtuel permet d’afficher l’état présent ou absent des membres et lors du survol de la souris sur un membre, le virtuel [Virtuel Présence Membre] correspondant apparaît.

Une seul virtuel pour tout les membres suffit, il est conseillé d’utiliser le mode tableau pour une mise en page claire.

  • Présence Membre 1 : Cette commande est utile pour l’affichage du membre 1 sur le dashboard. La valeur est fournie par la commande état du virtuel [Virtuel Présence Membre1].
    • Sous-type : Info / Binaire.
    • Valeur : #[Membres][Virtuel Présence Membre1][Etat]# .
    • Paramètres : Afficher.
  • Présence Membre 2: Cette commande est utile pour l’affichage du membre 2 sur le dashboard. La valeur est fournie par la commande état du virtuel [Virtuel Présence Membre2].
    • Sous-type : Info / Binaire.
    • Valeur : #[Membres][Virtuel Présence Membre2][Etat]# .
    • Paramètres : Afficher.
  • Présence Membre … : ajoutez les membres les uns après les autres.

Widget : [Membre]

Ce widget permet d’afficher la photo d’un membre, claire en cas de présence et grisée en cas d’absence, avec la durée depuis le dernier changement d’état (présent ou absent).

Il faut un widget par membre et l’affecter à la commande « Présence Membre X » correspondante du virtuel [Virtuel Famille].

    • Type : Info
    • Sous type : Binaire
    • Code : Pour avoir l’affichage du temps depuis le dernier changement d’état, ajouter ce code au widget :
      <span class="timeCmd#uid# timeCmd label label-default" style="background-color:#cmdColor# !important;"></span>

<script>
jeedom.cmd.update['#id#'] = function(_options){
jeedom.cmd.displayDuration(_options.valueDate, $('.cmd[data-cmd_id=#id#] .timeCmd'));
$('.cmd[data-cmd_id=#id#]').attr('title','Valeur du '+_options.valueDate+', collectée le '+_options.collectDate) }
jeedom.cmd.update['#id#']({display_value:'#state#',valueDate:'#valueDate#',collectDate:'#collectDate#',alertLevel:'#alertLevel#'});
</script>

Conclusion

Je suis d’accord que cet article est un peu long, [rt_reading_time] minutes pour le lire et au moins autant pour comprendre son fonctionnement, mais la gestion de la présence c’est complexe et ça n’aurait pas eu de sens de faire des articles successifs pour chaque scénario.

J’utilise cette gestion de la présence depuis plusieurs mois et je dois dire que j’en suis très satisfait. J’ai vraiment l’impression que la maison interagit intelligemment avec les différents membres de la famille.

Il pourrait être tentant d’ajouter de nombreuses fonctions, mais attention à ne pas vous « embrouiller les pinceaux », surtout si vous avez beaucoup de membres et que vous automatisez des éléments sensibles, comme l’activation et la désactivation de l’alarme par exemple.

N’hésitez pas à ajouter des notifications SMS pour être informés des différentes actions et changement d’états. Personnellement j’en ajoute lors des périodes de test et je les remplace petit à petit par des messages Jeedom, puis des logs, lorsque tout fonctionne comme prévu. L’utilisation de virtuel d’activation, désactivation, peut être utile en cas de problème ou d’événement inhabituel, comme la présence d’un invité à la maison.

Si vous avez des idées de déclinaisons, d’optimisations, ou des remarques, n’hésitez pas à laisser un commentaire et si cet article vous a intéressé notez le. 🙂

Cet article a 27 commentaires

  1. Excellent article avec une progression logique facilitant la compréhension, malgré la complexité du sujet traité.
    Bravo pour ce travail remarquable qui nous offre une fois encore de nouvelles possibilités dans l’utilisation de Jeedom.

    1. Merci pour les compliments ça motive pour continuer.

    2. Je rejoins le commentaire de Jeade09 : Guillaume, tes tutoriels sont vraiment excellents ! Autant dans le fond que dans la forme !

      Après, personnellement, quand je les survole uniquement, j’ai l’impression que c’est des trucs irréalisables, beaucoup trop complexe !! Mais comme tu le précise souvent, ces tutoriels sont fait plutôt pour des gens plutôt confirmés et qui savent interprétés et adaptés les actions par rapport a leur propre équipements/besoins.

      En tout cas, c’est toujours avec plaisir que je découvre tes articles… J’avoue même être tout exité lorsque j’ai un e-mail qui m’indique qu’il y a un nouvel article sur ton blog 😉

      1. Bonjour,
        Merci pour le commentaire très encourageant.
        Il faudrait peu être que je fasse un article permettant aux débutants de pouvoir adapter les scénarios complexe.
        J’espère être assez clair dans mes explications je vais tâcher de l’être encore plus.

        1. Alors, c’est certain que des scénarios un peu plus simple permettrait d’attirer plus de lecteurs dans ton blog (de plus en plus de gens s’intéressent a la domotique, et Jeedom, par le faite qu’il soit gratuit, populaire, avec une bonne communauté, et très souple, attire beaucoup), et ne sont pas forcément très a l’aise avec la programmation (ce qui est mon cas malgré que j’utilise la solution Jeedom depuis 2 ans !!).

          Par exemple, personnellement, la 1ère fois que j’ai lu l’article, je l’ai juste survolé en me disant que de toute façon, il me faudrait trop de temps pour l’utiliser et c’est seulement une semaine après (parce que j’avais rien a faire pendant mon jour de repos), que j’ai décidé de mettre en place ton tutoriel.

          Pour être franc, tout ne fonctionne pas correctement encore chez moi, pourtant j’ai l’impression d’avoir suivi ton tuto pas à pas. Mais entre la clarté de tes excellentes explications, et la réflexion qu’appellent celles-ci, ça me force a m’interroger sur tes choix (pourquoi activer un virtuel alors qu’on peut s’en passer), les analyser, et du coup, j’apprends plein de choses et de méthodes dont je n’avais jamais pensé !
          Je ne te pose pas forcément de questions a propos de pourquoi chez moi, tout ne fonctionne pas correctement, car je m’aperçois qu’avec un peu plus d’observation, c’est a chaque fois une erreur de ma part. Je préfère étudier pourquoi ça ne marche pas plutôt que de polluer ton tuto 🙂

          Ce que j’apprécie aussi beaucoup, c’est la mise en forme de ton blog… Toutes les parties apparaissent clairement, et on retrouve facilement une étape dont on veut observer plus particulièrement. Par exemple, je trouve tes tutoriels beaucoup mieux « étapés » par rapport a ceux du blog de Samarkha, et beaucoup plus compréhensible (désolé pour lui).

          A chaque fois que je lis tes tutoriels, je me demande comment tu fais pour penser a tout ça… Tu verrais mes scénarios, je pense que tu rigolerais bien lol ! Donc il faut continuer ce genre de tuto, mais je pense que si tu veux attirer plus de lecteurs, il faut aussi faire des tutos plus simples.

          P.S. : Si tu pouvais faire un tuto sur les « tags », j’en serais ravi ! Avec tes tuto, j’arrive bien a comprendre, mais sinon, même entre la doc officielle et le forum Jeedom, je n’arrive pas a en voir un intérêt ou comment l’utiliser 🙁

  2. Bonjour, Très bon article par contre est ce que tu trouves le plugin « Network » efficace mois j’ai préféré le script que je trouve bien plus performant :

    #Script shell permettant de savoir si une adresse mac ou ip est présente sur le réseaux
    # Necessite arp-scan
    # $1 : mac ou ip
    # $2 : adresse
    # Il faut ajouter les droits à apache (www-data) d’éxécuter la commande arp-scan
    # Dans un terminal :
    # sudo apt-get install arp-scan fping #installation du paquet permetant de scanner le réseaux et du paquet pour faire un ping rapide
    # sudo visudo -s
    # Ajouter la ligne :
    # www-data ALL=NOPASSWD: /usr/bin/arp-scan
    if [ « $1 » = « mac » ]; then
    sudo /usr/bin/arp-scan -l -g –retry=5 -T $2 -t 800 | grep -i $2 | wc -l
    elif [ « $1 » = « ip » ]; then
    /usr/bin/fping -c1 -t50 $2 2>&1 | grep « min/avg/max » | wc -l
    fi

    ce script n’est pas de moi mais je n’arrive plus à trouver ma source (désolé pour l’auteur).

    1. Personnellement je trouve le plugin simple à utiliser et il faut le job.

  3. Tes Articles sont toujours intéressants 🙂
    J’ai pour ma part un système un peu similaire mais j’ai intégré une notion de « Sortie Poubelle ».
    Plus de bluetooth Plus de Wifi mais encore proche .
    (cela permet de gérer de façon plus fine mes alarmes et extinctions diverses)

    1. Merci pour le compliment.
      Dans mon systeme le faite de ne valider l’absence avec la géolocalisation permet de sortir les poubelles et de revenir sans que l’alarme ne s’active.
      C’est l’avantage de Jeedom chacun peut adapter le systeme à ses besoins.

  4. Bonjour, super ton commentaire, le seul problème, c’est que je suis apple donc la localisation je n’y comprend pas. autre soucis avec le wifi quand le portable est en veille, le ping me marque absent, pourtant se sont deux chose que j’aimerais utilisé. cest peut ètre le faite que je suis novice et j’y connais rien !

    1. Bonjour,
      Désolé je n’ai plus d’iphone depuis longtemps du coup je ne connais pas les spécificités. IL doit sûrement être possible de trouver quelque chose d’équivalent sur le forum de jeedom.

    2. Le plugin IOS Cloud te permet d’utiliser la géoloc d’un iphone. Personnellement, je trouve la géoloc sur iphone mieux implémentée, dans le sens ou c’est Jeedom, (via le plugin) qui va demander ta position, tandis que pour Android, Jeedom est tributaire du téléphone pour recevoir la donnée (Je le vis actuellement avec le telephone de mon amie qui n’envoie pas sa localisation (testé avec Jeebud et Tasker) ou alors très rarement, alors que je n’ai pas de soucis pour mon iphone.

      En passant, merci Guillaume de partager tes scénarios!

      1. Merci pour l’info.
        Regarde du coté des plugins pour les problèmes de non réception car je n’ai jamais eu de problème avec Jeebud ou domowidget mais j’en ai eu avec le plugin geotrav.

  5. Bonjour,

    Merci pour ce tutoriel très bien expliqué. 🙂

    Je n’arrive pas à faire un truc :

    Ce virtuel permet d’afficher l’état présent ou absent des membres et lors du survol de la souris sur un membre, le virtuel [Virtuel Présence Membre] correspondant apparaît.

    Lorsque je passe la souris sur les icônes je n’ai rien qui apparait.
    Comment as-tu fait ?

    Merci d’avance

    1. Bonsoir,

      Excusez moi j’ai trouvé la réponse dans le tutoriel…
      J’avais effectivement mal lu.
      Désolé du dérangement et encore bravo pour le tuto 🙂

      1. Bonsoir,
        Pas de problème c’est sur qu’il y a beaucoup d’informations dans l’article.

  6. Bonjour Guillaume,
    Super article et par extension, super site.
    Je te consulte de plus en plus à mesure que je comprends les rouages. Tu es toujours très pédago dans ton approche et selon moi tu es parmi les meilleurs site de vulgarisation de Jeedom.
    Sans oublier les bons plans qui ont le mérite d’êtres très réguliers.

    Je viens de me faire les dents sur ce tuto très complet. J’ai réussi à l’adapter à mon environnement mais j’avoue ne pas parvenir à mettre en oeuvre le Widget. Je ne comprends pas où le code doit être placé et ce qu’il renvoie. Mes connaissances en la matière sont faibles et peut-être pourrais-tu développer un peu plus ou m’orienter vers d’autres tutos.

    Encore merci pour ce blog

    David

    1. Bonjour et merci pour ton commentaire qui est très encourageant.
      Ok pour le widget je vais voir si j’ai le temps de faire un article plus complet sur le sujet. J’ai déjà publié un article pour personnaliser les widgets peut être que tu trouveras la solution.
      Bon courage et merci encore de lire mon blog et d’utiliser mes mes bons plans.

      1. Salut Guillaume,
        Encore merci pour tous tes tutos! Est-ce que par hasard tu aurais avancer sur l’article plus complet pour le widget? 😀
        Merci d’avance,

        1. Salut,
          Ou est-ce que tu bloques pour le widget ? Celui au passage de la souris ?
          Dit moi se que tu veux faire et ou tu en es ?

  7. Bonjour,
    Jolie article. La gestion de la présence peut paraitre simple, mais avec les « faux positifs » et les « vrais négatifs », cela donne du fils à retordre dans les scénarios. Sans compter les oublis de smartphones à la maison ou les batteries déchargées ;o)

    Juste une petite remarque qui peut être utile pour d’autres scénarios, il est parfois préférable de vérifier une « différence » qu’une « égalité ». exemple pour « SI #[Membres][Virtuel Présence Membre][Etat]# == 0 ALORS » du scénario « [PRÉSENT MEMBRE] ».
    En effet, la valeur de « #[Membres][Virtuel Présence Membre][Etat]# » est « null » (vide, néant, nada, rien, etc..) lors de la création dans le virtuel, la condition n’est donc jamais vrai pour la première exécution du scénario, alors qu’avec « SI #[Membres][Virtuel Présence Membre][Etat]# != 1 ALORS », cela fonctionnera à tout les coups.

    Bref, une minuscule remarque pour un très belle article, bravo !

    1. Bonjour,
      Merci pour la remarque c’est vrai que ça peut éviter quelques erreurs. A titre personnel je fais toujours des tests avant donc je n’ai pas de null mais pour un tuto ça peut être utile.

  8. Bonsoir Guillaume,
    Une fois de plus je dis BRAVO pour ce tuto sauf qu’il va me falloir je pense quelques heures voir peut être jours (et une boite d’aspirine) pour le décortiquer et mettre cela en œuvre chez moi même si j’avance plus avec Jeedom qu’il y a quelques mois 😉
    En tout cas j’adore tes tutos même si parfois je rame lool

    1. Ne t’inquiète pas si tu as besoin d’aide il ne faut pas hésiter à laisser un commentaire. Il faut y aller petit a petit et bien comprendre se que l’on fait pour ne pas être dans les choux.

  9. Salut guillaume !
    Alors je me lance dans des choses plus complexe qu’un simple IFTTT avec scénario de type action ON et OFF…. et j’ai besoin pour un allumage automatique de la lumière chez moi de ce genre de scénarios…
    J’avais fait mon centre de présence en fonction de ce site :
    https://www.ca-sert-a-quoi.com/articles/domotique/tuto-centre-de-gestion-de-presence/
    Mais tu en intégre un autre qui semble plus complet au final.
    Pense tu qu’il faille me recreer un virtuel ou puis je m’appuyer sur ce que j’ai déjà fait ?
    Ton tuto est très costaud j’espère pouvoir arriver au bout car il est très complet je trouve.

Laisser un commentaire

Merci à ceux qui ont contribué,
votre don contribuera à fournir encore plus de contenu de qualité.

Inscrivez-vous à la Newsletter de votre choix pour ne recevoir que ce que vous désirez.

Fermer le menu

Vous pouvez maintenant choisir quel type d’article vous voulez recevoir par Newsletter, pensez à mettre à jour votre abonnement.
Le formulaire de gestion d’abonnement est disponible uniquement pour les abonnés aux mailing listes.