Durée de trajet avec Waze

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
Chrominator
Messages : 420
Enregistré le : 19 déc. 2015, 07:29

Re: Durée de trajet avec Waze

Message par Chrominator » 10 nov. 2017, 11:46

Merci pour l'update.

Dans mon cas aussi, le programme plante car il ne peut plus décoder routeName, l'API renvoie une valeur nulle :
"routeName":null,
Je suggère pour continuer l'utilisation du programme d'ajouter un test sur routeName :

Après la ligne

Code : Tout sélectionner

	--Noms des principales routes empruntées
	routeName = jsonTrajet['response']['routeName']
Ajouter la ligne

Code : Tout sélectionner

if routeName == nil then routeName="route non précisée" end
Le programme continue et ne plante plus, mais on a plus d'indication sur le trajet.

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


tonejay
Messages : 106
Enregistré le : 15 sept. 2017, 20:28

Re: Durée de trajet avec Waze

Message par tonejay » 10 nov. 2017, 19:25

Neutrino a écrit :Et oui, l'api n'est pas officielle, et donc n'a pas de documentation.
Ceci devrait marcher :

Code : Tout sélectionner

   local waze=assert(io.popen('curl --referer https://www.waze.com "https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'..departx..'+y%3A'..departy..'&to=x%3A'..arrivex..'+y%3A'..arrivey..'&returnJSON=true&returnGeometries=true&returnInstructions=true&timeout=60000&nPaths=1&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS%3At%2CAVOID_TOLL_ROADS"'))
J'ai inséré cette ligne et toujours le meme problmee chez moi... :-/

Chrominator
Messages : 420
Enregistré le : 19 déc. 2015, 07:29

Re: Durée de trajet avec Waze

Message par Chrominator » 11 nov. 2017, 00:35

Le problmee chez toi ne vient pas forcément de la ligne... :D

tonejay
Messages : 106
Enregistré le : 15 sept. 2017, 20:28

Re: Durée de trajet avec Waze

Message par tonejay » 11 nov. 2017, 10:31

Chrominator a écrit :Le problmee chez toi ne vient pas forcément de la ligne... :D
J'ai cru comprendre ... :D

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Chrominator
Messages : 420
Enregistré le : 19 déc. 2015, 07:29

Re: Durée de trajet avec Waze

Message par Chrominator » 12 nov. 2017, 06:26

Ça m'embêtait de ne plus avoir les routes principales empruntées avec l'API de WAZE, cette disparition met le script de Neutrino en erreur. :(
Capture.PNG
Capture.PNG (65.23 Kio) Vu 3698 fois
J'ai donc modifié mon script pour déterminer ces routes principales, script qui s'était un peu éloigné de celui d'origine ;
Je ne calcule le trajet que lors de jours ouvrés, et entre 7h et 9h par exemple.

Si vous voulez vous en inspirer, il est ci-dessous.
N'oubliez pas d'adapter les coordonnées lat/lon du départ et de l'arrivée.

Code : Tout sélectionner

---------------------------------
-- Script de calcul de temps pour un trajet entre 2 coordonnées
-- Auteur : Neutrino
-- Date : 7 septembre 2015
-- Nécessite un capteur virtuel de type Text
-- source :
-- http://www.domo-blog.fr/info-trajet-waze-eedomus-version-raspberry/
---------------------------------
-- Modif Chrominator 
--
-- 	2016-01-30 : 	Remplacement des secondes du trajet par " mn"
--					Pas de détermination du temps de trajet les W-E et jours fériés
--	2017-11-11 : 	Détermination du nom des routes principales (les plus longtemps parcourues) car routeName n'existe plus dans le JSON
--
DEBUG=false

function voir_les_logs (s) -- nécessite la variable DEBUG
    if DEBUG then
      if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
      else
        print ("<font color='#f3031d'>aucune valeur affichable</font>")
      end
    end
end

commandArray={}

--import des fontions pour lire le JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
--variables à modifier----------------
--idx du capteur
idx = '143'				-- Capteur de type texte pour afficher la durée du trajet et le nom de la principale route empruntée.
idx_curve = '144'		-- Capteur de type voltmetre pour archiver les temps de parcours calculés
--coordonnées de départ
departx="2.3352"
departy="48.83783"
--coordonnées d'arrivée 
arrivex="2.31676"
arrivey="48.87046"

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

-- Récupère le jour pour ne pas calculer de trajet les week-end.
-- Sunday = 0 - Saturday = 6
local weekday = os.date('%w', time)

---calcule du trajet entre 7h et 9h sauf W-E et jours fériés
--
if (maintenant>=420 and maintenant<= 540 and uservariables["jf"] == "false" and weekday ~= 6 and weekday ~= 0) or DEBUG then
	-----------------------------------------
	----------------------------------------------------------------
	--Récupération du trajet et de sa durée en temps réel via WAZE--
	----------------------------------------------------------------
	voir_les_logs('curl --referer https://www.waze.com "https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'..departx..'+y%3A'..departy..'&to=x%3A'..arrivex..'+y%3A'..arrivey..'&returnJSON=true&returnGeometries=true&returnInstructions=true&timeout=60000&nPaths=1&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS%3At%2CAVOID_TOLL_ROADS"')
	local waze=assert(io.popen('curl --referer https://www.waze.com "https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'..departx..'+y%3A'..departy..'&to=x%3A'..arrivex..'+y%3A'..arrivey..'&returnJSON=true&returnGeometries=true&returnInstructions=true&timeout=60000&nPaths=1&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS%3At%2CAVOID_TOLL_ROADS"'))
	local infowaze = waze:read('*all')
	waze:close()
	local jsonTrajet = json:decode(infowaze)
	--Noms des principales routes empruntées
	routeName = jsonTrajet['response']['routeName']
	if routeName == nil then routeName="route non précisée" end
	--Liste des routes empruntées
	route = jsonTrajet['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)

	-- Détermination des noms des routes employées
	xtime = {}
	route = jsonTrajet['response']['results']
	voie = jsonTrajet['response']['streetNames']
	for response,results in pairs(route) do
		i = tonumber(results['street'])
		if voie[i] == nil then voie[i] = "/ND" end
		if xtime[i]==nil then xtime[i]=0 end
		xtime[i]=xtime[i]+tonumber(results['crossTime'])
		voir_les_logs(tostring(response).." "..results['crossTime'].." "..results['street'].." "..voie[i].." "..xtime[i])
	end

	i=0
	j=1
	chemin = {}
	trajet = {}

	-- Détermination des durées de parcours pour chacune des routes
	
	for street in pairs(voie) do
		if xtime[street] ~= nil then
			upd=0
			for i in ipairs(chemin) do
				if chemin[i]==voie[street] then
					trajet[i]=trajet[i]+xtime[street]
					upd=1
				end
			end
			if upd == 0 and xtime[street]~=nil and voie[street]~=nil then 
				voir_les_logs("voie[street]="..voie[street])
				voir_les_logs("xtime[street]="..xtime[street])
				voir_les_logs("j="..j)
				chemin[j]=voie[street]
				if xtime[street]~=nil then
					trajet[j]=xtime[street]
				else
					trajet[j]=0
				end
				voir_les_logs("chemin["..tostring(j).."]="..chemin[j])
				voir_les_logs("trajet["..tostring(j).."]="..trajet[j])
				j=j+1
			end
		end
	end
	voie4T=0
	voie5T=0

	-- Recherche de deux routes les plus utilisées
	
	for i in ipairs(chemin) do
		voir_les_logs("chemin["..tostring(i).."]="..chemin[i])
		voir_les_logs("trajet["..tostring(i).."]="..trajet[i])
		if trajet[i]~=nil and chemin[i]~="/ND" then
			if trajet[i] > voie4T then 
				voie4N=chemin[i]
				voie4T=trajet[i]
			elseif trajet[i] > voie5T then 
				voie5N=chemin[i]
				voie5T=trajet[i]
			end
		end
	end
	voir_les_logs(voie4N.." "..voie5N)
	routeName=voie4N.." "..voie5N
	routeTotalTime = os.date("%H:%M", routeTotalTimeSec-3600)..'&nbsppar&nbsp '..string.gsub(routeName, ' ', '&nbsp')
	commandArray[#commandArray+1]={['UpdateDevice'] =idx..'|0|' .. tostring(routeTotalTime)}
	commandArray[#commandArray+1]={['UpdateDevice'] =idx_curve..'|0|' .. tostring(routeTotalTimeMin)}
end

return commandArray

Neutrino
Messages : 1332
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Durée de trajet avec Waze

Message par Neutrino » 12 nov. 2017, 11:36

Merci Chrominator, j'ai mis à jour le 1er post ;)
Ma maison à plein d'IP ! :mrgreen:

MisterT
Messages : 53
Enregistré le : 12 avr. 2015, 19:04

Re: Durée de trajet avec Waze

Message par MisterT » 27 nov. 2017, 15:43

Chrominator a écrit :Ça m'embêtait de ne plus avoir les routes principales empruntées avec l'API de WAZE, cette disparition met le script de Neutrino en erreur. :(
Capture.PNG
J'ai donc modifié mon script pour déterminer ces routes principales, script qui s'était un peu éloigné de celui d'origine ;
Je ne calcule le trajet que lors de jours ouvrés, et entre 7h et 9h par exemple.

Si vous voulez vous en inspirer, il est ci-dessous.
N'oubliez pas d'adapter les coordonnées lat/lon du départ et de l'arrivée.

Code : Tout sélectionner

---------------------------------
-- Script de calcul de temps pour un trajet entre 2 coordonnées
-- Auteur : Neutrino
-- Date : 7 septembre 2015
-- Nécessite un capteur virtuel de type Text
-- source :
-- http://www.domo-blog.fr/info-trajet-waze-eedomus-version-raspberry/
---------------------------------
-- Modif Chrominator 
--
-- 	2016-01-30 : 	Remplacement des secondes du trajet par " mn"
--					Pas de détermination du temps de trajet les W-E et jours fériés
--	2017-11-11 : 	Détermination du nom des routes principales (les plus longtemps parcourues) car routeName n'existe plus dans le JSON
--
DEBUG=false

function voir_les_logs (s) -- nécessite la variable DEBUG
    if DEBUG then
      if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
      else
        print ("<font color='#f3031d'>aucune valeur affichable</font>")
      end
    end
end

commandArray={}

--import des fontions pour lire le JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
--variables à modifier----------------
--idx du capteur
idx = '143'				-- Capteur de type texte pour afficher la durée du trajet et le nom de la principale route empruntée.
idx_curve = '144'		-- Capteur de type voltmetre pour archiver les temps de parcours calculés
--coordonnées de départ
departx="2.3352"
departy="48.83783"
--coordonnées d'arrivée 
arrivex="2.31676"
arrivey="48.87046"

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

-- Récupère le jour pour ne pas calculer de trajet les week-end.
-- Sunday = 0 - Saturday = 6
local weekday = os.date('%w', time)

---calcule du trajet entre 7h et 9h sauf W-E et jours fériés
--
if (maintenant>=420 and maintenant<= 540 and uservariables["jf"] == "false" and weekday ~= 6 and weekday ~= 0) or DEBUG then
	-----------------------------------------
	----------------------------------------------------------------
	--Récupération du trajet et de sa durée en temps réel via WAZE--
	----------------------------------------------------------------
	voir_les_logs('curl --referer https://www.waze.com "https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'..departx..'+y%3A'..departy..'&to=x%3A'..arrivex..'+y%3A'..arrivey..'&returnJSON=true&returnGeometries=true&returnInstructions=true&timeout=60000&nPaths=1&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS%3At%2CAVOID_TOLL_ROADS"')
	local waze=assert(io.popen('curl --referer https://www.waze.com "https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A'..departx..'+y%3A'..departy..'&to=x%3A'..arrivex..'+y%3A'..arrivey..'&returnJSON=true&returnGeometries=true&returnInstructions=true&timeout=60000&nPaths=1&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS%3At%2CAVOID_TOLL_ROADS"'))
	local infowaze = waze:read('*all')
	waze:close()
	local jsonTrajet = json:decode(infowaze)
	--Noms des principales routes empruntées
	routeName = jsonTrajet['response']['routeName']
	if routeName == nil then routeName="route non précisée" end
	--Liste des routes empruntées
	route = jsonTrajet['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)

	-- Détermination des noms des routes employées
	xtime = {}
	route = jsonTrajet['response']['results']
	voie = jsonTrajet['response']['streetNames']
	for response,results in pairs(route) do
		i = tonumber(results['street'])
		if voie[i] == nil then voie[i] = "/ND" end
		if xtime[i]==nil then xtime[i]=0 end
		xtime[i]=xtime[i]+tonumber(results['crossTime'])
		voir_les_logs(tostring(response).." "..results['crossTime'].." "..results['street'].." "..voie[i].." "..xtime[i])
	end

	i=0
	j=1
	chemin = {}
	trajet = {}

	-- Détermination des durées de parcours pour chacune des routes
	
	for street in pairs(voie) do
		if xtime[street] ~= nil then
			upd=0
			for i in ipairs(chemin) do
				if chemin[i]==voie[street] then
					trajet[i]=trajet[i]+xtime[street]
					upd=1
				end
			end
			if upd == 0 and xtime[street]~=nil and voie[street]~=nil then 
				voir_les_logs("voie[street]="..voie[street])
				voir_les_logs("xtime[street]="..xtime[street])
				voir_les_logs("j="..j)
				chemin[j]=voie[street]
				if xtime[street]~=nil then
					trajet[j]=xtime[street]
				else
					trajet[j]=0
				end
				voir_les_logs("chemin["..tostring(j).."]="..chemin[j])
				voir_les_logs("trajet["..tostring(j).."]="..trajet[j])
				j=j+1
			end
		end
	end
	voie4T=0
	voie5T=0

	-- Recherche de deux routes les plus utilisées
	
	for i in ipairs(chemin) do
		voir_les_logs("chemin["..tostring(i).."]="..chemin[i])
		voir_les_logs("trajet["..tostring(i).."]="..trajet[i])
		if trajet[i]~=nil and chemin[i]~="/ND" then
			if trajet[i] > voie4T then 
				voie4N=chemin[i]
				voie4T=trajet[i]
			elseif trajet[i] > voie5T then 
				voie5N=chemin[i]
				voie5T=trajet[i]
			end
		end
	end
	voir_les_logs(voie4N.." "..voie5N)
	routeName=voie4N.." "..voie5N
	routeTotalTime = os.date("%H:%M", routeTotalTimeSec-3600)..'&nbsppar&nbsp '..string.gsub(routeName, ' ', '&nbsp')
	commandArray[#commandArray+1]={['UpdateDevice'] =idx..'|0|' .. tostring(routeTotalTime)}
	commandArray[#commandArray+1]={['UpdateDevice'] =idx_curve..'|0|' .. tostring(routeTotalTimeMin)}
end

return commandArray

Salut Chrominator. Merci pour ce script ;)
Juste pour adapter au mieux, je voudrais savoir qu'est ce que c'est, dans la détermination du moment d’exécution, la variable utilisateur "jf" et si on peut la supprimer ?(desolé mais noob oblige en lua)

if (maintenant>=420 and maintenant<= 540 and uservariables["jf"] == "false" and weekday ~= 6 and weekday ~= 0) or DEBUG then

Sinon pour la variable DEBUG: Faut il la créer dans les variables utilisateurs, de quel type (entier, chaine,...) et la valeur initale?

merci pour les futures réponses

jackslayter
Messages : 950
Enregistré le : 30 sept. 2014, 14:40
Localisation : Isère (38)

Re: Durée de trajet avec Waze

Message par jackslayter » 27 nov. 2017, 15:56

une idée pourquoi la commande dans le navigateur me renvoie un 403

Code : Tout sélectionner

https://www.waze.com/row-RoutingManager/routingRequest?from=x%3A2.725766+y%3A46.227832&to=x%3A2.971424+y%3A46.170034&returnJSON=true&returnGeometries=true&returnInstructions=true&timeout=60000&nPaths=1&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS%3At%2CAVOID_TOLL_ROADS
merci
Raspberry Pi + RFLink + Domoticz Beta
Oregon - 3x Thgr122Nx / Chacon - micromodule 200w, télécommande 3b et 16b, 2x module 1000w, détecteur de fumée, contact de porte, 2x prise 3500w / OWL - CM180 / TRC02 v2 RGB 3M / Cheap - PIR, contact de porte

Neutrino
Messages : 1332
Enregistré le : 10 juil. 2015, 15:42
Localisation : Challans (85)
Contact :

Re: Durée de trajet avec Waze

Message par Neutrino » 27 nov. 2017, 19:52

La réponse est dans la question. :mrgreen:
ça ne marche pas depuis un navigateur, d'où le paramètre "--referer https://www.waze.com" pour que curl fasse croire que la requête vient du site.
Ma maison à plein d'IP ! :mrgreen:

Chrominator
Messages : 420
Enregistré le : 19 déc. 2015, 07:29

Re: Durée de trajet avec Waze

Message par Chrominator » 27 nov. 2017, 20:17

Ah oui oops, ça limite l'exécution du script aux périodes qui m'intéressent ; jamais les jours fériés (jf, dont le script est sur ce forum), pas les week-end, etc...
DEBUG est FALSE ou TRUE, ou vaut 0 ou 1.
LUA n'est pas très strict.... ;)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre