Aller au contenu
Steven

Durée De Trajet Entre Chez Vous Et Votre Travail Ou Autre

Recommended Posts

Edit : ce VD fait double emploi avec celui de Krikroff : Waze Calculator

 

 

Je n'ai malheureusement pas le temps de faire un joli tuto, mais voici le gros du sujet :
 
Connaitre le temps estimé de trajet entre votre domicile et votre travail. L'idée étant d'être averti en cas perturbation.
Ce code s'appuie sur les services Google Maps.
 
3006973005.png
 
Voici donc le VD et l'icone en pièces jointes
 
Ensuite il vous faut obtenir une clé API chez google ... voici le lien : https://developers.google.com/maps/documentation/geocoding/get-api-key
 
Une fois la clé obtenue, il ne vous reste plus qu'à  créer un scène LUA et y coller et adapter le code suivant.
 

-- Votre clé API Google
local key = "AIxxYYYzz-8sdI9BY2hEbrEO34IiNaQfELETtls"
-- Votre adresse à  la maison
local origins = "18+rue+des+bois+Annecy+France"  
-- Votre adresse professionnel
local destinations = "7+rue+de+la+fontaine+Geneva+Switzerland"

-- Numéro du module virtuel précédemment crée/importé.
local hc2_module_virtuel = 475  

-- ------------------------------------------------------------------------
--   NE PAS TOUCHER
-- ------------------------------------------------------------------------
local duree = ""
local version = "V1.00"


-- ------------------------------------------------------------------------
-- Affichage dans la console
-- ------------------------------------------------------------------------
function log(message, force)
  	force = force or false
	if (debug or force) then
		print("["..version.."] ".. __convertToString(message))
   	end
end

-- ------------------------------------------------------------------------
-- Interrogation de l'API
-- ------------------------------------------------------------------------
function getResponseData(url, body, func)
  local httpClient = net.HTTPClient();
  httpClient:request(url.."?"..body, {
      success = function(resp)
          func(json.decode(resp.data)) 
      end,
      error = function(err)
        print('error = ' .. err)
      end,
      options = {
        method = 'GET'
      }
  });  
end

-- ------------------------------------------------------------------------
-- Mesures de l'unité interne
-- ------------------------------------------------------------------------
-- ------------------------------------------------------------------------
-- Mesures de l'unité interne
-- ------------------------------------------------------------------------
function getDuree(origine, destination, message, label)
	getResponseData("https://maps.googleapis.com/maps/api/distancematrix/json", "origins="..origine.."&destinations="..destination.."&language=fr-FR&key="..key, 
		function(data)
			log("----------========== Module intérieur ==========----------")
			duree = data.rows[1].elements[1].duration.value
			log(message .. duree, true)
      		fibaro:call(hc2_module_virtuel, "setProperty", label,  math.floor(duree/60))
		end
	)
end
   
getDuree(origins, destinations, "Durée travail = ", "ui.Label1.value")
getDuree(destinations, origins, "Durée maison = ", "ui.Label2.value")
log("Last request : "  .. os.date("%x - %X"), true)

.
 
Perso, j'utilise GEA pour executé cette scène toutes les 5 mn.
.
 
A vous de jouer et d'adapter tout cela à  votre convenance.  ;) 

Durée_Trajets_(mn).vfib

post-339-0-98755500-1464614233_thumb.png

  • Upvote 6

Partager ce message


Lien à poster
Partager sur d’autres sites

merci, ça me sera bien utile avec les grèves des trains depuis mercredi chez nous !

Je le mets en place immédiatement !

Partager ce message


Lien à poster
Partager sur d’autres sites

Pas mal Steve. Bon, je n'utilise pas, car jamais de bouchon pour moi :)

Par contre je cherchais justement, il n'y avait pas déjàun VD de ce style il y a qques temps mais sur une autre API ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Super Steven, merci, à  paname avec les greves des transports ca va etre l'enfer lol

 

Petite suggestion supp : ajouter push pour informer si le temps augmente lol

 

@nico : oui c'etait avec waze je crois

Partager ce message


Lien à poster
Partager sur d’autres sites

en effe,t c'était Waze par Krikroff.

 

Ceci dit, Steven, il me semble que tu as laissé tes données perso dans ton code ?

 

J'ai également une erreur à  la ligne 56

 [DEBUG] 16:12:35: [V1.00] Last request : 05/30/16 - 16:12:35
[DEBUG] 16:12:35: [1;31m2016-05-30 16:12:35.232321 [ fatal] LUA error: /opt/fibaro/scenes/24.lua:56: attempt to index field '?' (a nil value)
function getDuree(origine, destination, message, label)
	getResponseData("https://maps.googleapis.com/maps/api/distancematrix/json", "origins="..origine.."&destinations="..destination.."&language=fr-FR&key="..key, 
		function(data)
			log("----------========== Module intérieur ==========----------")
			duree = data.rows[1].elements[1].duration.value
			log(message .. duree, true)
      		fibaro:call(hc2_module_virtuel, "setProperty", label,  math.floor(duree/60))
		end
	)
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Lol, non, c'est des fausses données :-)

Etrange ton erreur car j'ai copié le code du forum dans ma scène afin d'être sà»re.

Vérifie la clé et les adresses stp ... éventuellement, tu peux faire directement l'url dans un navigateur pour être sà»re.


Pour plus d'info .. c'est ICI : https://developers.google.com/maps/documentation/distance-matrix/intro#RequestParameters

Par exemple pour préciser le mode : Train, il suffit d'ajouter "&mode=transit" après la clé.
 

getResponseData("https://maps.googleapis.com/maps/api/distancematrix/json", "origins="..origine.."&destinations="..destination.."&language=fr-FR&key="..key .. "&mode=transit" 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me disais bien que cela existait :)

Maintenant si vous êtes joueur, mettez les 2 et donnez nous le plus juste des 2...

Partager ce message


Lien à poster
Partager sur d’autres sites

Perso, pour la voiture, je préfère Waze ... bien que Waze appartienne à  Google et que les données sont croisées. On devrait avoir des résultats similaires  :60:

 

Mais Waze est plus réactif.

 

J'ai d'ailleurs supprimé mon VD en faveur de celui de Krikroff.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Justement, je me demandais s'ils avaient fusionné tout ça ou non ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Waze, ce n'est pas que pour quelques grosses ville, alors que Google, c'est également pour mon bled ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Vu que tu mets les coordonnées lat/long, tu peux même aller au pôle nord.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui, mais bon je ne te dis pas la pertinence des données :)

Traversé d'un groupe Caribou, phoque accidenté etc :)

Partager ce message


Lien à poster
Partager sur d’autres sites

De ce que je sais, Google me donne des bonnes prévisions en fonction de la densité réelle du traffic.

Waze est aussi (im)précis?

Partager ce message


Lien à poster
Partager sur d’autres sites

 @Steven,

Tu as laissé ton adresse dans les lignes de code du premier post?

Mais peut-être as-tu mis une adresse bidon.

Partager ce message


Lien à poster
Partager sur d’autres sites

non, cest sa vrai adresse : tous ceux qui suivent le topic sont invités au ski l'année prochaine

Partager ce message


Lien à poster
Partager sur d’autres sites

@ steven ..Good to see you !  :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le VD.

avec le VD waze de Krikroff j'avais pas trouvé comment 'éviter les péages', car du coup pour mon trajet ils prenaient toujours celui la .. sauf que c'est pas rentable tous les jours ;- ) tunnel A86 pour les experts :-)

10E par jour ...

 

si ce VD pour le faire ça peut être interessant ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Il le peux, il suffit d'ajouter "&avoid=highways" àla fin de l'url

getResponseData("https://maps.googleapis.com/maps/api/distancematrix/json", "origins="..origine.."&destinations="..destination.."&language=fr-FR&key="..key .. "&avoid=highways" 

Partager ce message


Lien à poster
Partager sur d’autres sites

merci steven,

le avoid highways, c'est toute autoroute je suppose, je vais mettre juste un avoid tolls comme j'ai vu sur le site google;

est ce qu'il y a un moyen de tester la réponse ? (voir le chemin pris depuis gmap ?)

tu peux aussi nous mettre ta ligne GEA ? ca éviteras les futurs questions :-)

 

grand merci

Partager ce message


Lien à poster
Partager sur d’autres sites

@Sakkhho,

Tu sembles avoir réussi àfaire fonctionner ce VD.

Je n'y arrive pas :angry: : je bloque au niveau de la clé Google : Quelle type de clé faut-il demander, serveur, ???

Saurais-tu m'aider SVP ?

Partager ce message


Lien à poster
Partager sur d’autres sites

@Sakkhho,
J'ai fait une 2ème version plus proche de celle de Krikroff mais toujours via les API Google .. cela afin de voir le résumé du trajet selon ta demande
 
mini_532260TrajetV2.png
 
Ci-joint le nouveau module virtuel ainsi que la nouvelle scène qui se configure ainsi : 
 

local trajets = {
    {
    	depart = "37+rue+du+bois+Annecy+France",
    	arrivee = "7+rue+des+Fontaines+Geneva+Switzerland",
    	options = "&avoid=highways",
    	module_virtuel = 475
    }
} 

La clé n'est plus la même car avant on utilisait l'API "Distance" et maintenant il nous faut celui-ci : https://developers.google.com/maps/documentation/directions/
 
Cette scène ne se lance pas automatiquement, j'utilise GEA pour la lancer toutes les 5mn .. à  toi de voir comment tu veux faire.

 

@jojo
Voir le lien ci-dessus : https://developers.google.com/maps/documentation/directions/
mini_241510ApiGoogle.png

TrajetV2.vfib

TrajetV2.lua

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

merci Steven, je test des mon retour du Canada.

je vais aussi utiliser GEA pour ce faire. tu peux me rappeler comment on lance un scene depuis GEA, j'ai jamais eut besoin jusqu' a present

 

@jojo, j'avais la meme erreur au depart, mais c'etait à  cause de l'adresse generique - j'ai mis un truc tres simple pour tester  : genre PARIS; LYON - sans adresse, juste la ville

comme c'etait ok alors j'ai mis mes adresses.

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici voilà  

  -- Timer toutes les 5 mn
  GEA.add( true , 5*60, "", {
      {"Scenario", 6},
      {"Scenario", 294}, 
      {"Repeat"}
  })

Partager ce message


Lien à poster
Partager sur d’autres sites

×