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

Re: Durée de trajet avec Waze

Message par Phebus06 »

Bon c'est vraiment zarbi car les parcours s'inscrivent bien dans mon capteur virtuel text dans domoticz, mais quand je clic sur log et bien je n'ai rien d'écrit dedans ???

Si quelqu'un sait pourquoi j'ai cette erreur venant du script et comment la corriger, je suis preneur ;)
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

Soit c'est un problème de cache, soit c'est ta carte SD qui commence à montrer des signes de faiblesse.
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Durée de trajet avec Waze

Message par Phebus06 »

Hihihi je ne suis pas sur carte sd mais sur disque dur ;)

Je pense plutôt que ça vient du script donné car dans les autres capteurs virtuels texte que j'ai pour la lune par exemple ou le saint du jour ou encore les tremblements de terre etc... fonctionnent bien et j'ai bien l'historique dans le log des capteurs ???
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

Pour le dd, c'est good.
Par contre, pour le cache, ça peut pas faire de mal de l'effacer. => https://easydomoticz.com/les-caches-des ... -domoticz/
Je pense que le problème de log du capteur est lié à ton problème d'erreur sql.
Essaye :
http://www.domoticz.com/forum/viewtopic ... 4&p=126515
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Phebus06
Messages : 213
Inscription : 26 janv. 2017, 09:25

Re: Durée de trajet avec Waze

Message par Phebus06 »

Merci pour l'aide :)
Donc le cache est vidé...
Rien ne change.
Pour l'erreur SQL, j'ai regardé ton lien et de fil en aiguille plein d'autres. Pour moi ça fait un peu peur de commencer à tout bidouiller alors que pour l'instant tout fonctionne à part ces erreurs dans le log.

J'hésite du coup...
tonejay
Messages : 106
Inscription : 15 sept. 2017, 20:28

Re: Durée de trajet avec Waze

Message par tonejay »

Hello à tous !!

Hate de voir ce script tourner !! beau boulot !!
Pour l'instant j'a icette erreur...

Code : Tout sélectionner

2017-10-09 19:36:15.139 Error: EventSystem: in Script_Trajet_Tony: /home/pi/domotique/domoticz/scripts/lua/JSON.lua:783: HTML passed to JSON:decode():  
Et un joli logo google a la suite avec ecrit "400. That's an error"
"Your client has issued a malformed or illegal request. That’s all we know."

Une idée??
MisterT
Messages : 55
Inscription : 12 avr. 2015, 19:04

Re: Durée de trajet avec Waze

Message par MisterT »

Bonjour a tous
Je viens de m'apercevoir dans les logs de Domoticz que j'ai une erreur sur le script waze qui dit:

Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze.lua: /home/pi/domoticz/scripts/lua/script_time_waze.lua:76: attempt to concatenate global 'routeName' (a nil value)

Vu que je n'y comprends pas grand chose en lua, un petit coup de main serait le bienvenue

la ligne 76 correspond à:

itineraires = itineraires .. routeTotalTime.." par "..routeName

pour le script ci dessous:

Code : Tout sélectionner

---------------------------------
-- Script de calcul de temps pour un trajet entre 2 coordonnées
-- Auteur : Aurelien Neutrino
-- Date : 14 septembre 2015
-- Nécessite un capteur virtuel de type Text
-- source :
-- http://www.domo-blog.fr/info-trajet-waze-eedomus-version-raspberry/
---------------------------------
commandArray={}

--import des fontions pour lire le JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
--coordonnées à modifier----------------
--idx du capteur
idx = '166'
--coordonnées de départ
departx="5.099907"
departy="43.6302104"
--coordonnées d'arrivée
arrivex="5.237356"
arrivey="43.431573"

--Nombre d'itinéraires possibles
nbIti='1'

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

---calcule du trajet entre 6h et 7h
--if(maintenant>=360 and maintenant<= 420 and maintenant%2==0)then
   ----------------------------------------------------------------
   --Récupération du trajet et de sa durée en temps réel via WAZE--
   ----------------------------------------------------------------
   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&options=AVOID_TOLL_ROADS"'))
   local trajet = waze:read('*all')
   waze:close()
   
   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
      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

      --Temps de trajet en minutes
      routeTotalTimeMin = routeTotalTimeSec/60-((routeTotalTimeSec%60)/60)

      --mise en forme de la réponse
      if (routeTotalTimeSec%60<10)then
         routeTotalTime =  routeTotalTimeMin ..':0'..routeTotalTimeSec%60
      else
         routeTotalTime =  routeTotalTimeMin ..'mn'..routeTotalTimeSec%60
      end
      if(routeTotalTimeSec%60>=30)then
         routeTotalTimeMin = routeTotalTimeMin +1
      end
   itineraires = itineraires .. routeTotalTime.." par "..routeName
   end
   print(itineraires)
   commandArray[1]={['UpdateDevice'] =idx..'|0|' .. itineraires}
return commandArray

sinon, j'ai tenté de parametrer le script pour éviter les Autoroutes en ajoutant options=AVOID_TOLL_ROADS au script

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&options=AVOID_TOLL_ROADS"'))
   

mais cela ne fonctionne pas
la aussi si quelqu'un connait la soluce?

Merci pour les futures réponses
tonejay
Messages : 106
Inscription : 15 sept. 2017, 20:28

Re: Durée de trajet avec Waze

Message par tonejay »

MisterT a écrit :Bonjour a tous
Je viens de m'apercevoir dans les logs de Domoticz que j'ai une erreur sur le script waze qui dit:

Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_waze.lua: /home/pi/domoticz/scripts/lua/script_time_waze.lua:76: attempt to concatenate global 'routeName' (a nil value)

Vu que je n'y comprends pas grand chose en lua, un petit coup de main serait le bienvenue

la ligne 76 correspond à:

itineraires = itineraires .. routeTotalTime.." par "..routeName

pour le script ci dessous:

Code : Tout sélectionner

---------------------------------
-- Script de calcul de temps pour un trajet entre 2 coordonnées
-- Auteur : Aurelien Neutrino
-- Date : 14 septembre 2015
-- Nécessite un capteur virtuel de type Text
-- source :
-- http://www.domo-blog.fr/info-trajet-waze-eedomus-version-raspberry/
---------------------------------
commandArray={}

--import des fontions pour lire le JSON
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
--coordonnées à modifier----------------
--idx du capteur
idx = '166'
--coordonnées de départ
departx="5.099907"
departy="43.6302104"
--coordonnées d'arrivée
arrivex="5.237356"
arrivey="43.431573"

--Nombre d'itinéraires possibles
nbIti='1'

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

---calcule du trajet entre 6h et 7h
--if(maintenant>=360 and maintenant<= 420 and maintenant%2==0)then
   ----------------------------------------------------------------
   --Récupération du trajet et de sa durée en temps réel via WAZE--
   ----------------------------------------------------------------
   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&options=AVOID_TOLL_ROADS"'))
   local trajet = waze:read('*all')
   waze:close()
   
   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
      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

      --Temps de trajet en minutes
      routeTotalTimeMin = routeTotalTimeSec/60-((routeTotalTimeSec%60)/60)

      --mise en forme de la réponse
      if (routeTotalTimeSec%60<10)then
         routeTotalTime =  routeTotalTimeMin ..':0'..routeTotalTimeSec%60
      else
         routeTotalTime =  routeTotalTimeMin ..'mn'..routeTotalTimeSec%60
      end
      if(routeTotalTimeSec%60>=30)then
         routeTotalTimeMin = routeTotalTimeMin +1
      end
   itineraires = itineraires .. routeTotalTime.." par "..routeName
   end
   print(itineraires)
   commandArray[1]={['UpdateDevice'] =idx..'|0|' .. itineraires}
return commandArray

sinon, j'ai tenté de parametrer le script pour éviter les Autoroutes en ajoutant options=AVOID_TOLL_ROADS au script

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&options=AVOID_TOLL_ROADS"'))
   

mais cela ne fonctionne pas
la aussi si quelqu'un connait la soluce?

Merci pour les futures réponses
Meme erreur chez moi ...
bmath
Messages : 19
Inscription : 20 avr. 2017, 14:02

Re: Durée de trajet avec Waze

Message par bmath »

idem :<
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: Durée de trajet avec Waze

Message par Neutrino »

Et oui, l'api n'est pas officielle, et donc n'a pas de documentation.
Ceci devrait marcher :

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"'))
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
Répondre