Détection de présence sur iPhone (Jailbreaké)

En domotique, il peut être intéressant de pouvoir détecter la présence de quelqu’un pour exécuter des scénarios. Cette détection peut naturellement se faire par le biais du téléphone portable, surtout si c’est un smartphone.

Mais si c’est chose facile avec les smartphones Androïd (avec Tasker ou AutomatIt), ça l’est beaucoup moins avec un iPhone !

Plusieurs pistes

  1. Utiliser le Bluetooth (attente de mon shield Arduino BT pour tester)
  2. Utiliser la géolocalisation (fonctionne déjà en PHP pour iOS/iCloud, pour JS en cours et ensuite adaptation pour Google/Android)
  3. Utiliser le réseau Wifi de la maison.

Pour cette troisième piste, il y a 2 méthodes

  1. le ping (fonctionne bien sur tout les téléphone, mais l’iPhone se coupe du réseau au bout d’un certain temps en veille) ;
  2. le lancement d’URL sur le téléphone quand il attrape le réseau wifi de la maison.

Le but de ce tutoriel est donc de permettre la détection d’un iPhone (si possible dans la poche = rien a faire) pour identifier la présence ou l’absence de quelqu’un à la maison et lancer des scénarios.
Il portera donc sur l’exécution de scripts (et donc le lancement d’URL) depuis un iPhone (Jailbreaké) lors de l’accrochage ou de la perte d’un réseau wifi (celui de la maison).

Procédure

On commence donc par installer (via Cydia) :

  1. SBSettings, qui permet d’activer des toogles (actionneurs)
  2. SBSchedule qui permet d’activer des toggles SBSettings sur des événements (heure, niveau batterie, accroche wifi, etc..)
  3. Pour l’accroche du Wifi, il faut la version payante de SBSchedule, mais franchement, étant donné le manque que comble cette App sur iPhone, ça vaut le coup de payer 3$.
    • SB Settings Scripty, qui permet de lancer un script depuis un toggle (celui-la, je l’aurai cherché un moment! Video : Custom SBSettings Toggles With Scripty (insanelyi) et source Cidya : http://hitoriblog.com/apt/ ou http://repo.insanelyi.com/ ) ;

    • wget (paquet console) qui permet de lancer une URL depuis un script ;
    • Insomnia qui permet de garder la connexion wifi active même en veille.

Ouf! la boucle est bouclée.

Pour ceux qui ont pas encore lâché et qui connaissent un peu le JB sur iPhone, le seul truc « compliqué », c’est de configurer Scripty (voir video ci-dessus).
Il faut passer par un éditeur de texte (iFiles ou MobileTerminal sur iPhone ou se connecter en SSH (Putty) à l’iPhone pour modifier les fichiers SH :
Dans notre exemple, il faut aller mettre ca dans com.hitoriblog.Scripty01-launch-when-toggle-is-off pour lancer un script de présence (attention, On pour l’absence et OFF pour la presence) :

1
2
3
#!/bin/sh
touch /var/mobile/Library/Preferences/com.hitoriblog.Scripty01.flagfile
wget "http://url_domotic_presence"

(idem dans com.hitoriblog.Scripty01-launch-when-toggle-is-on pour la présence)
Note : Insomnia consomme un peu de batterie. Perso, j’en ai profité pour paramétrer le toggle Insomnia en off dans SBSchedule aux horaires de bureau. Histoire d’économiser de la batterie.

Author: Franck Wehrlé

Intéressé par la technique en général et adepte du DIY (Fais le toi-même), je m'adonne à la domotique à mes heures perdues.

Share This Post On

7 Comments

  1. J’ajouterais qu’il faut une IP fixe pour que le système fonctionne parfaitement ;)

  2. Bonne remarque. Un réservation FIXE de bail DHCP fait l’affaire en quelques cliques sur sa Box adsl.

  3. Une autre solution qui fonctionne chez moi :
    Flasher le point d’accès avec DDWRT et rediriger le syslog server vers le système domotique.
    Le syslog server utilise une connexion UDP sur le port 500.
    Le system domotique recevra une info à chaque connexion/déconnexion de chaque adresse MAC sur le point d’accès.
    L’avantage, c’est qu’avec plusieurs point d’accès on peut savoir approximativement ou se trouve chaque appareil dans la maison.

  4. @Alex, pourrais-tu développer ? Car activer un syslog serveur Ok, mais comment le contrôleur domotique va scruter ou récupérer l’information ? Sur une Vera OK mais les autres ???

  5. Le syslog de DDWRT envoie des trames du genre :
    Nov 23 11:08:02 hostapd: ath0: STA AB:CD:EF:GH:IJ:KL IEEE 802.11: deauthenticated due to inactivity\x0A
    sur le port UDP 514 (et non le 500:p)

    Il faut, bien sur, avoir un systeme domotique capable d’écouter une connexion entrante UDP.
    Ensuite un peu de parsing pour recupérer l’adresse MAC et l’évènement qui nous intéresse et déclencher une action.

  6. Ok, mais un contrôleur grand public saura faire de l’écoute ponctuelle en montant un serveur socket, mais mettre en place un service d’écoute sur le contrôleur sera pas facile à mettre en place, sauf sur la Vera me semble-t’il. Je vais regarder plus avant, car un de mes serveurs Synology est serveur maître Syslog de mon infrastructure. Je crois qu’il serait plus simple de faire l’analyse et la détection sur le serveur Syslog et d’activer une action distante (requête http par exemple) sur le contrôleur.

  7. peut être qu’un script DDWRT peut aussi se charger de ça.

Laisser un commentaire