Domotique : Partie 7 – Détection de présence grâce au wifi de son téléphone

Cet article fait partie de la série Domotique (18 articles au total)

Un nouvel article domotique aujourd’hui où on ne manipulera pas de matériel ! Ce que je vous propose c’est d’utiliser le smartphone au fond de votre poche pour que votre système domotique prenne conscience de votre présence. Ici pas de détecteur de mouvement, pas de caméra IP, seul votre beau téléphone est nécessaire. A l’heure où j’écris ces lignes, cette astuce ne marche pas avec les iPhones mais promis je vous cherche une alternative ;)

Cet article fait partie d’une série dédiée à la domotique dont vous pourrez trouver le sommaire au bas de cet article.

Le principe de base

Sur mon smartphone, le wifi est toujours allumé. Au grès de mes déplacements, mon téléphone se connectera chez moi, à mon travail, chez certains de mes amis, etc… Étant donné que le wifi a une portée (dans le meilleur des cas) maximale de 100 mètres, on peut donc supposer que si on est connecté à son wifi domestique, alors on peut considérer que l’on est chez soi. Le tuto du jour vous montrera donc comment faire pour que Domoticz vérifie régulièrement si votre téléphone est connecté au wifi ou pas.

Quel intérêt que Domoticz sache si on est là ou pas ?

Cela permet tout simplement de mettre en scène des scénarios plus ou moins complexes pour par exemple :

  • Diminuer le chauffage quand personne n’est à la maison
  • Éteindre les lumières oubliées lors du départ des occupants
  • Simuler une présence à domicile quand personne n’est là
  • Etc…

La mise en œuvre

Pour mettre cette mécanique en œuvre, voici le scénario que nous allons suivre aujourd’hui :

  1. Créer un interrupteur virtuel qui indiquera si oui ou non quelqu’un est présent au domicile
  2. Créer un script qui modifiera l’état de l’interrupteur virtuel en fonction de la présence du téléphone sur le réseau wifi

Les captures d’écrans et les explications sont faites à partir de la version V2.2151 de Domoticz, affichée en anglais.

 1. Création de l’interrupteur virtuel

C’est la première étape, on va créer l’interrupteur qui matérialisera la présence à domicile. Pour cela rien de très compliqué ! Dans Setup > Hardware, cliquer sur le bouton « Create Virtual Sensor » sur le device « Dummy » (si vous ne l’avez pas, ajoutez le via le menu déroulant).

Création de l'interrupteur virtuel
Création de l’interrupteur virtuel
Sélectionnez le type « Switch« 
Sélection du type "Switch"
Sélection du type « Switch »

Après avoir cliqué sur OK, le périphérique sera visible dans l’onglet Setup > Devices où il faudra cliquer sur la petite flèche verte associée.

02_Ajout_interrupteur
On retrouve notre nouvel interrupteur rattaché au matériel « Dummy »

Choisissez lui un petit nom, dans mon cas « Presence » (oui j’ai peur des accents, c’est mon instinct de développeur qui me pousse à les fuir ;) Votre magnifique interrupteur apparaitra alors dans l’onglet « Switches ». Pour des raisons d’esthétisme, j’ai choisi d’en changer le type en « Motion Sensor » et de l’afficher sur mon Dashboard (c’est purement facultatif bien entendu). Voici ce que cela donne :

Mon interrupteur virtuel "Presence" maquillé en capteur de mouvement
Mon interrupteur virtuel « Presence » maquillé en capteur de mouvement

Il va maintenant falloir passer aux choses sérieuses : le script qui va altérer l’état de cet interrupteur.

2. Création du script

Le rôle de ce script est assez simple : exécuté périodiquement, il va essayer de joindre le (ou les) smartphone(s) du foyer. S’il y parvient, il bascule l’interrupteur virtuel à « On » et ne vérifiera que 10 minutes plus tard si le téléphone est toujours là. Si aucun smartphone n’est détecté, le script bascule l’interrupteur virtuel à « Off » et attendra 1 minute avant d’essayer de joindre à nouveau le(s) smartphone(s).

Pré-requis : connaitre l’adresse IP de son téléphone. Si vous ne l’avez pas déjà fait, je vous conseille de paramétrer votre box/routeur pour que cette adresse IP ne change jamais . Elle est généralement de la forme 192.168.xxx.yyy. Dans mon exemple, le script est paramétré pour 2 téléphones.

Le script doit être placé dans le répertoire scripts/lua de Domoticz. Le fichier du script doit obligatoirement commencer par « script_time_ » et porter l’extension « .lua« . J’ai par exemple nommé le mien « script_time_presence.lua« . Voici le contenu du script :

-- Alexandre DUBOIS - 2014
-- Ce script vérifie la présence de 2 téléphones sur le réseau pour savoir si quelqu'un est là.
-- La vérification est effectuée une fois par minute tant qu'aucun téléphone n'est à portée,
-- puis une fois toute les 10 minutes quand au moins un téléphone est connecté pour ne pas trop stresser sa batterie.

commandArray = {}

--Cette fonction calcule la différence de temps (en secondes) entre maintenant
--et la date passée en paramètre.
function timedifference (s)
  year = string.sub(s, 1, 4)
  month = string.sub(s, 6, 7)
  day = string.sub(s, 9, 10)
  hour = string.sub(s, 12, 13)
  minutes = string.sub(s, 15, 16)
  seconds = string.sub(s, 18, 19)
  t1 = os.time()
  t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
  difference = os.difftime (t1, t2)
  return difference
end

--Si le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence
if (otherdevices['Presence']=='Off' or (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600)) then
	ping_success_tel1=os.execute('ping -c1 192.168.1.20')
	ping_success_tel2=os.execute('ping -c1 192.168.1.21')
	
	if ping_success_tel1 or ping_success_tel2 then
	  commandArray['Presence']='On'
	else
	  if otherdevices['Presence']=='On' then --On ne passe l'interrupteur virtuel à Off que s'il est sur On.
             commandArray['Presence']='Off'
          end
	end
end

return commandArray

Bien sûr il faudra remplacer les adresses IP ligne 26 et 27 de mon script par celles de vos appareils :)

Un cas pratique : simulation de présence en cas d’absence

Histoire d’illustrer l’intérêt de ce « détecteur de présence », voici une implémentation d’un scénario de simulation de présence. Celui-ci n’est pas très évolué mais il « fait le boulot ». Grossièrement : si personne n’est à domicile et que nous somme samedi, on allume les lampadaires du salon vers le crépuscule et on les éteint aux alentours de 23h30 (à chaque fois, on spécifie une fourchette de 15 minutes pour chaque changement d’état).

J’ai utilisé le créateur de scénarios qui est disponible dans le menu via : Setup > More Options > Events

Celui-ci permet de « programmer » sans avoir à écrire de code informatique. On assemble simplement des briques pour indiquer les conditions à tester et actions à effectuer. Une fois terminée, cela donne ça :

Scénario de simulation de présence
Scénario de simulation de présence

Libre à vous de l’adapter ensuite à vos besoins :)

Les limites du système

Cela fait plusieurs mois que j’utilise cette méthode et je suis étonné par sa fiabilité. Cependant quelques ombres au tableau subsistent ! Les iPhones coupent automatiquement leur wifi dès que l’écran s’éteint, ce qui empêche d’utiliser cette astuce. D’autres smartphones font probablement de même ! Qui plus est, ceci fonctionne si chaque habitant de la maison possède un smartphone, ce qui ne sera pas forcément le cas. Enfin, nos beaux terminaux ont un point faible : leur batterie. Attention donc aux scénarios que vous programmez derrière, en cas de panne de batterie vous pourriez avoir de mauvaises surprises !

 

Tous les articles de la série Domotique

Domotique : Partie 7 – Détection de présence grâce au wifi de son téléphone

60 réflexions au sujet de « Domotique : Partie 7 – Détection de présence grâce au wifi de son téléphone »

  1. Très bon article ! Félicitations pour tes réalisations et surtout pour ton partage.
    L’idée est très bonne, cela permettrait peut être avec une tempo quelque part d’allumer les lumières en rentrant à la maison la nuit ..?

  2. Bonjour Hervé,

    Ce que tu proposes est tout à fait possible ! A noter que le script ne vérifiant qu’une fois par minute si au moins un téléphone est connecté, il peut s’écouler quelques secondes entre la connexion du téléphone au réseau wifi et la prise en compte dans Domoticz !

    Bonne journée,

    Alexandre

  3. Dans le même genre, j’utilise l’application MacroDroid pour envoyer des informations de mon téléphone vers domoticz, par exemple, comme je charge mon téléphone la nuit, et que je le débranche quand je me lève, dès qu’il n’est plus branché, il informe Domoticz via l’api que je suis debout. (allumage lumières s’il fait encore nuit, allumage télé et Freebox sur la bonne chaine, etc).

  4. Hervé, si tu es sous Android, MacroDroid te permet d’envoyer une requête à Domoticz dés que ton téléphone détecte ton réseau wifi, du coup ça permet une détection plus rapide.

  5. J’utilise un script équivalent pour superviser l’ensemble du matériel informatique a la maison et m’envoyer des notifications lorsqu’il y a un problème (j’ai mis un cron chaque 5 min, c’est un peu moins violent que toutes les minutes) Idem pour les téléphones portable avec le wifi même si je n’ai pas encore trouvé de réelle utilité avec ceux-ci… Allumer aléatoirement des lumières le soir en cas de non présence est un scénario intéressant. Par contre avec plusieurs Iphone a la maison la tâche se complique!
    Je vais tester MacroDroid qui a l’air sympa! Comment faites vous pour spécifier une chaîne lors du démarrage de votre freebox TV?

  6. @Folliot comment tu fais pour envoyer une infos de Macrodroid vers Domoticz ? J’ai plus l’habitude d’utiliser Tasker et j’ai pas trouvé l’astuce dans Macrodroid pour faire ça ?

  7. Très bien tout ca. Perso pour android, j’utilise llama (macro gratuit). Et un scénario intéressant est l’allumage ou l’extinction automatique du wifi (ou autre) selon qu’on est chez nous ou pas (da base, dans llama, il y a une détection via les antennes 3G des lieux travail, domicile…)
    Ceci permet d’économiser les batteries (éteint le wifi à l’extérieur).

  8. @Alex merci pour ce tuto je suis en train démarrer sous Domoticz, et je voudrais utiliser ton astuce mais je ne trouve pas « Switch » dans la liste des choix ??? (voir photo) pic.twitter.com/XcffMWZP9h

  9. Bonjour,
    Pour répondre à D3smo, il faut se rendre dans la section « Interrupteurs » et en créer un manuellement en indiquant en type de materiel la carte virtuelle.
    Type On/off et laisser les valeurs des autres champs par defaut.
    Voilà :-)

  10. Merci beaucoup, en particulier pour le script qui est juste super pour un petit couple!

  11. Bonsoir,
    merci beaucoup pour ce script, je viens de l’installer sur mon système et tout fonctionne correctement.

  12. Bonsoir,
    Je débute avec Domoticz. Le script marche très bien, mais dans le ‘log’ de Domoticz ,il y a cette erreur :’ Error: Warning: lua script /home/pi/domoticz/scripts/lua/script_time_presence.lua has been running for more than 10 seconds’

    Est ce normal ou ai-je mal configuré Domoticz

    Au revoir philippe

  13. Un oubli dans mon commentaire : L’erreur est ‘active’ lorsqu’il n’y a plus de liaison avec le smartphone

    Philippe

  14. J’ai le même problème que Philippe, le script fonctionne parfaitement mais dans le log de Domoticz j’ai

    Error: Warning: lua script /home/pi/domoticz/scripts/lua/script_time_presence.lua has been running for more than 10 seconds’

    Quand un device n’est pas présent, je pense que le ping prends plus de temps que 10s pour répondre et du coup y’a ce warning dans le log. Ce n’est pas bloquant mais c’est toujours génant d’avoir des Warning dans le log. Une idée ?

  15. Salut,

    Merci pour ce beau tutoriel de détection de présence.
    Plusieurs problèmes liés à l’ip persistent : comme par exemple :
    – si les téléphones se trouvent en mode DHCP, cela crée un souci.
    Ou encore si l’ip d’un autre appareil a pris l’ip de ton test …

    Bref, je me suis inspiré de ton script mais alors j’effectue le test via la présence de du Mac adresse dans le réseau.

    1) je vérifie le format de du Mac
    2) j’effectue une recherche de la mac sur le réseau nmap) si je trouve le mac associé à une IP je ping l’Ip. L’avantage c’est que les informations les macs restent un certain temps dans la table ARP (arp -a), donc même si le téléphone se coupe, tu trouveras la mac (pas pendant une heure mais une minute, le temps d’intervalle du test). S’il ne trouve pas le mac adressé dans le réseau, il génère une Ip bidon et renvoie un ping error. Si besoin du code, tu as mon adresse, sous linux / Raspberry.

    Ma config : Arduino nano, Rasberryp, sensor AM2301, sensor lux … et un E/R 433Mhz (pilotage de Chacon via GPIO et sonde via Arduino).

    Bonne continuation,
    OneKid

  16. Pour aider les autres commentaires et le problème de la latence du ping à 10 secs …
    Voici la solution :

    -w1 -W1

    Donc ping -c1 -w1 -W1 ton IP

    man ping
    MAN est ton amis,

    Bonne journée,
    OneKid

  17. Il y a aussi l’option bluetooth qui fonctionne très bien pour détecter la présence du téléphone ou même d’une montre connectée !

  18. Bonjour,
    Très beau script qui fonctionne bien, merci !
    Une question cependant; j’ai créé un event tout simple qui allume une lampe lorsque domoticz détecte la présence du wifi de mon téléphone, de la forme:

    If [Presence] = On
    Do Set [Lampe] = On
    Set [Lampe] = Off After [20] seconds

    Et la lampe s’allume bien, s’éteint bien au bout de 20 secondes, sauf que dès que domoticz voit que je suis connecté de nouveau au wifi, il me réallume la lampe non stop. Je comprends bien pourquoi, mais je cherche une manière propre d’éviter ceci.
    Une idée ?

  19. J’ai trouvé la réponse tout seul, il faut créer un flag, une variable comme ceci:

    If [Presence] = On And IsUserPresent=True
    Do Set [Lampe] = On
    Set [Lampe] = Off After [20] seconds
    Set IsUserPresent=False

  20. Bonjour à tous,

    Tout fonctionne très bien, ce script permet de faire beaucoup de chose. Mon problème, c’est que j’essaye de l’appliquer à la XBOX, le problème est que la XBOX a bien une adresse IP mais impossible de la « pinguer », même XBOX allumé bien sûr.Quelqu’un a t il une solution ? une idée…

    Merci

  21. bonjour’ je me met a la domotique et j’ai voulu tester votre script
    voici le message d’erreur renvoyé par domoticz
    2016-01-28 21:59:00.113 Error: EventSystem: /home/pi/domoticz/scripts/lua/script_time_presence2.lua:43: expected near ‘commandArray’

    si quelqu’un peux m’aider a resoudre ce probléme…
    merçi d’avance!
    j’ai cherché mais pas trouvé ;-(

  22. Très bon tuto, et très pratique, Bravo !
    J’ai juste un soucis, effectivement lorsque le smartphone de ma copine se met en veille, il coupe le wifi, et donc le script ne le ping plus.
    Je cherche désespérément des petits porte clés wifi afin de remplacer mes smartphones, dans le but d’éviter de toujours devoir laisser le wifi de mes smartphones activés.
    En gros, un simple porte clé connecté qui s’attribue une adresse IP lorsque je rentre chez moi afin de le ping et déclenché le script.

    Je pense que cela existe mais il en existe une flopée et je ne sais lequel choisir, si quelqu’un a une idée …

    Merci d’avance

  23. @Vivioune: il n’y aura pas une confusion avec les porte clés bluetooth LE? Car des portes clé wifi, il n’y en pas une « flopée » (perso, je n’en vu aucune).

  24. Bonjour Vivioune,
    Comme vido le mentionne, je pense que tu fais référence à des porte-clés Bluetooth car le wifi consomme trop d’énergie pour pouvoir en faire un badge qu’il ne faille pas recharger trop souvent. Si c’est bien de porte clés bluetooth que l’on parle, je ne suis pas sûr que tu obtiendras de super résultats car la portée étant limitée à quelques mètres, tu risque d’avoir souvent des décrochages. Est-ce que tes smartphones sont des modèles Android ? iPhones ? Je sais qu’au lieu de se baser sur le wifi, certains utilisent la localisation du téléphone. Cette stratégie permet aussi de définir des scénarios plus évolués (ex : quand j’arrive dans un rayon de moins de X kilomètres de mon domicile, alors je remonte le chauffage à N degrés). Tu n’es pas obligé d’utilisé le GPS (très précis mais très gourmand en énergie), la triangulation GSM suffit.

    Cela pourrait faire l’objet d’un article, tu ne dois pas être le seul intéressé :)

    Alexandre

  25. Bonjour, merci pour vos réponses.
    J’ai du confondre oui, je suppose qu’un porte clé Bluetooth suffirait, pas obligé d’avoir une longue portée.
    En général, quand l’on rentre chez soi, on pose nos clés toujours au même endroit, il suffirait donc d’avoir l’émetteur à portée.
    Mais la quasi totalité des porte clés que je trouve sont pour retrouver ses clés (ou autres objets) via smartphone.
    Et je n’ai pas trouvé de tuto non plus expliquant comment détecter ou non la présence en Bluetooth.
    Enfin bref, pour le moment le smartphone (android) en wifi fait le boulot quand il le veut bien et me suffit.

    Bonne journée

  26. J’ai voulu dérouler le même scripts plusieurs fois afin d’avoir un script par appareil pingé.
    Pour une raison que je n’identifie pas, seul mon premier script semble être exécuter.
    Où peut être ma boulette?

  27. Merci pour ce tuto. Si on n’a pas le wifi activé tout le temps sur son téléphone on pourrait tout à fait détecter la présence d’une voiture avec un ESP8266 (module wifi le plus lowcost !) pour savoir si Madame est là. Sans parler d’espionnage ça peut des fois servir de savoir si quelqu’un est à la maison. Je vais l’implémenter :) Site très sympa, merci à toi !

  28. Merci pour le tuto ! J’ai testé tout ça mais je trouve que le ping pose des problèmes de freeze sur une Raspberry (en effet, la commande ping est bloquante) et même sur Android, certains smartphones ne répondent pas au ping quand l’écran est éteint.

    J’ai trouvé une autre solution : L’API Freebox (bon faut être chez Free, bien entendu ^^). Cela permet d’interroger la freebox régulièrement via des commandes http pour récupérer l’état d’un host.
    Avantages :
    – Très rapide (la freebox répond tout de suite, ça ne bloque pas)
    – Peut se baser sur l’@Mac de l’appareil (pas de DHCP avec baux statiques)

    J’ai réalisé un script en m’inspirant de l’article qui permet d’interroger la freebox toutes les 15 secondes (ça rame pas :) ) afin d’être sur que l’appareil soit détecté au plus tôt (pour couper l’alarme !), ça fonctionne au poil.

  29. Bonsoir hsm,

    Effectivement voilà une belle idée ! Il faut que je me renseigne si je ne peux pas faire la même chose avec DDWRT :)

    Alexandre

  30. Bonsoir. Tout d’abord bravo pour vos articles, ils sont claires et concis, avec des mises en pratique, un régal !

    J’aurais cependant une question. Est il possible de migrer Domoticz vers un système Android ? (Je pense a un téléphone dédié, relié en wifi au rapsberry [la dernière mouture inclut un chipset wifi et bluetooth], téléphone qui servirait de « télécommande centralisée » de la maison)

    Merci de votre réponse, et bonne soirée !

  31. Bonsoir Freddo,
    Je ne pense pas que Domoticz puisse tourner direcetement sur le téléphone, mais rien ne t’empêche de le faire tourner sur le RaspberryPi et d’en afficher le panneau de contrôle sur ton téléphone ou ta tablette pour en faire une télécommande centralisée :)
    Alex

  32. Merci de ta reponse aussi rapide. J’ai vu sur un site que l’appli « dromotica », pour android, etait capable de rapatrier les infos de Domoticz, ça a l’air assez clair d’utilisation. Etant en train d’acquérir ma maison, je ne pourrais vraiment tester la domotique que quand j’aurais déménagé et entrepris les travaux, mais ce domaine me passione.

    Nouvelle question. Est il possible d’actionner un verrou « électrique » d’une porte grace a Domoticz, ou a defaut, grace a la technologie NFC ?

    Ma question fait suite au constat que j’ai fait quand je suis allé chez un ami sur Lyon, la porte de l’immeuble s’ouvre avec un badge, ce qui est pratique quand on a les bras chargés. J’ai donc eut l’idée de récupérer deux anciens smartphones compatibles NFC, et de m’en servir comme clefs de maison. (Bien sur il faut que le système puisse fonctionner avec une clef mécanique)

    Ces smartphones pourront également servir de télécommandes centralisées pour la maison, si tant est qu’ils aient de la batterie.

    Merci de ta reponse, cordialement.

  33. Bonjour
    je suis Mr Christophe
    je cherche des appareils électrique de sécurité wifi qui sont capable de verrouiller les téléphones lors d’un intrus sur le lieu (visiteur) une fois que le visiteur qui a le téléphone qui le lieu le téléphone se remet en marche soi-même ? donc ce automatique, une fois arriver la où se trouve l’appareil électrique de sécurité le téléphone est verrouiller, dès le visiteur qui l’endroit le téléphone se met en marche soi-même

  34. Bonjour Christophe samba,

    Ne suis pas sur de comprendre ta question : Marmotte, Chocolat,visiteur, appareil, automatique, et bien sur sécurité ???
    il est certainement possible de clarifier et de mieux décrire tes idées

  35. Bonjour,

    Tout d’abord merci pour ton site et tes articles vraiment bien fait.
    Je souhaitais récupérer ton script d’indicateur de présence mais impossible de récupérer le code.

    Peux tu le débloquer ou me l’envoyer par mail.

    Merci d’avance

  36. effectivement, on ne peut plus récupérer le code sur la page, merci pour le liens github pourvus qu’il reste valide si le problème de la page n’est pas résolus .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *