---------------------------------
-- 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-waz ... 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")()
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON_Waze.lua") ()
--variables à modifier----------------
--idx du capteur
idx = '69' -- Capteur de type texte pour afficher la durée du trajet et le nom de la principale route empruntée.
idx_curve = '70' -- Capteur de type voltmetre pour archiver les temps de parcours calculés
--coordonnées de départ
departx="-1.14082"
departy="48.84987"
--coordonnées d'arrivée
arrivex="-1.1329"
arrivey="48.63198"
---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 ... A'..arrive
x..'+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 ... rty..'&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%2
CALLOW_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
== nil then voie = "/ND" end
if xtime==nil then xtime=0 end
xtime=xtime+tonumber(results['crossTime'])
voir_les_logs(tostring(response).." "..results['crossTime'].." "..results['street'].." "..voie.." "..xtime)
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==voie[street] then
trajet=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)..' par  '..string.gsub(routeName, ' ', ' ')
commandArray[#commandArray+1]={['UpdateDevice'] =idx..'|0|' .. tostring(routeTotalTime)}
commandArray[#commandArray+1]={['UpdateDevice'] =idx_curve..'|0|' .. tostring(routeTotalTimeMin)}
end
return commandArray