itineraires = ""
for i, alternatives in pairs(jsonTrajet['alternatives']) do
if(i>1)then itineraires = itineraires .. " ou " end
--Noms des principales routes empruntées
routeName = alternatives['response']['routeName']
--Liste des routes empruntées
route = alternatives['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
Le problème doit effectivement venir de la boucle, mais je ne vois pas où.
A mon avis, waze ne trouve pas de chemin alternatif et le JSON renvoyé n'est du coup pas bien interprété.
L'un de vous peut-il m'envoyer leur version avec leur vraies coordonnées en MP histoire que je débugge ?
Neutrino a écrit :Le problème doit effectivement venir de la boucle, mais je ne vois pas où.
A mon avis, waze ne trouve pas de chemin alternatif et le JSON renvoyé n'est du coup pas bien interprété.
L'un de vous peut-il m'envoyer leur version avec leur vraies coordonnées en MP histoire que je débugge ?
C'est fait
Raspberry Pi 3 + Ecran tactile 7" raspberry
Domoticz
Interface Broadlink RM PRO
---------------------------------
-- Script de calcul de temps pour un trajet entre 2 coordonnées
-- Auteur : Aurelien Neutrino
-- Date : 22 mars 2016
-- Nécessite un capteur virtuel de type Text
-- source : http://www.domo-blog.fr/info-trajet-waze-eedomus-version-raspberry/
---------------------------------
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()--import des fontions pour lire le JSON
function aff_log (s,debuging)
if (debuging) then
print ("<font color='#f3031d'> ".. s .."</font>")
end
end
idx = '152' --idx du capteur
--coordonnées de départ y = latitude et x = longitude
departy="49.355966"
departx="0.513058"
--coordonnées d'arrivée
arrivey="48.955823"
arrivex="4.359103"
nbIti=1 --Nombre d'itinéraires possibles
local debuging=true
commandArray={}
now=os.date("*t")
if (now.min % 2 == 0) then -- Execution du script toutes les 15 minutes
aff_log("--------------------------",debuging)
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=6000&nPaths='..nbIti..'&options=AVOID_TRAILS%3At%2CALLOW_UTURNS"'))
local trajet = waze:read('*all')
waze:close()
heure = os.date("%X",time)
aff_log("-- Heure : "..heure,debuging)
if (trajet~= nil) then
aff_log("-- Trajet : "..trajet,debuging)
aff_log("-- Long : "..string.len(trajet),debuging)
local jsonTrajet = json:decode(trajet)
--formate la réponse pour un trajet
jsonTrajet1 = {}
jsonTrajet1['alternatives']={}
if (nbIti==1) then
jsonTrajet1['alternatives'][1] = jsonTrajet
jsonTrajet = jsonTrajet1
end
itineraires = ""
for i, alternatives in pairs(jsonTrajet['alternatives']) do
-- aff_log("-- Itinéraires : "..itineraires,debuging)
if(itineraires ~= "")then
itineraires = itineraires .. " ou "
end
routeName = alternatives['response']['routeName'] --Noms des principales routes empruntées
route = alternatives['response']['results'] --Liste des routes empruntées
aff_log("-- RouteName : "..routeName,debuging)
aff_log("-- Route : "..route,debuging)
--calcul du temps de trajet en secondes
routeTotalTimeSec = 0
for response,results in pairs(route) do
routeTotalTimeSec = routeTotalTimeSec + results['crossTime']
end
tps = os.date("%Hh:%Mmn",routeTotalTimeSec)
aff_log("-- RouteTotalTimeSec : "..routeTotalTimeSec,debuging)
aff_log("-- Tps : "..tps,debuging)
if (itineraires=="") then
itineraires = "A "..heure..", le temps de trajet était de "
end
itineraires = itineraires .. tps .." par ".. routeName
end
aff_log("-- Itinéraires : "..itineraires,debuging)
aff_log("--------------------------",debuging)
aff_log(" ",debuging)
commandArray[1]={['UpdateDevice'] =idx..'|0|' .. itineraires}
else
aff_log("-- Trajet : nil",debugging)
end
end
return commandArray
local waze=assert(io.popen('curl --referer https://www.waze.com "https://www.waze.com/r...."')
Salut,
Un grand merci pour cette solution. Mes scripts de calcul d’itinéraires ne fonctionnaient plus depuis cet été et je n'avais pas pris le temps de regarder de plus près pourquoi. Hier soir, je jette un œil au forum, tombe sur ton post et en 5 minutes, c'était réglé. Super
F.
Plateforme: 5 Raspbery pi2 + PiZero en réseau -- Domoticz 3.4834 + ImperiHome -- Interfaces: Zwave (Fibaro); Philips HUE; Capteurs filiaires et relais en tout genre.
J'ai pas encore installé ce script mais est ce qu'on pourrait l'utiliser comme base de lancement d'autres appareils connectés ? Comme par exemple si le temps de trajet est plus élevé que d'habitude, lancer un réveil plus tôt. Ou bien allumer une lumière en rouge... Pour éviter d'avoir à regarder le téléphone portable
2017-10-01 19:45:01.009 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_Duree_Vespins_Travail_Isa.lua: /home/pi/domoticz/scripts/lua/JSON.lua:660: html passed to JSON:decode():
403 Forbidden
nginx
2017-10-01 20:03:00.344 LUA: _________ Début du script Durée Trajet Vespins Travail Isa _________
2017-10-01 20:03:01.417 LUA: 16:09 par Boulevard René Cassin, Voie Pierre Mathis, Boulevard du Général Louis Delfino Nice ou 16:18 par Boulevard René Cassin, Voie Pierre Mathis, Avenue des Diables Bleus Nice ou 18:44 par Promenade Édouard Corniglion Molinier, Voie Pierre Mathis Nice
2017-10-01 20:03:01.420 Error: SQL Query("INSERT INTO LightingLog (DeviceRowID, nValue, sValue) VALUES ('52', '0', '16:09 par Boulevard René Cassin, Voie Pierre Mathis, Boulevard du Général Louis Delfino Nice ou 16:18 par Boulevard René Cassin, Voie Pierre Mathis, Avenue des Diables Bleus Nice ou 18:44 par Promenade Édouard Corniglion Molinier, Voie Pierre Mathis Nice')") : database disk image is malformed