Sakkhho Posté(e) le 12 novembre 2015 Signaler Posté(e) le 12 novembre 2015 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 :-) 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 http://api-ratp.pierre-grimaud.fr/v2/rers/a ou ici http://api-ratp.pierre-grimaud.fr/v2/metros/1 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. Etat_Trafic.vfib 2
Sakkhho Posté(e) le 12 novembre 2015 Auteur Signaler Posté(e) le 12 novembre 2015 Pas 1 parisien sur le fofo, j' y crois pas
Sakkhho Posté(e) le 12 novembre 2015 Auteur Signaler Posté(e) le 12 novembre 2015 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" } }
Lazer Posté(e) le 14 novembre 2015 Signaler Posté(e) le 14 novembre 2015 tu veux faire quoi exactement ? déjà essaye ça : fibaro:debug(jsonTable.reponse.rers.title)
Sakkhho Posté(e) le 14 novembre 2015 Auteur Signaler Posté(e) le 14 novembre 2015 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)
Lazer Posté(e) le 14 novembre 2015 Signaler Posté(e) le 14 novembre 2015 c'est "response" (an anglais)
Sakkhho Posté(e) le 14 novembre 2015 Auteur Signaler Posté(e) le 14 novembre 2015 oui exact mais [ERROR] 18:26:59: line 8: attempt to index field 'rers' (a nil value)
Lazer Posté(e) le 14 novembre 2015 Signaler Posté(e) le 14 novembre 2015 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)
Sakkhho Posté(e) le 14 novembre 2015 Auteur Signaler Posté(e) le 14 novembre 2015 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) :-(
Lazer Posté(e) le 14 novembre 2015 Signaler Posté(e) le 14 novembre 2015 si tu appelles la page http://api-ratp.pierre-grimaud.fr/v2/traffic/rers.json c'est normal dans ton premier post tu mets que c'est http://api-ratp.pierre-grimaud.fr/v2/traffic/rers petite confusion je pense
Sakkhho Posté(e) le 14 novembre 2015 Auteur Signaler Posté(e) le 14 novembre 2015 Quel boulet !! merci je vais avancé avec ça; [DEBUG] 19:00:31: Trafic normal [DEBUG] 19:00:31: Travaux
Did Posté(e) le 15 novembre 2015 Signaler Posté(e) le 15 novembre 2015 @Sakkhho, Voici ton icône en version rouge
flechg Posté(e) le 17 novembre 2015 Signaler Posté(e) le 17 novembre 2015 je suis novice mais si cela peut t aider http://www.abavala.com/integrer-les-horaires-du-transilien-domotique/
flechg Posté(e) le 17 novembre 2015 Signaler Posté(e) le 17 novembre 2015 je penses que cela sera plus productif https://ressources.data.sncf.com/explore/dataset/api-temps-reel-transilien/?tab=metas
Sakkhho Posté(e) le 18 novembre 2015 Auteur Signaler Posté(e) le 18 novembre 2015 Merci j'avance un peu meme si j'ai pas beaucoup de temps pour regarder en détails teaser ... 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 :-))
Sakkhho Posté(e) le 21 novembre 2015 Auteur Signaler Posté(e) le 21 novembre 2015 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.
Moicphil Posté(e) le 21 novembre 2015 Signaler Posté(e) le 21 novembre 2015 Bravo ! tu veux pas éditer ton 1ier message avec mini-tuto stp ? on pourra le partager aussi sur le blog
CASINOS Posté(e) le 21 novembre 2015 Signaler Posté(e) le 21 novembre 2015 Cela parait pas mal, pourrais tu le partager Merci
Sakkhho Posté(e) le 21 novembre 2015 Auteur Signaler Posté(e) le 21 novembre 2015 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 !
Acetray Posté(e) le 22 novembre 2015 Signaler Posté(e) le 22 novembre 2015 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)
Sakkhho Posté(e) le 22 novembre 2015 Auteur Signaler Posté(e) le 22 novembre 2015 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
Sakkhho Posté(e) le 25 novembre 2015 Auteur Signaler Posté(e) le 25 novembre 2015 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.
Messages recommandés