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 !