Page 1 sur 1

Problème scrit waze

Publié : 25 avr. 2020, 16:28
par Wolfen38
Salut,

J'avais récupéré ici le script de waze et modifié un peu pour l'adapter à mon besoin.

Pendant des mois, ca tournait nickel, puis un jour, suite à un maj de dz, j'ai eu cett erreur :

Code : Tout sélectionner

2020-04-25 16:21:04.447 Status: EventSystem: Script event triggered: /home/pi/domoticz/scripts/lua/script_time_waze-T-M.lua
2020-04-25 16:21:04.447 Error: EventSystem: Error updating variable Trajet-retour: Not a valid integer
Sachant que "Trajet-retour" est une variable utilisateur déclarer en entier puisque je récupère des minutes.

Voici le code :

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

Re: Problème scrit waze

Publié : 25 avr. 2020, 18:59
par denis_brasseur
Il faut changer le type des variables de "Entier" à "Décimal", documenté dans pas mal de post......

Re: Problème scrit waze

Publié : 25 avr. 2020, 19:16
par Wolfen38
Ah ok merci

Envoyé de mon Mi 9T Pro en utilisant Tapatalk


Re: Problème scrit waze

Publié : 22 juil. 2020, 12:11
par Wolfen38
Bonjour,

Je viens de remettre en ligne ce script, et j'ai ce message dans les log :

Code : Tout sélectionner

2020-07-22 05:31:01.044 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze-M-T.lua: /home/pi/domoticz/scripts/lua/JSON.lua:808: HTML passed to JSON:decode():
2020-07-22 05:31:01.044 <html><head>
2020-07-22 05:31:01.044 <meta http-equiv="content-type" content="text/html;charset=utf-8">
2020-07-22 05:31:01.044 <title>502 Server Error</title>
2020-07-22 05:31:01.044 </head>
2020-07-22 05:31:01.044 <body text=#000000 bgcolor=#ffffff>
2020-07-22 05:31:01.044 <h1>Error: Server Error</h1>
2020-07-22 05:31:01.044 <h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
2020-07-22 05:31:01.044 <h2></h2>
2020-07-22 05:31:01.044 </body></html>
Ca peut venir de quoi d'après vous ?

Merci.

Re: Problème scrit waze

Publié : 22 juil. 2020, 23:11
par Keros
Tes logs montrent le texte brute d'une page HTML. Je pense que ce la vient de cette ligne :

Code : Tout sélectionner

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"')
Si tu rentres l''adresse dans ton navigateur, le code source de la page ne correspond pas à tes log ?

Après il faut déboguer et rajouter des prints pour trouver d'où vient cet affichage dans les logs.