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”:

 

2012 02 24 100809

 

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):

 

2012 02 24 101021

 

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”:

 

2012 02 24 102138

 

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

 

2012 02 24 102231

 

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.

 

IMG 0328

 

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

 

A lire également:
Mise à jour de la box eedomus: les périphériques Wifi Shelly deviennent compatibles localement !

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:

 

2012 02 24 103524

 

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:

 

2012 02 24 104511

 

Voilà, c'est fini !

 

IV. Résultat

 

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

 

2012 02 24 104734

 

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

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

 

2012 02 24 104817

 

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 ;-)

A lire également:
Mise à jour de la box eedomus: support des radars de présence ZigBee, et nouveaux périphériques Zwave !

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:

 

011

 

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

Ensuite, je lui ai ajouté trois valeurs:

 

021

 

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

 

A lire également:
Mise à jour de la box eedomus: compteur d’impulsion Zigbee Zipulses, périphériques Schneider Electrique Wiser, thermostat Airzone, etc.

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):

 

031

 

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:

 

04

 

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:

 

05

 

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.

Pour information, cet article peut contenir des liens affiliés, sans aucun impact sur ce que vous gagnez vous même ou le prix que vous pouvez payer pour le produit. Passer par ce lien vous permet de me remercier pour le travail effectué sur le blog chaque jour, et d'aider à couvrir les dépenses du site (hébergement, frais de port pour les concours, etc.). Ca ne vous coute rien, mais ca m'aide beaucoup ! Merci donc à ceux qui joueront le jeu !

Inscrivez vous à notre newsletter !

Ne ratez plus aucun article, test de produit ou guide, grâce à un mail dans votre boite chaque vendredi !

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

Maison et Domotique
Logo
Register New Account
Enregistrez vous, et stockez vos articles préférés sur votre compte pour les retrouver n'importe où, n'importe quand !
Compare items
  • Casques Audio (0)
  • Sondes de Piscine Connectées (0)
  • Smartphones (0)
Compare