A voir
 

Script Google, Géolocalisation, et Eedomus

 
I_WAS_HERE
I_WAS_HERE
I_WAS_HERE

 
Présentation
 

Catégorie:
 
Prix:
 
Durée:
 
Mise en place
 
 
 
 
 


 
Utilisation
 
 
 
 
 


 
Utilité
 
 
 
 
 


 
Cout
 
 
 
 
 


 
Note Globale
 
 
 
 
 
4.5/ 5


Note des Lecteurs
1 Nombre de notes

 

Pour


Fonctionne parfaitement, pas besoin d'hébergement extérieur, gratuit

Contre


Posséder un compte Google Drive ?


Apercu

Je vous ai déjà parlé à plusieurs reprises de la géolocalisation, notamment sur l’eedomus, qui intègre un type de device lié à ce domaine. Aujourd’hui je reviens sur le sujet pour vous proposer un script que j’utilise depuis plusieurs jours sans problème. Il s’agissait à l’origine d’un script PHP, que je pensais vous mettre à [...]

34
Posté le 3 décembre 2012 par

 
Tutorial Complet
 
 

Je vous ai déjà parlé à plusieurs reprises de la géolocalisation, notamment sur l’eedomus, qui intègre un type de device lié à ce domaine.

Aujourd’hui je reviens sur le sujet pour vous proposer un script que j’utilise depuis plusieurs jours sans problème. Il s’agissait à l’origine d’un script PHP, que je pensais vous mettre à disposition, mais Pierre a eu la gentillesse de me le convertir en script Google, ce qui permettra à n’importe qui de l’utiliser.

 

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 crée ensuite un second device « Etat », qui contiendra la distance entre nous et la maison:

 

 

Pareil, relevez son ID. C’est le device le plus important, qui permettra de déclencher des scénarios. Le device tracker sert juste à suivre sa position sur une carte, on peut s’en passer si on veut.

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 l‘application iPhone du même nom (gratuite). Sur Android, il me semble que l’application est intégrée.

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 Latitude sur l’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. Pour ma part je tiens sans problème 3 jours avec une utilisation normale.

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, nous utilisons un script Google. Il faut ou d’abord posséder un compte Google Drive. Ensuite, faites « Créer / Plus / Script »:

 

 

Copiez y ensuite ce code (dispo aussi en téléchargement ici):

 

function Latitude()
{

// Paramètres eedomus
var api_user = ‘xxxxx‘; // api_user eedomus
var api_secret = ‘xxxxxx‘; // api_secret eedomus
var id_device = ‘1234‘; // Device traceur GPS créé sur eedomus
var id_distance = ‘1235‘; // Device servant à stocker la distance entre moi et la maison

// Paramètres géographiques
var id_user = ‘-45469696‘; // id user de Google Latitude
var lat_maison = 40.606769; // Latitude de la maison
var long_maison = 1.167042; // Longitude de la maison

// On récupère la position sur Google Latitude
var json = UrlFetchApp.fetch(« https://latitude.google.com/latitude/apps/badge/api?user= » + id_user + « &type=json »);

var data = json.getContentText();
data = Utilities.jsonParse(data);

var longitude = data.features[0].geometry.coordinates[0];
var latitude = data.features[0].geometry.coordinates[1];
var position = data.features[0].properties.reverseGeocode;
var timestamp = data.features[0].properties.timeStamp;

var DateMin = new Date();
DateMin.setTime(DateMin.getTime() – (10*60*1000)) // on retire 10 min à la date & heure actuelle
var Datetimestamp = new Date(timestamp * 1000);

if (Datetimestamp >= DateMin) // Si le timestamp de google latitude date de moins de 10 minutes alors on fait la suite (pour éviter d’envoyer des données sur l’API si aucun changement de coordonnées GPS)
{
// On met à jour la position géographique sur eedomus
timestamp = Utilities.formatDate(new Date(timestamp*1000), « GMT+1″, « yyyy-MM-dd HH:mm:ss »)
var adresse = « http://api.eedomus.com/set?action=periph.value&api_user= » + api_user + « &api_secret= » + api_secret +
« &periph_id= » + id_device + « &value= » + latitude + « , » + longitude + « &value_date= » + timestamp;
adresse = adresse.replace( » « , « %20″)
var envoi = UrlFetchApp.fetch(adresse);

// Conversion des coordonnées en ° vers des Radians
var lat1 = deg2rad(lat_maison);
var long1 = deg2rad(long_maison);
var lat2 = deg2rad(latitude);
var long2 = deg2rad(longitude);

// Calcul
var dp = distance(lat1,long1,lat2,long2);
var dpr = Math.round(dp * 1000) / 1000; // Math.round arrondi à l’entier le plus proche

// On met à jour sur eedomus la distance entre moi et la maison
adresse = « http://api.eedomus.com/set?action=periph.value&api_user= » + api_user + « &api_secret= » + api_secret +
« &periph_id= » + id_distance + « &value= » + dpr + « &value_date= » + timestamp;
adresse = adresse.replace( » « , « %20″)
envoi = UrlFetchApp.fetch(adresse);
}

}

function deg2rad(deg)
{
return deg*(Math.PI/180);
}

function distance(lat_a, lon_a, lat_b, lon_b)
{
var t1 = Math.sin(lat_a) * Math.sin(lat_b);
var t2 = Math.cos(lat_a) * Math.cos(lat_b);
var t3 = Math.cos(lon_a – lon_b);
var t4 = t2 * t3;
var t5 = t1 + t4;
var rad_dist = Math.atan(-t5/Math.sqrt(-t5 * t5 +1)) + 2 * Math.atan(1);
return (rad_dist * 3437.74677 * 1.1508) * 1.6093470878864446
}

 

Il suffit de compléter les 7 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.

L’ID_DEVICE est l’ID du traceur GPS, et l’id_distance l’id de l’état créé  créé au tout début sur l’eedomus.

Votre ID_USER 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).

Enfin, indiquez les coordonnées GPS de votre maison. On peut les obtenir facilement sur Google Maps avec un clic droit, « afficher plus d’infos »

 

 

Exécutez une première fois le script manuellement, il risque de vous demander des autorisations. Donnez les lui.

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, créez un déclencheur en cliquant sur l’icone en forme d’horloge:

 

 

Et configurez un minuteur, à l’intervalle que vous souhaitez:

 

 

Voilà, c’est fini !

 

IV. Utilisation

 

Le script va ainsi tourner automatiquement toutes les minutes pour vérifier votre position. Si la position date de moins de 10min, le script va mettre à jour votre position sur l’eedomus, et calculer la distance qui vous sépare de votre maison pour ensuite mettre l’eedomus à jour. Cela évite de faire trop de requêtes pour rien à la box, on ne lui notifie que les changements.

Le module tracker présentera votre position et vos déplacements:

 

 

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

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

 

 

Ce qui est le plus intéressant, c’est le device qui contient la distance entre nous et la maison:

 

 

Ce device va pouvoir être utilisé pour les scénarios. Exemple d’un scénario qui m’ouvre automatiquement mon portail quand j’arrive à moins de 5km:

 

 

J’utilise ici une marge de 5km, car en voiture, le temps que les infos se mettent à jour, les kilomètres défilent vite :p

On peut aussi déclencher des scénarios au contraire quand on part. J’ai le même script qui tourne pour ma femme: si notre position à tous les deux dépasse les 10km, l’eedomus active l’alarme et nous envoie un message Push pour nous prévenir.

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

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

Bien sûr, c’est un exemple que je donne ici avec l’eedomus, mais le script pourrait être très facilement adapté pour la Vera, par exemple. L’avantage ici est qu’on n’a pas besoin d’un hébergement extérieur pour le script, et que la box n’est pas surchargée en requêtes, puisqu’on ne met à jour que si la position date de moins de 10min.Après différents essais avec la géolocalisation, c’est à ce jour la solution qui me convient le mieux !


Cédric Locqueneux

 
Je me suis essayé à la domotique il y a quelques années avec quelques modules X10, quelques softs gratuits, etc… pour équiper la maison que j'avais en location. Puis j'ai eu la chance de pouvoir faire construire, et c'est là que mes projets domotiques ont explosé, la construction neuve me permettant de prévoir une installation complète, et intégrée à la maison. Aujourd'hui, quasiment toute mon installation repose sur le Z-Wave.


34 commentaires


  1.  
    enr37

    Pour avoir essayé un temps latitude sur iphone 4 et 3gs, ca bouffe de la batterie de manière phénoménale ^^. j’ai donc arreté
    Par contre, te suivant quotidiennement, tu avais aussi fait un test avec une appli IOs. En quoi est elle mieux, égale ou moins bien que ce format google qui est certes gratuit mais l’app coutait qq chose comme 2€ je crois




    •  

      Avec Latitudie, ma batterie fondait assez vite, en effet. Mais avec le soft officiel Google Latitude, je tiens sans problème 3-4 jours en utilisation normale sur mon iPhone 4. Le soft n’a pas tellement d’impact sur ma batterie. En même temps, je suis assez sédentaire: 10h au taf, le reste à la maison, grosso modo. Les coordonnées ne sont mises à jour que lors des déplacements. Idem sur l’iPhone de ma femme, qui pourtant téléphone beaucoup :p

      Pour l’application iOS, je pense que tu parles de Geoloc ( http://www.maison-et-domotique.com/2012/03/19/a-gagner-5-licences-de-geoloc-pour-iphone/ ) ? Ce qui m’embêtait avec ce soft, c’est qu’il fallait le lancer par exemple en partant du boulot pour que le portail s’ouvre en arrivant à la maison tout seul. Avec cette solution Google, le soft est toujours en tache de fond, je n’ai pas à m’en occuper.




  2.  
    philippe

    Bonjour

    j’essaye de mettre ca en place en suivant ton tuto mais à la création du script j’ai une erreur à la ligne 16 :
    var json = UrlFetchApp.fetch(« https://latitude.google.com/latitude/apps/badge/api?user= » + id_user + « &type=json »);

    J’avais des erreurs aux lignes 5.6.7.8.11 mais ça venait des guillemets qu’il fallait enlever (peut être faut il modifier le tuto?)

    En tout ca, merci pour ton travail!




  3.  
    Bapt

    Tout ça pour surveiller les allez et venue de sa femme ! :-)
    Je plaisante, très interessant.




  4.  
    Isatis

    Bravo et merci pour ces explications.

    Personnellement j’utilise HOMESEER. Pourriez-vous m’aider à adapter le script pour, par exemple, envoyer un mail à HomeSeer quand les conditions sont remplies (ou autres action permettant de mettre un device à 1) ?

    Merci d’avance.

    Philippe




    •  
      Isatis

      Le script était très clair, j’ai pu trouver ce qu’il fallait faire pour l’adapter.

      Merci

      Phil




    •  
      Lulu740

      Bonjour Cédric,
      merci pour ce tuto, mais je voudrais l’intégré á Homeseer. Isatis est ce que cela fonctionne sous HS, qu’elles sont les adaptations à y amener ?????
      D’avance, merci.




  5.  
    Jayor

    Article très intéressant, comme d’habitude je dirai, merci pour le tutoriel.

    Avec tes articles, on commence à voir la puissance des scripts sur gdrive. Je voulais savoir s’il est possible, et si oui comment, peut-on envoyer des infos (température, puissance …) sur gdrive, dans un fichier .dat par exemple ?
    Et dans un deuxième temps, si c’est possible, on pourrait utiliser l’appli google « graphing calculator » pour générer des graphique.
    Merci d’avance pour la réponse




  6.  
    tom

    Je me demandais si avec ces scripts Google Drive, y avait pas moyen de se passer de ton serveur php pour ton tutoriel sur Google Agenda et l’eedomus ?
    C’est pas que je n’aime pas ton serveur, mais je crois davantage en la pérennité de Google :))))

    Un update du tutoriel à planifier ? ;)




  7.  
    Pierre SIROT

    Bonjour,

    JAYOR >> oui il est possible d’écrire dans des fichiers stockés sur google drive. Après il faudrait savoir si tu souhaites que ce soit un script google qui écrive dans le fichier ou un script extérieur.
    Pour ce qui est de « graphing calculator », je ne connais pas donc je ne peux pas te répondre dans l’immédiat.




  8.  
    michael

    bonsoir.
    Merci pour l’article. tout marche bien, j’ai le retour dans la box eedomus de mon parcourt, mais j’ai pas le calcul de la distance. j’ai le bon code de l’etat dans le script.
    J’ai essayé d’effacer l’etat qui affcihe le calcul des distance. Mais pas de changement
    Vous avez une idée?
    merci




  9.  
    Patrick

    Bonjour
    trés bon travail, script très intéressant, pourrais tu me dire la procédure pour l’utiliser sur mon NAS
    merci




  10.  
    herve

    Bonjour,
    Est ce que ce tuto est adaptable à la zibase?
    Merci d’avance pour la reponse




  11.  

    Très bien.
    Je voudrais aussi rebondir sur le problème de batterie. Il est vrai que la géolocalisation sur un smartphone peut dépanner mais bon ça reste limité justement pour la batterie. Si après, on ne peut plus répondre aux appels, c’est bien dommage pour un téléphone.




  12.  

    Bonjour,
    Pour info, j’avais un petit problème :
    l’heure remonté par le script avait toujours une heure de moins, après quelques recherches il semblerait que cela provienne d’un bug de la fonction Utilities.formatDate de google script. Elle est un peu capricieuse avec le timezone.
    En l’occurrence un problème de syntaxe déjà apparu sur les arguments du timezone est revenu récemment, pour éviter le problème il ne faut pas écrire « GMT+1″ mais « GMT+01:00″
    Voilà, ton script m’a été très utile alors si cette info peu aider en retour tout le monde y gagne ;)
    A bientôt et merci !




  13.  
    lulu740

    Bonjour Cédric,
    peut-on adapter le script pour l’utiliser avec Homeseer ???? Pas très doué en programmation, je patauges, comme dit je souhaiterais allumer mes lampes à l’entrée de ma maison lorsque j’arrive dans un rayon de 500m.
    Merci d’avance.




  14.  
    Munegu

    Bonjour,
    Je suis un nœud en domotique et me satisfait grandement de vos didacticiels. J’ai tenté de mettre en place la géolocalisation en suivant vos étapes, malheureusement ça ne marche pas. Il y a eu quelques modifications sur google drive et latitude, pouvez-vous nous indiquer où je trouve mon USER=numero sur google latitude et quelles options nous devons cocher ?
    D’avance merci

    Didier




  15.  
    Lulu740

    Bonjour Didier,
    désolé je n’apporterais guère de réponse à votre question, mais j’espères que vous aurez plus de chance que moi, car malgré ma question du 30/01, toujours dans l’attente qu’une âme charitable puisse également m’aider.
    Bonne chance.




    •  
      Isatis68

      Bonjour Lulu740,

      En effet, ce post n’a plus l’air très vivant… Néanmoins, je viens de me replonger dans le sujet et suis en cours de tests pour une adaptation HomeSeer (j’avais déjà fait une ébauche mais jamais portée à terme)

      Je vous tiens au courant dès que j’ai quelques éléments nouveaux




      •  

        Désolé, il y a tellement de questions tous les jours qu’il m’arrive d’en zapper :/
        Par contre je ne vois pas ce qui ne fonctionne pas, depuis la réalisation de ce tuto, je l’utilise quotidiennement chez moi sans avoir rien changé, et ca fonctionne sans problème.




  16.  
    madmax

    Bonjour

    quelqu’un l’a fait pour la vera ?

    merci




  17.  
    pauwer64

    Bonjour tout d’abord félicitations pour ce superbe travail.
    Aurais tu encore en ta possession le script original en PHP ?
    Pourrais tu me le faire parvenir STP ?
    Merci d’avance




  18.  
    Vincent

    Bonjour,

    Je viens de remarquer que le script ne prend pas en compte l’heure d’été. Il est en GMT+1, hors, en heure d’été on est en GMT+2.
    A part modifier le script 2 fois par an, y a-t-il une solution ?

    Merci




  19.  
    Toto

    Si tu as une possibilité de commande html sur ta box et derrière un serveur, ne peux tu pas récupérer l’info via PHP de pool.ntp.org ou/et même directement ?
    A part ça, mets donc ta variable de +1h ou oh directe dans une variable modifiable.
    Il n’est jamais simple de modifier les script après plusieurs mois…





Laisser un commentaire