MAJ: Géolocalisation sur l’eedomus avec un smartphone

Lors du test de l’eedomus, je vous avais brièvement parlé de la possibilité d’ajouter un traceur GPS afin de suivre la position de sa voiture, ou même d’une personne.

Le traceur GPS n’est pas encore disponible, en revanche, je me suis amusé un peu avec l’API de l’eedomus, et j’ai découvert un peu par hasard qu’il était possible d’envoyer des coordonnées GPS à la box via cette API, et ainsi de « simuler » un traceur GPS.

La question ensuite était de savoir comment récupérer automatiquement sa position GPS pour l’envoyer à l’eedomus. J’ai fait quelques tests, je vous livre aujourd’hui ma petite méthode, qui fonctionne plutôt bien pour utiliser la géolocalisation sur l’eedomus.

 

I. Configuration sur l’eedomus

 

Il va d’abord falloir créer un device pour la géolocalisation. Pour cela on va dans la configuration, et on ajoute un autre périphérique, puis « Traceur GPS »:

 

 

Ensuite, on le configure. On lui donne un nom, et on met un numéro de mobile « bidon » pour valider la configuration (ce numéro est normalement le numéro de traceur qui est censé envoyer les informations, mais qui n’aura aucune utilité dans notre cas):

 

 

On relève bien le code API, qui nous servira plus tard. On valide, et c’est fini pour la partie eedomus.

 

II. Géolocalisation sur Smartphone

 

Pour la géolocalisation, nous allons utiliser le service Latitude de Google, et une petite application Latitudie sur iPhone, ou sur Android.

Ce service de Google permet de se situer entre amis, pour se retrouver, etc… Comme tous les services Google, il dispose d’une API et de fonctions très sympas, souvent très utiles en domotique :p

Il faut donc commencer par vous créer un compte gratuit sur Google Latitude. Une fois que c’est fait, il faut se rendre dans les paramètres de l’application (via la petite roue crantée à droite). Tout en bas, on peut trouver un lien « Informations destinées aux développeurs »:

 

 

Cliquez dessus, vous obtiendrez un écran avec trois liens:

 

 

Dans les trois liens, vous pourrez voir un paramètre user=NUMERO. Relevez ce numéro, qui sera utilisé plus tard.

Maintenant il n’y a plus qu’à installer Latitudie sur le smartphone. Cette petite application est payante (1.59€), mais va bien nous faciliter la vie. Je l’utilise pour ma part sur iPhone. Il suffit de la télécharger, de la lancer, et d’entrer les identifiants de son compte Google créé précédemment. Tournant ensuite en tache de fond, elle va régulièrement mettre à jour votre position GPS sur votre compte Google Latitude. Cela a bien sûr un petit impact sur votre batterie, mais assez négligeable, le GPS ne fonctionnant pas tout le temps, et les coordonnées n’étant envoyées que lorsqu’il y a un mouvement.

 

 

C’est tout ce qu’il y a à faire avec cette application, relativement simple.

Voilà: nous avons donc un téléphone qui remonte notre position GPS régulièrement sur notre compte Google.

 

III. Envoi des infos à l’eedomus

 

Il n’y a plus qu’à faire en sorte d’envoyer ces coordonnées à l’eedomus.

Pour cela, j’ai créé un petit script VBS:

‘Entrez vos paramètres
API_USER = « VOTRE_API_USER »
API_SECRET = « VOTRE_API_SECRET »
PERIPH_ID = « VOTRE_ID_PERIPHERIQUE »
USER_GOOGLE = « VOTRE_ID_UTILISATEUR_GOOGLE »

Dim xmlHTTP
Set xmlHTTP = CreateObject(« Microsoft.XMLHTTP »)

‘ On récupère les coordonnées sur Google Latitude
sSource = « https://www.google.com/latitude/apps/badge/api?user= » & USER_GOOGLE & « &type=atom »
bGetAsAsync = False
xmlHTTP.Open « GET », sSource, bGetAsAsync
xmlHTTP.Send
sHTMLPage = xmlHTTP.responseText
debut = InStr(sHTMLPage, «  »)
fin = InStr(sHTMLPage, «  »)
coordonnes = Mid(sHTMLPage, debut+14, fin-(debut+14))
coordonnes = Replace(coordonnes, chr(32), « , »)

‘ On envoie les infos à eedomus
sTarget = « http://api.eedomus.com/set?action=periph.value&periph_id= » & PERIPH_ID & « &value= »& coordonnes & « &api_user= » & API_USER & « &api_secret= » & API_SECRET
xmlHTTP.Open « GET », sTarget, bGetAsAsync
xmlHTTP.Send

 

Vous pouvez télécharger le script ici.

Il suffit de compléter les 4 premières lignes avec vos informations personnelles. L’API_USER et l’API_SECRET sont les codes API demandés à l’eedomus dans votre compte:

 

 

Vous les recevez par email.

Le PERIPHERIQUE ID est l’ID du traceur GPS créé au tout début sur l’eedomus.

Enfin, votre USER_GOOGLE est le numéro relevé dans les liens Google précédemment (ne pas oublier le « – » qu’il peut parfois y avoir devant l’ID donné par Google).

Il n’y a plus qu’à faire en sorte que ce script se lance régulièrement pour mettre à jour les informations sur l’eedomus. Pour cela, j’ai utilisé une simple tache planifiée sur mon ordinateur Windows à la maison, qui tourne 24/24 (serveur qui fait office de NAS, etc…). Une mise à jour toutes les 10 min est suffisante pour mon utilisation, mais vous pouvez régler ce délai comme vous l’entendez:

 

 

Voilà, c’est fini !

 

IV. Résultat

 

L’eedomus est maintenant mise à jour automatiquement à chaque déplacement:

 

 

Les lignes rouges indiquent les déplacements entre chaque point.

Et via la loupe, vous avez accès à l’historique des déplacements:

 

 

Pour que cela fonctionne en permanence, il suffit d’avoir l’application Latitudie qui tourne en tache de fond sur votre téléphone, rien de plus :D

Cette petite astuce, qui vous permet d’avoir un traceur à pas cher grâce à votre smartphone, fonctionne plutôt bien, je l’utilise depuis une petite semaine. Par contre, il n’est pas possible pour le moment de faire beaucoup plus, ce module étant en cours de développement sur l’eedomus.

Ainsi, la fenêtre de géolocalisation n’est pas redimensionnable, impossible de dézoomer, zoomer, etc… La consultation n’est donc pas très facile.

Ensuite, et c’est sans doute le point le plus important: ce traceur n’est pour le moment pas très exploitable dans les scénarios. En effet, on peut sélectionner le traceur, mais ensuite nous n’avons que des règles » égal à », « devient égal à », etc… Etant donné que les coordonnées GPS changent souvent, à quelques mètres près, il est très difficile de comparer la valeur du traceur à la position exacte de sa maison, par exemple. Il faudrait pour cela avoir de nouveaux contrôles, comme par exemple quand le traceur se trouve dans un rayon de 500m de la maison, ou à plus de 1km, etc… Là les utilisations seraient nombreuses: activation automatique de l’alarme quand on se trouve à plus d’1km par exemple,  ouverture automatique du portail quand on arrive dans un rayon de 500m, etc… Les utilisations possibles font un peu rêver :D On cherche depuis longtemps un tel type de localisation: avec des puces RFID, en « pinguant » son téléphone pour savoir quand on arrive chez soi, etc… Jusqu’ici aucune n’étant franchement très fiable. La géolocalisation pourrait bien être LA solution. Etant déjà plus ou moins implémentée sur l’eedomus, on compte donc sur l’équipe eedomus pour de futurs développements dans ce sens ;-)

Quoiqu’il en soit, vous avez là une méthode pour vous amuser à géolocaliser votre mobile. Une méthode qui peut être adaptée assez facilement, pour utiliser par exemple un script PHP à la place d’un VBS (pour le lancer depuis un NAS autonome, par exemple). L’idéal serait d’avoir une application sur le téléphone qui fasse la requête HTTP à l’eedomus directement, sans avoir à passer par un script extérieur. Des projets sont en cours là dessus, on en reparlera plus tard ;-)

 

V. Mise à jour du 27/02 à 23h: utilisation dans les scénarios

 

Bon, je n’ai pas pu me résoudre à juste avoir la carte affichée, sans pouvoir utiliser les infos dans des scénarios :p

Quitte à devoir utiliser un script externe, autant qu’il travaille ! Après quelques recherches sur Google, j’ai donc trouvé comment calculer la distance entre deux coordonnées GPS, et adapter mon script et ma configuration eedomus en conséquence.

J’ai donc créé en plus un nouveau device d’état sur l’eedomus:

 

 

Là aussi, il faudra relever son ID, utile pour plus tard.

Ensuite, je lui ai ajouté trois valeurs:

 

 

Le système sera capable de savoir si je suis chez moi, au travail, ou ailleurs.

Ensuite, j’utilise mon script vbs adapté (quui vient donc remplacé le précédent vu plus haut, dans une tache programmée):

 

‘Entrez vos paramètres
API_USER = « API_USER »
API_SECRET = « API_SECRET »
PERIPH_ID = « ID DU TRACEUR GPS »
PERIPHDIST_ID = « ID DU MODULE ETAT »
USER_GOOGLE = « USER_GOOGLE »

‘Entrez les coordonnées de votre domicile
LAT_MAISON = 48.606765
LONG_MAISON = 1.167048

‘Entre les coorodnnées de votre lieu de travail (si vous souhaitez pouvoir l utiliser)
LAT_TRAVAIL = 49.817394
LONG_TRAVAIL = 2.959

Dim xmlHTTP
Set xmlHTTP = CreateObject(« Microsoft.XMLHTTP »)

‘ On récupère les coordonnées sur Google Latitude
sSource = « https://www.google.com/latitude/apps/badge/api?user= » & USER_GOOGLE & « &type=atom »
bGetAsAsync = False
xmlHTTP.Open « GET », sSource, bGetAsAsync
xmlHTTP.Send
sHTMLPage = xmlHTTP.responseText
debut = InStr(sHTMLPage, «  »)
fin = InStr(sHTMLPage, «  »)
coordonnes = Mid(sHTMLPage, debut+14, fin-(debut+14))
coordonnes = Replace(coordonnes, chr(32), « , »)

coordonnes2 = split(coordonnes, « , »)
coordonnes2(0) = CDbl(replace(coordonnes2(0), « . », « , »))
coordonnes2(1) = CDbl(replace(coordonnes2(1), « . », « , »))

‘Calcul de la distance de la maison
a = 3.1415926535 / 180
lat1 = LAT_MAISON * a
lat2 = coordonnes2(0) * a
lon1 = LONG_MAISON * a
lon2 = coordonnes2(1) * a

t1 = sin(lat1) * sin(lat2)
t2 = cos(lat1) * cos(lat2)
t3 = cos(lon1 – lon2)
t4 = t2 * t3
t5 = t1 + t4

rad_dist = atn(-t5/sqr(-t5 * t5 +1)) + 2 * atn(1)

distance_maison = (rad_dist * 3437.74677 * 1.1508) * 1.6093470878864446

‘Calcul de la distance du travail
lat1 = LAT_TRAVAIL * a
lon1 = LONG_TRAVAIL * a

t1 = sin(lat1) * sin(lat2)
t2 = cos(lat1) * cos(lat2)
t3 = cos(lon1 – lon2)
t4 = t2 * t3
t5 = t1 + t4
rad_dist = atn(-t5/sqr(-t5 * t5 +1)) + 2 * atn(1)

distance_travail = (rad_dist * 3437.74677 * 1.1508) * 1.6093470878864446

‘on détermine l etat en fonction de la distance: si la distance est inférieure a 500m de la maison, on considère qu’on y est, idem pour le travail. La précision peut être ajustée selon les besoins.
if distance_maison < 0.500 then
etat = 0
elseif distance_travail < 0.500 then
etat = 1
else
etat = 2
end if

‘Envoi de l état de sa position
sTarget = « http://api.eedomus.com/set?action=periph.value&periph_id= » & PERIPHDIST_ID & « &value= »& etat & « &api_user= » & API_USER & « &api_secret= » & API_SECRET
xmlHTTP.Open « GET », sTarget, bGetAsAsync
xmlHTTP.Send

‘ On envoie les infos à eedomus pour la carte
sTarget = « http://api.eedomus.com/set?action=periph.value&periph_id= » & PERIPH_ID & « &value= »& coordonnes & « &api_user= » & API_USER & « &api_secret= » & API_SECRET
xmlHTTP.Open « GET », sTarget, bGetAsAsync
xmlHTTP.Send

 

N’hésitez pas à télécharger le script complet ici (car parfois le site reformage le code, ce qui peut générer des erreurs quand on tente de l’exécuter tel quel.

 

Ce script va donc récupérer ma position GPS sur Google Latitude, mis à jour grâce à mon iPhone, calculer la distance entre ma maison et mon lieu de travail pour savoir si je suis à l’un des deux, et ensuite envoyer les coordonnées GPS à l’eedomus pour mettre à jour la carte, et l’état de ma situation (à la maison, au travail, ou parti ailleurs):

 

 

On ne peut pas utiliser la carte pour les scénarios, mais cette fois, on peut utiliser cet état dans des scénarios, comme par exemple activer automatiquement l’alarme à la maison si ma femme et moi sommes partis:

 

 

De la même façon, on peut faire ouvrir le portail électrique et allumer la lumière extérieure le soir quand nous arrivons à moins de 500m de la maison.

Le Karotz nous souhaite même la bienvenue lorsque nous rentrons (avec l’état de chaque personne, il sait qui arrive, il suffit de mettre une petite temporisation pour nous laisser le temps d’entrer à la maison :p )

Le fait de savoir si on est au travail ne sera pas utile à tout le monde, mais cela permet au Karotz de confirmer à ma femme que je suis bien arrivé au travail. Tout cela devient très facile à faire avec ce petit script.

Voilà, j’espère que cela vous donnera des idées ! J’avais joué autrefois avec les pings d’iPhone et le RFID, mais là je pense que je tiens la meilleure solution que j’ai eue jusqu’à aujourd’hui. La précision du GPS n’est pas au mètre près, plutôt même de l’ordre de la dizaine de mètres, mais en jouant avec un champ un peu « large », cela permet de se situer avec suffisamment de précision pour de nombreux scénarios.

Il ne reste qu’une petite chose qui semble bugguer sur l’eedomus: il semble impossible d’afficher deux cartes en même temps pour deux traceurs GPS, la seconde est en cours de chargement perpétuel:

 

 

Bon, cela n'empêche pas l’état « virtuel » de se mettre à jour, et c’est le plus important, puisque c’est lui qui est utilisé dans les scénarios.


1 Commentaire
  1. Bonjour,
    Le service Latitude est remplacé par un service intégré à Google+.
    Savez-vous comment récupérer le user ?
    Merci

    Laisser un commentaire

    Ne ratez plus aucune news !

    Inscrivez vous à notre newsletter, et recevez chaque mois toute l'actualité du blog pour ne plus rien louper: actualité, guides, tutoriaux, concours !

    Merci pour votre inscription !