[LUA] Durée de trajet avec Waze

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

ok, dans ce cas soit :

Code : Tout sélectionner

commandArray['UpdateDevice']='172|0|'..routeTotalTimeMin
soit

Code : Tout sélectionner

idx='172'
commandArray['UpdateDevice']=idx..'|0|'..routeTotalTimeMin
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
MAidEN91
Messages : 132
Inscription : 01 sept. 2015, 20:50

Re: Durée de trajet avec Waze

Message par MAidEN91 »

Yes c'est good merci :)

On peux changer le digit ou la légende du graph ou c'est en dur dans domo?

Dolby tu peux partager ta fonction pour optimiser les tests? Il est vrai que les variations de moins d'une minutes ne servent a rien. Du coup tu laisses tourner ton script toute la journée tu ne l'ajuste pas uniquement le matin comme présenté au départ?
MAidEN91
Messages : 132
Inscription : 01 sept. 2015, 20:50

Re: Durée de trajet avec Waze

Message par MAidEN91 »

Question subsidiaire :)

Ce qui serait interessant c'est de pouvoir avoir l'historique des heures de pointe de manière précise sans que les stats soient lissées. Car même si notre script se lance que le matin (j'ai config le mien de 6h a 10h) cela reste qu'une petite partie de la journée sur 24h, du coup le reste du temps la valeur est faible et plus recalculée.

Savez vous s'il y a un moyen de pouvoir garder l'info de manière précise? Ci dessous mon exemple, sur la seconde courbe qui porte sur les 30 derniers jours on a la tendance, mais aucune vue sur les pics de trafic du matin.

Image
dolby44
Messages : 46
Inscription : 20 janv. 2016, 10:32

Re: Durée de trajet avec Waze

Message par dolby44 »

Hello,

Désolé de ne pas t'avoir répondu avant.
Bon je vois que tu as réussi à le faire par toi-même.

De mon coté, je lance le script toute la journée, donc je n'ai pas d'interruption dans ma courbe.

Ce que je te propose de faire, c'est de faire le test sur les heure uniquement sur la mise à jour de ta variable texte.
Tu auras ainsi pas trop de données texte à stocker, mais un aperçu complet du temps de trajet.

Un autre truc que j'aimerai faire serait d'afficher le temps de trajet sur mon trajet préféré, mais je ne sais pas si c'est possible.
Sinon, afficher trois variables avec les propositions sur les 3 meilleurs trajets. Le plugin Waze sur Jeedom le fait, donc on doit pouvoir le faire aussi sur domoticz.
konix
Messages : 24
Inscription : 17 nov. 2015, 09:00

Re: Durée de trajet avec Waze

Message par konix »

Bonjour à tous,

J'ai ajouter la durée de trajet Waze pour mon parcour allé et retour et cela fonctionne parfaitement.
J'aimerai maintenant forcer les script sur un des trois trajets proposé.

Avez vous une idée ?

Je pensai jouer sur la valeur de la variable "trajet" ?

local waze=assert(io.popen('curl "https://www.waze.com/row-RoutingManager ... LOW_UTURNS"'))
local trajet = waze:read('*all')
waze:close()

Merci pour vos retours
konix
Messages : 24
Inscription : 17 nov. 2015, 09:00

Re: Durée de trajet avec Waze

Message par konix »

Un petit Up pour déterrer le sujet ;)
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

La variable trajet ne fait que stocker le retour de la requête au format JSON.
La solution si elle existe doit se situer ici:

Code : Tout sélectionner

&returnJSON=true&timeout=6000&nPaths=1&options=AVOID_TRAILS%3At%2CALLOW_UTURNS
Le paramètre nPaths permet de retourner plusieurs trajets, c'est par là que je commencerai à creuser.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

Bon, pour avoir un truc un peu comme Jeedom, c'est à dire chopper 3 trajets et afficher la durée, j'étais effectivement sur la bonne piste.
Je n'utilise pas de graphe, mais ça doit être adaptable, surtout avec le custom sensor qui permet de mettre le graphe en minutes 8-)
Je me contente de compiler les infos dans le capteur text.

Code : Tout sélectionner

---------------------------------
-- Script de calcul de temps pour un trajet entre 2 coordonnées
-- Auteur : Aurelien Neutrino
-- Date : 22 mars 2016
-- Nécessite un capteur virtuel de type Text
-- source :
-- http://www.domo-blog.fr/info-trajet-waze-eedomus-version-raspberry/
---------------------------------
commandArray={}

--import des fontions pour lire le JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
--coordonnées à modifier----------------
--idx du capteur
idx = '97'

-- y = latitude et x = longitude
-- exemple pour paris : 
-- departx="2.2903622"
-- departy="48.8582546"
--coordonnées de départ
departx="-1"
departy="46"
--coordonnées d'arrivée
arrivex="-2"
arrivey="47"

--Nombre d'itinéraires possibles
nbIti='3'

---récupère l'heure actuelle en minutes
time=os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))
maintenant=tonumber(hours*60+minutes)

---calcule du trajet entre 7h et 9h
if(maintenant>=420 and maintenant<= 540 and maintenant%2==0)then
	----------------------------------------------------------------
	--Récupération du trajet et de sa durée en temps réel via WAZE--
	----------------------------------------------------------------
	local waze=assert(io.popen('curl "https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'
										..departx..'+y%3A'..departy..'&to=x%3A'..arrivex..'+y%3A'
										..arrivey..'&returnJSON=true&timeout=6000&nPaths='..nbIti..'&options=AVOID_TRAILS%3At%2CALLOW_UTURNS"'))
	local trajet = waze:read('*all')
	waze:close()

	local jsonTrajet = json:decode(trajet)
	--formate la réponse pour un trajet
	jsonTrajet1 = {}
	jsonTrajet1['alternatives']={}
	if(nbIti=='1')then
		jsonTrajet1['alternatives'][1] = jsonTrajet
		jsonTrajet = jsonTrajet1
	end

	itineraires = ""
	for i, alternatives in pairs(jsonTrajet['alternatives']) do
		if(i>1)then itineraires = itineraires .. " ou " end
		--Noms des principales routes empruntées
		routeName = alternatives['response']['routeName']
		--Liste des routes empruntées
		route = alternatives['response']['results']
		--Temps de trajet en secondes
		routeTotalTimeSec = 0
		--calcul du temps de trajet
		for response,results in pairs(route) do
			routeTotalTimeSec = routeTotalTimeSec + results['crossTime']
		end

		--Temps de trajet en minutes
		routeTotalTimeMin = routeTotalTimeSec/60-((routeTotalTimeSec%60)/60)

		--mise en forme de la réponse
		if (routeTotalTimeSec%60<10)then
			routeTotalTime =  routeTotalTimeMin ..':0'..routeTotalTimeSec%60
		else
			routeTotalTime =  routeTotalTimeMin ..':'..routeTotalTimeSec%60
		end
		if(routeTotalTimeSec%60>=30)then
			routeTotalTimeMin = routeTotalTimeMin +1
		end
	itineraires = itineraires .. routeTotalTime.." par "..routeName
	end
	commandArray[1]={['UpdateDevice'] =idx..'|0|' .. itineraires}
end
return commandArray
On obtient ça :
waze.PNG
waze.PNG (24.65 Kio) Consulté 12014 fois
Après, il doit y avoir moyen de mettre ça plus en beauté avec la Custom Page (oui avec des majuscules :mrgreen: ) de Vil1driver.
Dernière modification par Neutrino le 02 avr. 2017, 16:11, modifié 1 fois.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
konix
Messages : 24
Inscription : 17 nov. 2015, 09:00

Re: Durée de trajet avec Waze

Message par konix »

Merci pour vos réponse je vais creuser la question avec vos commentaires :D
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

Pour sélectionner un trajet précis, il faut déjà qu'il soit récupérer par la requête (si c'est pas le cas, il est peut-être temps de reconsidérer votre trajet habituel :lol: )
Le nombre max de possibilités est de 4.
Ensuite, il suffit de tester la variable routeName avec le trajet préféré.
Si la condition est vraie, on balance la durée dans la commandArray pour l'afficher.

Mon but premier est de savoir si je dois prendre telle ou telle routes suivant les travaux à proximité de chez moi et donc de savoir si je dois tourner à gauche ou à droite au bout de ma rue :mrgreen: .
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Répondre