[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.
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: [LUA] Durée de trajet avec Waze

Message par garycooper »

Merci pour ta réponse chrominator. J'ai copié le json que tu as mis en lien (plus récent que la version que j'avais), j'ai recopié ton script avec mes coordonnées, supprimé un [1] qui s'était glissé en trop
dans
routeName = jsonTrajet['response'][1][1]['route_name']
Le script s'est exécuté correctement une première fois puis maintenant j'ai 2 type de message d'erreur suivant :
2021-11-11 00:35:10.457 Error: EventSystem: Warning!, lua script /home/pi/domoticz/scripts/lua/script_time_waze_aller.lua has been running for more than 10 seconds
2021-11-11 00:35:15.947 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze_aller.lua: /home/pi/domoticz/scripts/lua/JSON.lua:836: HTML passed to JSON:decode(): <html>
2021-11-11 00:35:15.947 <head><title>502 Bad Gateway</title></head>
2021-11-11 00:35:15.947 <body>
2021-11-11 00:35:15.947 <center><h1>502 Bad Gateway</h1></center>
2021-11-11 00:35:15.947 <hr><center>nginx</center>
2021-11-11 00:35:15.947 </body>
2021-11-11 00:35:15.947 </html>
2021-11-11 00:35:15.947
ou
2021-11-11 00:27:06.666 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze_aller.lua: /home/pi/domoticz/scripts/lua/JSON.lua:1348: /home/pi/domoticz/scripts/lua/JSON.lua:1128: Lua script execution exceeds maximum number of lines
A toute fin utile, ma configuration est la suivante :
Raspberry Pi 4
Version Domoticz : 2021.1
Build Hash: 8547c5b7e
Compile Date: 2021-04-17 17:29:11
dzVents Version: 3.1.7
Python Version: 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0]
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Durée de trajet avec Waze

Message par Chrominator »

Désolé pour le [1] supplémentaire, j'ai modifié mon post.

Pour la première erreur 502 Bad Gateway, ça arrive de temps en temps, c'est le serveur de Waze qui est saturé et qui ne peut pas répondre ; il répondra la fois suivante.

Pour la seconde que je n'ai jamais eu, il semblerait que ce soit lié au nombre de lignes exécutées par Lua dans Domoticz, soit disant trop nombreuses.
Est-ce que tu aurais une boucle dans ton script qui durerait un peu longtemps si la condition tarde à venir ?
Les sujets que j'ai trouvé sur Internet incriminent à chaque fois une boucle.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: [LUA] Durée de trajet avec Waze

Message par garycooper »

J'ai essayé de mettre le point d'arrivée sur une plus grande route que le point précis où je voulais aller mais pas d'amélioration, j'ai toujours le message
2021-11-11 17:41:06.279 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze_aller.lua: /home/pi/domoticz/scripts/lua/JSON.lua:1348: /home/pi/domoticz/scripts/lua/JSON.lua:1128: Lua script execution exceeds maximum number of lines
. Ca ne recalcule pas l'itinéraire à chaque minute ou en tout cas ça ne met pas à jour le device text. Par contre, ça semble mettre à jour le device type "tension" dans lequel il y a le nombre de minutes de trajet.
Un autre souci, le temps notifié est beaucoup plus long que quand je le fais sur waze. Là ça m'indique 2h25 alors que par waze, ça me dit 1h49.
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Durée de trajet avec Waze

Message par Chrominator »

J'ai une piste :

D'abord le plus facile, pour la durée.
La requête (qui n'est pas documentée à ma connaissance) indique en option AVOID_TOLL_ROADS ce qui signifie en français éviter les routes à péage.
Ça peut expliquer la différence de durée :)

D'autre part, la requête charrie un tas de truc inutiles à mon avis (mais sans doc c'est difficile de s'y retrouver).
J'ai essayé un itinéraire partant de l'Oise jusqu'à un ponton à St Mandrier dans le Var : 73754 lignes de json à décoder, et la fameux message d'erreur qui indique trop de lignes...
En modifiant la requête et en ne laissant que la demande de json, c'est aussi fonctionnel, plus rapide et plus concis ; seulement 19992 lignes de json et là ça passe sur mon pi (avec péage), j'obtiens une durée de 7:32 dans le widget de type texte.

Essaie de remplacer la ligne

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

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&timeout=60000&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS"'))
Avec ça tes 2h de route devraient être de la rigolade. :D


Au fait, je ne connais pas la planification de cette détermination d'itinéraire dans ton Domoticz, mieux vaut éviter une fréquence trop élevée afin que Monsieur Waze ne se fâche pas et prenne des contre-mesures qui aboutiraient pour nous à une privation de ce service.
Genre un calcul toutes les 15 mn, ça paraît raisonnable.
Dernière modification par Chrominator le 12 nov. 2021, 03:43, modifié 1 fois.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: [LUA] Durée de trajet avec Waze

Message par garycooper »

Bien joué Chrominator ! hormis des logs à rallonge
LogWaze.JPG
LogWaze.JPG (84.66 Kio) Consulté 2729 fois
le script fonctionne parfaitement ! Est-ce qu'il est possible de modifier le device type "tension" de façon à retirer l'unité (V) et éventuellement passé le temps en heure plutôt qu'en minutes ?
J'ai tenté de remplacer

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] =idx_curve..'|0|' .. tostring(routeTotalTimeMin)}
par

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] =idx_curve..'|0|' .. tostring(routeTotalTime)}
mais ça ne me met que le nombre d'heures et pas les minutes.
Enfin, je me suis rajouté l'envoi d'une notif telegram avec le temps de route :

Code : Tout sélectionner

	commandArray[#commandArray+1]={['SendNotification']='#Le temps de route pour rentrer chez vous est de '.. os.date("!%X",routeTotalTimeSec) ..'. Bon retour chez vous !##1#0#telegram'}
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Durée de trajet avec Waze

Message par Chrominator »

Pour la trace dans les logs, tu auras sans doute remarqué que ça venait de la ligne

Code : Tout sélectionner

DEBUG=true
au début du script. En remplaçant par

Code : Tout sélectionner

DEBUG=false
tu n'auras plus la trace, mais le script sera assujetti à la planification via la ligne

Code : Tout sélectionner

---calcule du trajet entre 17h00 et 17h15
if (maintenant>=1020 and maintenant<= 1035 and weekday == Friday) or DEBUG then
Pour ce qui est de la représentation graphique du temps de trajet, on peut maintenant utiliser des "custom sensors" qui n'existaient pas à l'époque.

Tu peux créer un capteur de type custom sensor avec comme nom d'axe par exemple Durée.
Ensuite tu ajoutes ou mieux tu remplaces l'idx du capteur de type tension par celui du custom sensor (idx_duree dans mon exemple).
Pour mettre à jour ce capteur, la syntaxe est la suivante :

Code : Tout sélectionner

commandArray[#commandArray+1]={['UpdateDevice'] =idx_duree..'|0|' .. tostring(os.date("%H.%M", routeTotalTimeSec-3600))}
Çà fera une belle courbe comme celle là : :)
Screenshot 2021-11-12 at 04-40-43 Domoticz_dev.png
Screenshot 2021-11-12 at 04-40-43 Domoticz_dev.png (57.42 Kio) Consulté 2696 fois

Au passage, j'ignore pourquoi, le script que j'avais récupéré sur ton post duplique une partie des lignes, inutilement.
Ci-dessous une version épuré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
--
--	2021-11-10 : 	Mise à jour consécutive à des changements dans l'API (result, cross_time, street_name)
--					Ajout d'un custom sensor représentant la durée en heures/minutes
--
DEBUG=true

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 = '1051'				-- Capteur de type texte pour afficher la durée du trajet et le nom de la principale route empruntée.
idx_curve = '1052'			-- Capteur de type voltmetre pour archiver les temps de parcours calculés
idx_duree = '1061'			-- Affiche un graphique en heure/minutes
-- y = latitude et x = longitude
--coordonnées de départ
departx="2.2944990547869546"-- Tour Eiffel à Paris
departy="48.85859381443764"
--coordonnées d'arrivée		-- Ponton du Président à Saint Mandrier (83)
arrivex="5.924039882530613"
arrivey="43.078865356176664"
---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 17h00 et 17h15
if (maintenant>=1020 and maintenant<= 1035 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&timeout=60000&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS"'))
	local infowaze = waze:read('*all')
	waze:close()
	local jsonTrajet = json:decode(infowaze)
	--Noms des principales routes empruntées
	routeName = jsonTrajet['response'][1]['route_name']
	if routeName == nil then routeName="route non précisée" end
	--Liste des routes empruntées
	route = jsonTrajet['response'][1]['result']
	--Temps de trajet en secondes
	routeTotalTimeSec = 0
	--calcul du temps de trajet
	for response,results in pairs(route) do
		routeTotalTimeSec = routeTotalTimeSec + results['cross_time']
	end
	
	--Temps de trajet en minutes
	routeTotalTimeMin = routeTotalTimeSec/60-((routeTotalTimeSec%60)/60)

	-- Détermination des noms des routes employées
	xtime = {}
	route = jsonTrajet['response'][1]['result']
	voie = jsonTrajet['response'][1]['street_name']
	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['cross_time'])
		voir_les_logs(tostring(response).." "..results['cross_time'].." "..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[#commandArray+1]={['UpdateDevice'] =idx_duree..'|0|' .. tostring(os.date("%H.%M", routeTotalTimeSec-3600))}
	commandArray['Variable:Trajet-retour'] = tostring(routeTotalTimeMin)
end
return commandArray
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: [LUA] Durée de trajet avec Waze

Message par garycooper »

Merci ! J'ai mis à jour avec ta dernière version et je confirme que ça fonctionne parfaitement. Seul "défaut" observé : dans le custom sensor, si la durée de trajet est de 1h50, ça affiche 1.5h Ca peut prêter à confusion en laissant penser à 1h30 plutôt qu'1h50. Mais personnellement, ça me va.
Merci et bravo pour ce script !
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Durée de trajet avec Waze

Message par Chrominator »

Content que ça te rende service. :D

Ce n'est pas mon script mais celui de Neutrino, que j'ai adapté en fonction des évolutions de l'API.

Les abscisses des graphiques de Domoticz sont toujours le temps, les ordonnées sont numériques.
A ma connaissance, pas moyen d'utiliser des ordonnées qui soient au format horaire HH:MM comme tu l'aurais certainement voulu.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: [LUA] Durée de trajet avec Waze

Message par garycooper »

La commande à heure fixe ne fonctionnait pas. Il y fallait remplacer
local weekday = os.date('%w')
par
local weekday = os.date("%w")
Il fallait également mettre le jour en numérique et non pas en lettres.
De même, je ne trouvais pas très pratique de compter les minutes pour lancer le script. Du coup j'ai plutôt mis une consigne d'heure. Le script modifié (avec notification Telegram) devient donc :

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
--
--	2021-11-10 : 	Mise à jour consécutive à des changements dans l'API (result, cross_time, street_name)
--					Ajout d'un custom sensor représentant la durée en heures/minutes
--    2022-11-26 :    MàJ G@rycooper pour heure et jour de lancement du script + notification Telegram
--
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 = '119'				-- Capteur de type texte pour afficher la durée du trajet et le nom de la principale route empruntée.
idx_curve = '121'			-- Capteur de type voltmetre pour archiver les temps de parcours calculés
idx_duree = '120'			-- Affiche un graphique en heure/minutes
-- y = latitude et x = longitude
--coordonnées de départ
departx="2.2944990547869546"-- Tour Eiffel à Paris
departy="48.85859381443764"
--coordonnées d'arrivée		-- Ponton du Président à Saint Mandrier (83)
arrivex="5.924039882530613"
arrivey="43.078865356176664"

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

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

---calcul du trajet à 17h00
if ((maintenant=='17:00') and (otherdevices['Vacances']=='On') 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&timeout=60000&clientVersion=4.0.0&options=AVOID_TRAILS%3At%2CALLOW_UTURNS"'))
	local infowaze = waze:read('*all')
	waze:close()
	local jsonTrajet = json:decode(infowaze)
	--Noms des principales routes empruntées
	routeName = jsonTrajet['response'][1]['route_name']
	if routeName == nil then routeName="route non précisée" end
	--Liste des routes empruntées
	route = jsonTrajet['response'][1]['result']
	--Temps de trajet en secondes
	routeTotalTimeSec = 0
	--calcul du temps de trajet
	for response,results in pairs(route) do
		routeTotalTimeSec = routeTotalTimeSec + results['cross_time']
	end
	
	--Temps de trajet en minutes
	routeTotalTimeMin = routeTotalTimeSec/60-((routeTotalTimeSec%60)/60)

	-- Détermination des noms des routes employées
	xtime = {}
	route = jsonTrajet['response'][1]['result']
	voie = jsonTrajet['response'][1]['street_name']
	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['cross_time'])
		voir_les_logs(tostring(response).." "..results['cross_time'].." "..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[#commandArray+1]={['SendNotification']='#Le temps de route pour rejoindre votre destination est de '.. os.date("!%X",routeTotalTimeSec) ..' en passant par '..tostring (routeName) ..'. Passez un bon week-end !##1#0#telegram'}
	commandArray[#commandArray+1]={['UpdateDevice'] =idx_duree..'|0|' .. tostring(os.date("%H.%M", routeTotalTimeSec-3600))}
	commandArray['Variable:Trajet-retour'] = tostring(routeTotalTimeMin)
end
return commandArray
Bonne route !
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: [LUA] Durée de trajet avec Waze

Message par Chrominator »

Pour info, les deux notations que tu montres de weekday sont absolument équivalentes en lua.
Pièces jointes
Capture d’écran 2021-11-27 103125.png
Capture d’écran 2021-11-27 103125.png (6.15 Kio) Consulté 2337 fois
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Répondre