Aller au contenu
Sakkhho

Info Trafic & Horaires Rer/metro Parisiens

Recommended Posts

Hello
 
Faisant suite au VD de Krikroff avec Waze, je me suis dit que cela sera sympa d'avoir un VD 'info trafic transport'
J'ai donc regarder les api de dispo
 
J'ai trouvé un API d'un mec bien sympa qui récupère les infos RATP (Metro et RER partie RATP)
 
Avec mes très faibles connaissances, j'ai donc bricolé un petit VD pour récupérer l’état du trafic et aussi l'horaire d'un prochain train ... (merci à  Lazer également)
 
à‡a doit être très perfectible, donc si vous avez des idées d’optimisation, en ce jours de HC2 surchargé c'est toujours bien de partager :-)
 
 
C'est pas un VD "universel", dans le sens ou vous allez avoir besoin de modifier 2/3 choses dans le code pour l'adapter à  vos stations/lignes habituelles.
si vraiment il y a un besoin, on pourrait faire quelque chose de plus propre.
 
 
 
Avec l’état du trafic je push des nofifs avec GEA, on pourrait aussi le mettre ce push dans le main loop avec un sleep. 
Dans mon cas perso, je remonte l’état du RER A et du metro1 et je push toutes les 15Mn l’état trafic du RER si trafic perturbé
 
 
 
Je remonte aussi l'horaire temps réel du prochain RER, qui part de la Défense à  destination de la maison :-)
 
840121Sanstitre2.png
 
 
Avant d'importer le VD, vous allez devoir créer un variable : EtatTrafic , sans valeur particulière.
 
Dans le code il faut modifier :
1/les IDs de vos icônes (merci à  Did)

local TraficOk = 1121
local TraficNok = 1122
 
2/pour la partie RER, si vous voulez le A mettre un 1 si vous voulez le B un 2

local LineRer = jsonTable.response.rers[1].line
local EtatRer = jsonTable.response.rers[1].title
local EtatLongRer = jsonTable.response.rers[1].message
3/pour le metro, idem suivant votre ligne 1,2 etc...

local LineMetro = jsonTable.response.metros[1].line
local EtatMetro = jsonTable.response.metros[1].title
 
si vous voulez faire un push plutôt sur le métro que sur le RER, suffit de remplacer la ligne

local EtatLongRer = jsonTable.response.rers[1].message
par

local EtatLongRer = jsonTable.response.metros[1].message
avec bien sur le paramètre [1] qui vous correspond et aussi d'ajuster les labels ... (je pourrais aider si besoin c'est pas compliqué)
 
3/Pour la partie horaire
un poil plus compliqué (faudrait créer des variables locales pour faire plus simple ...) 
mais grosso modo
allez ici 
ou ici
 
en modifiant bien sur le N° de la ligne qui vous intéresse.
et récupérer le 'slug' de votre ligne et la destination
et modifier l'appel API en conséquence

local response ,status, err = TRAFIC:GET("/v2/rers/a/stations/grande+arche+la+defense?destination=st+germain+en+laye+poissy+cergy")
 
ensuite la boucle

for i=1, Max do
    if jsonTable.response.schedules[i].destination == "Poissy" then
      ProchainRer = jsonTable.response.schedules[i].message 
      break  
    elseif jsonTable.response.schedules[i].destination == "Cergy-Le Haut"  then
      ProchainRer = jsonTable.response.schedules[i].message
      break
    else ProchainRer = 0
    end
end
 
est pour mon cas particulier car j'ai 2 possibilités de desitnations pour rentrer. A adapter suivant vos cas.
 
Ensuite je rafraichi le VD et push l'état du trafic avec GEA
 
-- Push Trafic  
    GEA.add(true, 2*60, "", {{"VirtualDevice", id["ETAT_TRAFIC"], 1},{"Repeat"}}) -- Refresh toutes les 2mn l'etat du trafi 
    GEA.add ({"Global!", "EtatTrafic", "OK"}, 15*60, "#value#",{{"Repeat"}}) -- Push Etat toutes les 15mn si NOK
 
Voilà  en gros, je suis désolé c'est pas plug en play, mais c'est pas très compliqué à  modifier, car moi même j'ai réussi lol
Si il y a un intérêt plus important, je pourrai regarder pour faire quelque chose de plus facile à  intégrer chez vous.
 
J'essai de regarder maintenant la partie TRANSCILIEN, ça fonctionne de la même façon avec l'API Transicilien, sauf que je récupérer un XML et pas un JSON, donc je sais pas trop comment le lire ... 
idem si intérêt, on peut regarder ensemble.

post-1196-0-91026400-1448103510_thumb.png

post-1196-0-04288900-1448103518_thumb.png

Etat_Trafic.vfib

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

si quelqu'un peut m'aider pour avoir la bonne syntaxe pour ce son ça serait top

(je sais suis vraiment un débutant...)

{
    "response": {
        "rers": [
            {
                "line": "A",
                "slug": "normal",
                "title": "Trafic normal",
                "message": "Trafic normal sur l'ensemble de la ligne."
            },
            {
                "line": "B",
                "slug": "normal",
                "title": "Trafic normal",
                "message": "Trafic normal sur l'ensemble de la ligne."
            }
        ]
    },
    "_meta": {
        "version": "2",
        "date": "2015-11-12T20:13:46+01:00",
        "call": "GET /traffic/rers"
    }
}

Partager ce message


Lien à poster
Partager sur d’autres sites

tu veux faire quoi exactement ?

 

déjà  essaye ça :

fibaro:debug(jsonTable.reponse.rers.title)

Partager ce message


Lien à poster
Partager sur d’autres sites

salut

je veux récupérer les infos pour faire du push par exemple et me donner l'état du trafic, mais aussi je pourrais aller chercher les prochains horaires etc...

j'essai de comprendre comment remonter l'info de ce json

J'avais réussi avec le json de WeatherUnderground mais la rien

 

j'avais essayé de ce que tu proposes mais j'obtiens

[ERROR] 18:08:16: line 8: attempt to index field 'reponse' (a nil value)

Partager ce message


Lien à poster
Partager sur d’autres sites

oui exact mais

[ERROR] 18:26:59: line 8: attempt to index field 'rers' (a nil value)

Partager ce message


Lien à poster
Partager sur d’autres sites

arf en effet, c'est un tableau (avec le crochet)

 

Essaye comme ça

fibaro:debug(jsonTable.response.rers[1].title)
fibaro:debug(jsonTable.response.rers[2].title)

Partager ce message


Lien à poster
Partager sur d’autres sites

Me semble que j avais essayé. Mais je retente.
Merci pour ton aide en tout cas

 

EDIT/ 

[ERROR] 18:33:58: line 8: attempt to index field 'rers' (a nil value)

:-(

Partager ce message


Lien à poster
Partager sur d’autres sites

Quel boulet !!

merci je vais avancé avec ça;

[DEBUG] 19:00:31: Trafic normal
[DEBUG] 19:00:31: Travaux

Partager ce message


Lien à poster
Partager sur d’autres sites

@Sakkhho,

Voici ton icône en version rouge

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci

 

j'avance un peu meme si j'ai pas beaucoup de temps pour regarder en détails

teaser ...

 

647817Sanstitre.png

 

par contre quelques problemes

 

je JSON horaires remonte plusieurs informations sur des trains qui ne m’intéresse pas.

Afin d'avoir l'horaire du prochain train qui m'interesse j'essai qq chose comme cela :

 

du coup ce que j'essai de faire. c'est balayer le JSON (de 1 à  5) et quand je trouve l'info je sors de la boucle.

mais ca marche pas comme je veux...

local Max = 5
while ProchainRer == "" do
for i=1, Max do
    if jsonTable.horaires[i].terminus == "StationA" then
      ProchainRer = jsonTable.horaires[i].horaire   
    elseif jsonTable.horaires[i].terminus == "StationB"  then
      ProchainRer = jsonTable.horaires[i].horaire
    else ProchainRer = ""
    end
  end
end  

je precise que si je mets pas la boucle et que je garde cela le 1er horaire [1] ca fonctionne.

    if jsonTable.horaires[1].terminus == "StationA" then
      ProchainRer = jsonTable.horaires[1].horaire   
    elseif jsonTable.horaires[1].terminus == "StationB"  then
      ProchainRer = jsonTable.horaires[1].horaire
    else ProchainRer = "A venir"
    end



une idée ? (je sais c'est codé avec les pieds :-))

Partager ce message


Lien à poster
Partager sur d’autres sites

bon j'ai fait ca et ca marche...

local ProchainRer = 0
local Max = 5
for i=1, Max do
    if jsonTable.response.schedules[i].destination == "StationA" then
      ProchainRer = jsonTable.response.schedules[i].message 
      break  
    elseif jsonTable.response.schedules[i].destination == "StationB"  then
      ProchainRer = jsonTable.response.schedules[i].message
      break
    else ProchainRer = 0
    end
end

pas taper :) si c'est vraiment dégeux :-)

 

 

si qq'un est intéressé par le VD, dite le. je precise que c'est uniquement pour un réseau RATP encore.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bravo !   :)  tu veux pas éditer ton 1ier message avec mini-tuto stp ? on pourra le partager aussi sur le blog  ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

1er message édité, avec un pseudo tuto que j'espère assez clair.

A déplacer peut être dans la bonne categorie

 

A votre dispo.

Bon ap !

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon tuto  ;) Dommage qu'il n'y ait pas encore les lignes C et D du RER :( .

Sinon petite précision : "Le nombre de requêtes journalières est fixé à  1000 et il n'est possible de faire qu'une toutes les 15 secondes." (source : Auteur de l'API)

Partager ce message


Lien à poster
Partager sur d’autres sites

pour le C & D

c'est possible via l'api transcilien

mets on récupère un XML pas un JSON.

 

Ca fonctionne bien, mais je sais pas comment faire avec un XML que tu telecharges

Partager ce message


Lien à poster
Partager sur d’autres sites

 

Sinon petite précision : "Le nombre de requêtes journalières est fixé à  1000 et il n'est possible de faire qu'une toutes les 15 secondes." (source : Auteur de l'API)

 

Avec la V2 que j'utilise c'est plus vrai.

Le nombre de requêtes journalières n'est plus limité. Cependant, un cache serveur de 15 secondes a été mis en place.

Partager ce message


Lien à poster
Partager sur d’autres sites

×