[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.
MAidEN91
Messages : 132
Inscription : 01 sept. 2015, 20:50

Re: Durée de trajet avec Waze

Message par MAidEN91 »

Hello,

J'ai testé ta version et effectivement j'obtiens la même erreur dès que je passe les itinéraires a + que 1...

Code : Tout sélectionner

2017-08-25 14:06:07.154 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze_test.lua: /home/pi/domoticz/scripts/lua/script_time_waze_test.lua:56: bad argument #1 to 'pairs' (table expected, got nil)
Le soucis vient donc de la boucle qui gère les chemins alternatifs mais je ne vois pas trop ou :

Code : Tout sélectionner

   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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

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 ?
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
sennheiser
Messages : 8
Inscription : 14 août 2017, 16:28

Re: Durée de trajet avec Waze

Message par sennheiser »

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
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

Merci :)

Le problème se situe chez Waze :( .
Le serveur met plus de 10 secondes à répondre, donc le script est dégagé par Domoticz...

Pour que ça marche, il faut que le script s'exécute en dehors de domoticz et lancé par cron par exemple.
Et là, plus de problème de timeout.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
jmv75013
Messages : 146
Inscription : 03 janv. 2017, 16:20

Re: Durée de trajet avec Waze

Message par jmv75013 »

Bonjour,

J'ai essayé le script ci-dessous et trajet retourne un chaine vide. Quelqu'un aurait une idée

Code : Tout sélectionner

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

faipassa
Messages : 13
Inscription : 01 juil. 2016, 09:14
Localisation : Lorraine, France

Re: Durée de trajet avec Waze

Message par faipassa »

Neutrino a écrit :Pour ceux qui veulent continuer à utiliser Waze plutot que gmaps, la solution vient de ce post :
http://www.domoticz.com/forum/viewtopic ... 00#p145454
Il faut changer :

Code : Tout sélectionner

local waze=assert(io.popen('curl  "https://www.waze.com/r...".')

par :

Code : Tout sélectionner

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.
pimseb
Messages : 30
Inscription : 04 sept. 2017, 12:46

Re: Durée de trajet avec Waze

Message par pimseb »

Salut,

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
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Durée de trajet avec Waze

Message par Phebus06 »

Bonjour,
Bon après avoir essayé d'installer ce script voici l'erreur que j'ai :

Code : Tout sélectionner

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


Si quelqu'un sait pourquoi ?
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Durée de trajet avec Waze

Message par Phebus06 »

Bon comme souvent je suis un neuneu, la réponse était juste au dessus ... :roll:
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Durée de trajet avec Waze

Message par Phebus06 »

et évidement j'ai une autre erreur :

Code : Tout sélectionner

 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 
Si quelqu'un a une idée ???
Répondre