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]
plouf34
Messages : 96
Enregistré le : 04 déc. 2016, 18:33

Re: Durée de trajet avec Waze

Message par plouf34 »

Bonjour
Qqun peut redonner la procédure d’install complète pour afficher 2 trajets (Luna, Json,...) pour un domoticz sur Synology?

KingOfIce
Messages : 28
Enregistré le : 02 juil. 2018, 11:42

Re: Durée de trajet avec Waze

Message par KingOfIce »

Dim33 a écrit :
07 déc. 2018, 22:06
KingOfIce a écrit :
06 déc. 2018, 21:03
Dim33 a écrit :
01 sept. 2018, 09:20
Bonjour,

Avec la dernière version de Domoticz, le script m'affiche une erreur : attempt to index local 'jsonTrajet' (a nil value).

Cette ligne de code est incriminée : routeName = jsonTrajet['response']['routeName']

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

Une idée ? Personne n'a le pb avec la dernière version stable de Domoticz ?

Merci.
Hello, idem pour moi :( T'as trouvé la raison ?
Le pb ne provient pas du script mais de Waze .... l'erreur devrait disparaître d'elle même.
Le problème semble surtout provenir de domoticz sur Syno... (et + probablement du "io.popen")
Je l'ai testé de plusieurs manières mais rien à faire ! Du coup, j'ai mis la commande curl dans un shell cronné (avec output du json dans un fichier : -o monfichier.json) et je viens lire ce json dans le script lua avec un simple io.open('monfichier.json') et ça fonctionne bien.
A creuser... (problème peut-être déjà connu mais rien trouvé pour l'instant)

Dim33
Messages : 200
Enregistré le : 29 janv. 2017, 23:19

Re: Durée de trajet avec Waze

Message par Dim33 »

Ce script a tourné sur un Syno puis sur un NUC. J'ai eu l'erreur une fois sur le NUC objet de mon dernier post (01/09), depuis l'erreur n'ait jamais réapparu.
Aucun pb sur Syno.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 4.10717

Dim33
Messages : 200
Enregistré le : 29 janv. 2017, 23:19

Re: Durée de trajet avec Waze

Message par Dim33 »

Datawolf a écrit :
09 déc. 2018, 09:54
Bien sur que ça tourne le weekend. Jusqu'au if weekday ~= 0 et çà sort. ;)
Pour ma part, le calcul du trajet est calculé et affiché le weekend.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 4.10717

Datawolf
Messages : 221
Enregistré le : 03 avr. 2018, 13:51

Re: Durée de trajet avec Waze

Message par Datawolf »

Pas chez moi.

Wolfen38
Messages : 1353
Enregistré le : 19 oct. 2017, 14:49

Re: Durée de trajet avec Waze

Message par Wolfen38 »

Pareil chez moi, 7j/7

Wolfen38
Messages : 1353
Enregistré le : 19 oct. 2017, 14:49

Re: Durée de trajet avec Waze

Message par Wolfen38 »

Salut,

Mon scipt fonctionnait bien, et depuis 15j j'ai cette erreur "Error updating variable Trajet-retour: Not a valid integer"

Vous voyez ce qui a pu se passer ?

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 = '146'				-- Capteur de type texte pour afficher la durée du trajet et le nom de la principale route empruntée.
idx_curve = '149'		-- Capteur de type voltmetre pour archiver les temps de parcours calculés
-- y = latitude et x = longitude
-- exemple pour paris : 
-- departx="2.2903622"
-- departy="48.8582546"
--coordonnées de départ
departx="4.924234"
departy="45.772608"
--coordonnées d'arrivée
arrivex="5.453485"
arrivey="45.614734"

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

---calcule du trajet entre 16h00 et 16h30 sauf W-E et jours fériés
--
if (maintenant>=960 and maintenant<= 990 and uservariables["jf"] == "false" and weekday ~= 6 and weekday ~= 0 and weekday ~= 5) 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)}
	commandArray['Variable:Trajet-retour'] = tostring(routeTotalTimeMin)
end

if (maintenant>=715 and maintenant<= 725 and uservariables["jf"] == "false" and weekday == Friday) 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)}
	commandArray['Variable:Trajet-retour'] = tostring(routeTotalTimeMin)
end


return commandArray

Répondre