minos Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 il y a 4 minutes, MAM78 a dit : tu peux m'envoyer ton code Token en MP c 'est envoyé ....
minos Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 Bon , je ne sais pas pourquoi ....et je ne cherche pas à comprendre....mais voilà grosse avancé ......sur le sujet ...
Sakkhho Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 (modifié) genial :-) Modifié le 11 juillet 2017 par Sakkhho
minos Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 Pour mon cas , sur le printscreen ci-dessus : j 'ai le prochain départ depuis la gare de Chalon et l'heure d'arrivée à Dijon => cool . Est ce possible à ton avis de prendre en compte les trains qui arrivent depuis Lyon ou macon (pas macron !! ) avec l'arrêt à chalon sur saone en direction de dijon et/ou de paris... dans le même VD?? pffff , dur dur ma question ...
Sakkhho Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 @minos, c'est la meme ligne ? @MAM78 bravo, peut on prévoir, dans le meme VD, le trajet Aller et le meme trajet retour ?
minos Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 Pour etre plus clair en fait : sur ma ligne j'ai des trains : qui partent de chalon vers Dijon => ça OK des trains qui partent de Macon vers Dijon ou Paris et qui s'arrête à Chalon => possible ? des trains qui partent de Lyon à destination de dijon ou Paris aussi qui s'arrête à chalon => possible ? j’espère que c'est plus clair ... voilou en tout cas merci bien ...super cool !!!!
Sakkhho Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 Pas contre il m indique trafic ok alors que c est pas le cas.cf RATP.
MAM78 Posté(e) le 11 juillet 2017 Auteur Signaler Posté(e) le 11 juillet 2017 Pourrais-tu nous indiquer un exemple avec des horaires précis en prenant 2 trains qui correspondent aux cas que tu sites.
MAM78 Posté(e) le 11 juillet 2017 Auteur Signaler Posté(e) le 11 juillet 2017 il y a 1 minute, Sakkhho a dit : Pas contre il m indique trafic ok alors que c est pas le cas.cf RATP. Je n'ai pas encore pu vérifier des cas précis sur le perturbations de trafics.
minos Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 (modifié) il y a 16 minutes, MAM78 a dit : Pourrais-tu nous indiquer un exemple avec des horaires précis en prenant 2 trains qui correspondent aux cas que tu sites. voilà 2 cas précis avec les horaires : train partant de Macon => Paris Bercy (Terminus) avec Arrêt à Chalon sur Saône Cas 2 : train partant de Lyon Perrache => Dijon (Terminus) avec Arrêt à Chalon sur Saône Et le cas 3 : ce sont les trains partant de Chalon/Saône => ceux fonctionnent déjà avec le VD Modifié le 11 juillet 2017 par minos
minos Posté(e) le 11 juillet 2017 Signaler Posté(e) le 11 juillet 2017 oups un minas superflu...je n'arrive pas l'enlever....sorry
MAM78 Posté(e) le 11 juillet 2017 Auteur Signaler Posté(e) le 11 juillet 2017 c'est quel itinéraire que tu souhaiterais te voir proposé dans les cas que tu sites ?
MAM78 Posté(e) le 11 juillet 2017 Auteur Signaler Posté(e) le 11 juillet 2017 Ok je pense avoir compris ton problèmes. Le VD te propose le prochain train disponible qui passe à Chalon, soit celui de 05:52 Toi tu voudrais voir dès à présent le train suivants, soit celui 06:37 Dans la logique actuelle du VD tu seras le train de 06:37 demain matin lorsqu'il sera 05:53 (soit après le départ du premier train) Afin de pouvoir satisfaire ta demande, il me faut modifier le VD pour pourvoir balayer les différents itinéraires et pas seulement le prochain. Je vais essayer d'intégrer cette fonctionnalité. Ce ne devrait pas être trop compliqué à mettre en place avec l'utilisation de 2 boutons (Train Suivant et Train Précédent). Au boulot
MAM78 Posté(e) le 12 juillet 2017 Auteur Signaler Posté(e) le 12 juillet 2017 (modifié) C'est fait. Voici une nouvelle version 0.3. Cette nouvelle version apporte la possibilité de parcourir les différents itinéraire selon leur ordre de départ. Il suffit d'utiliser les 3 boutons du VD : 1er bouton recherche du prochain train au départ 2ème bouton recherche du train suivant 3ème bouton recherche du train précédent si l'itinéraire courant est supérieur à 1 Le premier label indique le Nième itinéraire courant. Pour le moment, j'ai limité à 5 départs. Mais cela pourra être modifié facilement, si nécessaire. 1) Veuillez installer le nouveau VD ci-dessous : Itinéraire_SNCF.vfib.json Attention de bien : copier vos codes Station de départ et d'arrivée dans chacun des 3 boutons modifier la variable SceneID_Iti_SNCF par l'ID de la Scène Itinéraire SNCF 2) Veuillez charger le nouveau code de la scène : Attention de bien : modifier le contenu de la variable User_API_Sncf par votre identifiant encodé en 64 dans la scène modifier l'ID de votre Scène Sonos dans la variable SceneID_Sonos (si vous en possédez une enceinte) 3) Bons tests PS : Les étapes suivantes du projet seront probablement consacré à la décomposition du parcours par étape si le trajet n'est pas direct la mixité des modes de transport entre (Trains, RER, BUS, Metro) l'identification des incidents sur le trafic Si vous avez d'autres idées, vous pouvez toujours faire vos demandes --[[ %% properties %% events %% globals --]] ---------------------------------------------------------------------------------- -- Name : HC2 SNCF Itinéraire -- Type : Virtual Device & Scene -- Cette scène permet d'obtenir l'horaire du prochain train au départ d'une gare ---------------------------------------------------------------------------------- -- Le Projet : -- Construire Virtual Device Affichant les données reccupérées -- avec en option une notification vocale sur une enceinte SONOS en mode TTS ---------------------------------------------------------------------------------- -- Version : 0.3 -- Création : MAM78 -- Date MAJ : 12/07/2017 -- -- Evolutions : -- V0.1 09/07/2017 : Initialisation du projet -- V0.2 10/07/2017 : Association de la scène à un VD qui appel la scène en -- passant les paramètres de la recherche d'itinéraire -- V0.3 12/07/2017 : Ajouts de boutons de navigation pour parcourir les diférents -- itinéraires par odre chronologique des départs ---------------------------------------------------------------------------------- -- User variables local SceneID_Sonos = 61 local modetrace = true local modedebug = true ---------------------------------------------------------------------------------- -- Pour pouvoir utiliser l'API de la SNCF, vous devez vous créer un compte sur : -- https://data.sncf.com/api -- Une fois votre compte créé vous recevrez un mail avec une clé d’authentification -- Puis, vous devez vous connecter au site : -- https://www.base64encode.org -- Puis, encoder la clef reçu dans le mail ci-dessus -- Copier ce code dans la vadiable ci-dessous (User_API_Sncf) ---------------------------------------------------------------------------------- local User_API_Sncf = "placé ici votre code API SNCF encodé en 64" ---------------------------------------------------------------------------------- -- Ne pas modifier le code ci-dessous, sinon pour l'adapter à votre usage ---------------------------------------------------------------------------------- local TimeOut = 3000 ---------------------------------------------------------------------------------- -- Message pour mode Trace ---------------------------------------------------------------------------------- function Trace(color, message) if modetrace then if color and color ~= "" then fibaro:debug('<span style="color:'..color..';">'..message..'</span>') else fibaro:debug(message) end end end ---------------------------------------------------------------------------------- -- Message pour mode Debug ---------------------------------------------------------------------------------- function Debug(color, message) if modedebug then if color and color ~= "" then fibaro:debug('<span style="color:'..color..';">'..message..'</span>') else fibaro:debug(message) end end end function SetUI(id, target, value) fibaro:call(id, "setProperty", "ui."..target..".value", value); end function SetUI_label(id, target, value) fibaro:call(id, "setProperty", "ui."..target..".label", value); end ---------------------------------------------------------------------------------- -- Retourne le jour de la semaine en clair ---------------------------------------------------------------------------------- function josdGetJourSemaine(jour) josdGetJourSemaineTab={[0]="Dimanche",[1]="Lundi",[2]="Mardi",[3]="Mercredi",[4]="Jeudi",[5]="Vendredi",[6]="Samedi"} return josdGetJourSemaineTab[tonumber(jour)] end ---------------------------------------------------------------------------------- -- Conversion format date "aaaammjjThhmmss" en format date ---------------------------------------------------------------------------------- function Conversion_Date(dateheure) local TableDate = os.date("*t") TableDate.day = string.sub (dateheure, 7, 8) TableDate.month = string.sub (dateheure, 5, 6) TableDate.year = string.sub (dateheure, 1, 4) TableDate.hour = string.sub (dateheure, 10, 11) TableDate.min = string.sub (dateheure, 12, 13) return (os.time(TableDate)) end function Affiche_Iti(data) local Num_Iti = fibaro:get(VD_Id, "ui.lblNum.value") Num_Iti = tonumber(Num_Iti) Trace("blue","Traitement Iti : "..Num_Iti) --fibaro:call(VD_Id, "setProperty", "ui.lblDep2.label", "♈") --fibaro:call(VD_Id, "setProperty", "ui.lblDep2.label", "XX\00000aXX") SetUI(VD_Id, "lblLigne", data.journeys[Num_Iti].sections[1].display_informations.commercial_mode .." / "..data.journeys[Num_Iti].sections[1].display_informations.code) SetUI(VD_Id, "lblFrom", data.journeys[Num_Iti].sections[1].from.stop_point.name) SetUI(VD_Id, "lblTo", data.journeys[Num_Iti].sections[1].to.stop_point.name) SetUI(VD_Id, "lblDir", data.journeys[Num_Iti].sections[1].display_informations.direction) if data.journeys[Num_Iti].status =="" then SetUI(VD_Id, "lblTrafic", "normal") else SetUI(VD_Id, "lblTrafic", data.journeys[Num_Iti].status) end local Date_Time = Conversion_Date(data.journeys[Num_Iti].sections[1].departure_date_time) local Lbl_message = "Départ à "..os.date("%H:%M", Date_Time) local Date_Time = Conversion_Date(data.journeys[1].sections[1].arrival_date_time) Lbl_message = Lbl_message .." Arrivée à "..os.date("%H:%M", Date_Time) SetUI(VD_Id, "lblDep1", Lbl_message) end ---------------------------------------------------------------------------------- -- Traitement des données en provenance de l'IPA SNCF ---------------------------------------------------------------------------------- function GetData() Debug("grey","T1".." - "..Iti_Titre) -- https://api.sncf.com/v1/coverage/sncf -- /journeys? -- from=stop_area:OCE:SA:87382473& -- to=stop_area:OCE:SA:87382218& -- datetime='20170716T040000'& -- datetime_represents=departure& -- min_nb_journeys=4 local api_url = "https://api.sncf.com/v1" local api_coverage = "sncf" local api_fonction = "journeys?" local api_from = code_api_from local api_to = code_api_to local api_datetime = os.date("%Y%m%dT%H%M00", os.time()) local api_datetime_represents = "departure" local api_min_nb_journeys = "5" local Query = api_url local Query = Query .. "/coverage/" .. api_coverage local Query = Query .. "/" .. api_fonction local Query = Query .. "from=" .. api_from.."&" local Query = Query .. "to=" .. api_to.."&" local Query = Query .. "datetime=" .. api_datetime.."&" local Query = Query .. "datetime_represents=" .. api_datetime_represents.."&" local Query = Query .. "min_nb_journeys=" .. api_min_nb_journeys Debug("grey","T2".." - "..Iti_Titre) local http = net.HTTPClient({ timeout = TimeOut }) Debug("grey","T3".." - "..Iti_Titre) Debug("grey",Query) local ok = pcall(function() http:request(Query, { options = { method = 'GET', headers ={ ["Content-Type"] = "application/json", ["Authorization"] = "BASIC "..User_API_Sncf}, data = body }, success = function(response) Debug("grey","T4".." - "..Iti_Titre) if response.status == 200 then Debug("grey","T5".." - "..Iti_Titre) Trace("blue","Traitement ok : "..Iti_Titre) local status, data = pcall(json.decode, response.data) if (status and data) then Affiche_Iti(data) Trace("green","Départ : "..data.journeys[1].sections[1].from.stop_point.name) Trace("green","Direction : "..data.journeys[1].sections[1].to.stop_point.name) local Date_Time = Conversion_Date(data.journeys[1].sections[1].departure_date_time) local Horaire = tostring(tonumber(os.date("%H", Date_Time))) .. " heure ".. tostring(tonumber(os.date("%M", Date_Time))) local JourSemaine = josdGetJourSemaine(os.date("%w", MonHeure)) -- Test pour vérifier si le prochain départ est pour le jour même if os.date("%Y/%m/%d",Date_Time) == os.date("%Y/%m/%d",time) then Prochain_Depart = "aujourd'hui" else Prochain_Depart = JourSemaine end Trace("green", "Prochain départ "..Prochain_Depart.." à " ..os.date("%H:%M", Date_Time)) message = "Prochain départ" message = message .. " "..Prochain_Depart message = message .. " de "..Msg_Depart message = message .. " pour "..Msg_Arrivee message = message .. " a ".. Horaire local Date_Time = Conversion_Date(data.journeys[1].sections[1].arrival_date_time) local Horaire = tostring(tonumber(os.date("%H", Date_Time))) .. " heure ".. tostring(tonumber(os.date("%M", Date_Time))) local JourSemaine = josdGetJourSemaine(os.date("%w", Date_Time)) message = message .. " Arrivée à "..Horaire Trace("green", "Arrivée à " ..os.date("%H:%M", Date_Time)) -- Envoi d'un message sur l'enceinte SONOS if Msg_Sonos == "OUI" then Debug("grey", "Envoi Message sur enceinte SONOS") fibaro:startScene(SceneID_Sonos, {{msg = message}, {vol = Volume_Sonos}}) end else Trace("orange"," Attention : Aucunes données à traiter") end else Debug("grey","T6".." - "..Iti_Titre) Trace("yellow","Traitement ko : "..Iti_Titre) if response.status == 500 or response.status == 503 then Trace("orange","Erreur d'indisponibilité du serveur") else Trace("orange","Erreur requête serveur, response.status = "..response.status) end end end, error = function(err) Debug("grey","T7".." - "..Iti_Titre) Trace("orange","Erreur de reception de données, Erreur = ".. err) end }) end) if not(ok) then Trace("orange","Erreur dans l'exécution de fhttp:request(Query") end Debug("grey","T9".." - "..Iti_Titre) end function Start() Debug("grey","VD_Id="..VD_Id.." / Volume_Sonos="..Volume_Sonos.." / Msg_Sonos="..Msg_Sonos) -- test pour vérifier si le module virtuel exist ou pas local ip = fibaro:get(VD_Id, 'IPAddress') if ip == nil then Debug("orange","Warning : Le module virtuel : "..VD_Id.." n'existe pas. Vous devez le créer !") else -- Lancement du traitement de l'itinéraire GetData() end end ------------------------------------------------------------------------------- -- Begining off Scène ------------------------------------------------------------------------------- local params = fibaro:args() Trace("orange","Début de traitement de la scène") if (params) then for k, v in ipairs(params) do if (v.Iti_Titre) then Iti_Titre = v.Iti_Titre end if (v.code_api_to) then code_api_to = v.code_api_to end if (v.code_api_from) then code_api_from = v.code_api_from end if (v.Msg_Arrivee) then Msg_Arrivee = v.Msg_Arrivee end if (v.Msg_Depart) then Msg_Depart = v.Msg_Depart end if (v.Msg_Sonos) then Msg_Sonos = v.Msg_Sonos end if (v.Volume_Sonos) then Volume_Sonos = v.Volume_Sonos end if (v.VD_Id) then VD_Id = v.VD_Id end end Start() else Trace("orange","Erreur : Cette scène fonctionne par appel depuis un VD avec un passage de paramètres") end Trace("orange","Fin de traitement de la scène") Modifié le 12 juillet 2017 par MAM78 1
minos Posté(e) le 12 juillet 2017 Signaler Posté(e) le 12 juillet 2017 Il y a 6 heures, MAM78 a dit : Dans la logique actuelle du VD tu seras le train de 06:37 demain matin lorsqu'il sera 05:53 (soit après le départ du premier train) coucou, Trop fort et oui encore une fois tu as tout juste .... en fait , possible d'afficher comme ci-dessous en 1 Départ à 6:37 , en 2 le prochain (vide actuellement ), en 3 le suivant ...? je testerai ce soir la V3...
minos Posté(e) le 12 juillet 2017 Signaler Posté(e) le 12 juillet 2017 Il y a 4 heures, MAM78 a dit : Si vous avez d'autres idées, vous pouvez toujours faire vos demandes Alors oui j' en ai bien une mais peut etre farfelue.... comme Sakkhho l'a souligné , il serait bien de prendre en compte le retour ... et oui fin de journée , fini le taff on rentre .... en fait est ce possible en fonction de la situation geographique ( HC2 ) par exemple que le VD nous donne les horaires des trains ... Tordu ... hein ...?? allez je vais bosser ... a ce soir
MAM78 Posté(e) le 12 juillet 2017 Auteur Signaler Posté(e) le 12 juillet 2017 Pour le retour, c'est très simple. Tu fais un deuxième VD dans lequel tu inverses les codes de départ et d'arrivée.
MAM78 Posté(e) le 12 juillet 2017 Auteur Signaler Posté(e) le 12 juillet 2017 Concernant les label 1, 2, 3 ils sont prévu pour contenir les étapes lors de trajets indirects. Mais ca c'est pour plus tard
Sakkhho Posté(e) le 12 juillet 2017 Signaler Posté(e) le 12 juillet 2017 (modifié) hello peux tu poster le code du VD pour éviter d'importer de nouveau ? EDIT : pour le prochain si tu veux, j'ai importé le VD Modifié le 12 juillet 2017 par Sakkhho
Sakkhho Posté(e) le 12 juillet 2017 Signaler Posté(e) le 12 juillet 2017 (modifié) bravo ca fonctionne pour la suite le but de mon VD au depart c'est 1/ le + important, être informé automatiquement des perturbations ... les parisiens me comprendront. je stockais l'état du trafic dans une VG et si le texte, je poussais par GEA la notification de l'état toutes les 15mn avec le texte long de l'état du traffic. (uniquement si je suis au travail en couplant avec le VD jour chômé etc...) aussi changement des icônes du VD pour savoir immédiatement si trafic ok , nok EtatRer = data.result.rers[1].title EtatLongRer = data.result.rers[1].message fibaro:call(virtualDeviceId, "setProperty", "ui.EtatRer.value", EtatRer .. " ") -- Gestion des icônes et mise à jour de la variable if EtatRer == "Trafic normal" then fibaro:call(virtualDeviceId , "setProperty", "currentIcon", TraficOk) fibaro:setGlobal("EtatTrafic", "OK") else fibaro:call(virtualDeviceId, "setProperty", "currentIcon", TraficNok) fibaro:setGlobal("EtatTrafic", EtatLongRer) end basique mais ca fait le job avec mes connaissances 2/ connaitre le prochain train qui me ramène chez moi (m'amène au boulot) ici ton VD fait le job, car j'ai le prochain train. et je peux avoir les suivants aussi c'est top, mais il serait preferable de les rendre visible direct non ? 3/ idem sur le metro (ligne 1) mais je pousse pas la notification trafic, juste un check visuel sur le VD tout ca géré par GEA - Push Trafic GEA.add(true, 2*60, "", {{"VirtualDevice", id["ETAT_TRAFIC"], 1},{"Repeat"}}) -- Refresh toutes les 2mn l'etat du trafic GEA.add ({{"Global!", "EtatTrafic", "OK"},atWork}, 15*60, "#value#",{{"Repeat"}}) -- Push EtatTrafic si NOK toutes les 15mn ensuite je serai curieux de voir si on peut utiliser la puissance de l'api (journeys) je m'explique dans mon cas. pour rejoindre mon taf, je peux - RER A direct de ma gare à la defense --> cette version du VD - Transicilien (ligne L) de ma gare à une autre gare, puis RER A de la defense... donc itinéraire indirect. idem sur le retour, j'ai plusieurs options donc pas obligé de prendre un RER A direct, je peux faire un changement suivant le 1er train qui arrive. en gros c'est suivant l'heure de depart, on prend le 1er itinéraire possible qq ícones... Modifié le 12 juillet 2017 par Sakkhho
pepite Posté(e) le 12 juillet 2017 Signaler Posté(e) le 12 juillet 2017 Super MAM, ça va devenir une vraie appli :-) ton VD Du gros boulotEnvoyé de mon Nexus 5X en utilisant Tapatalk
MAM78 Posté(e) le 12 juillet 2017 Auteur Signaler Posté(e) le 12 juillet 2017 (modifié) Concernant le trajet retour, je propose d'ajouter un bouton qui permettra d'inverser le sens de l'itinéraire. Concernant l'affichage des différents disponibles. Le problème est la quantité d'infos à afficher dans le VD. Ca risque de devenir un sapin de noël. L'objectif pour moi c'est d'afficher la décomposition des trajets avec chacun des changements Concernant l'info trafic. Pour le moment je n'ai pas encore trouver les bonnes infos J'envisage également de me connecter à une autre API pour avoir les lignes de métro et bus. Modifié le 12 juillet 2017 par MAM78
Sakkhho Posté(e) le 12 juillet 2017 Signaler Posté(e) le 12 juillet 2017 1/oui pas bete pour le bouton et donc avec GEA en fonction de l'heure on clique sur le bouton souhaité :-) 2/ suivant le nombre de d'horaires souhaités max 3 je pense c'est gerable 3/ ok 4/ je vais tenter de jeter un coup d'oeil.
PdB Posté(e) le 13 juillet 2017 Signaler Posté(e) le 13 juillet 2017 Bravo pour le boulot, c'est TOP!!! Juste une question je n'arrive pas à paramétrer de ligne TGV dans l'API (que les TER), et je n'ai pas trouvé d'info à ce sujet dans la doc en ligne... Si qqn a une idée...
MAM78 Posté(e) le 13 juillet 2017 Auteur Signaler Posté(e) le 13 juillet 2017 (modifié) Lorsque tu saisis le nom de ta gare, tu dois probablement avoir plusieurs lignes qui s'affichent dont l'une doit être la gare TGV. C'est celle là que tu dois sélectionner. Sinon indiques nous ton point de départ et d'arrivée Modifié le 13 juillet 2017 par MAM78
Messages recommandés