Saltar al contenido principal

Integración domótica Transports en commun (GTFS), gratuita y de código abierto

Integración Transports en commun (GTFS) para Gladys Assistant

Próximas salidas e incidencias de cualquier red de transporte francesa, con datos abiertos.

Las próximas salidas en sus paradas y las incidencias de sus líneas, para cualquier red de transporte francesa que publique sus horarios en GTFS en transport.data.gouv.fr: TER y TGV (SNCF), Naolib (Nantes), STAR (Rennes), TaM (Montpellier), M (Grenoble), Ilévia (Lille), Stan (Nancy) y cientos más. El tiempo real (GTFS-RT) se usa cuando la red lo publica, unos 220 conjuntos de datos. Para una veintena de redes sin GTFS-RT se usa en su lugar el tiempo real SIRI (vea «Tiempo real SIRI»). Todo procede de datos abiertos: sin cuenta, y una clave de API solo para algunos flujos SIRI.

Para Toulouse, Lyon, Île-de-France o Burdeos, es preferible usar las integraciones específicas (Tisséo, TCL, IDFM, TBM): llegan más lejos (bicicletas, metro en tiempo real…). De todos modos, Île-de-France es demasiado grande para esta integración.

Esta integración es un proyecto comunitario, sin relación con transport.data.gouv.fr, la SNCF ni ninguna red de transporte.

Lo que obtiene​

  • Un dispositivo por parada vigilada: para cada línea y dirección, los minutos hasta la próxima salida y hasta la siguiente; las tres salidas más próximas en texto; la info de tráfico de sus líneas.
  • Widget «Próximas salidas»: el panel de una parada, las salidas seguidas en tiempo real en verde, los horarios teóricos marcados con «≈».
  • Disparador de escena «Incidencia en una línea seguida»: un nuevo aviso de tráfico en una línea de sus paradas, o en toda la red.
  • Acción de escena «Leer las próximas salidas», con una frase lista para enviar («Tranvía 1 hacia François Mitterrand en Commerce: dentro de 3 y 7 min»).
  • Hasta 3 redes y 20 paradas (por ejemplo, la red urbana de su ciudad y la SNCF para la estación).

¿Tiempo real o teórico? Cuando la red publica un flujo GTFS-RT «TripUpdates», las salidas se corrigen (retrasos, supresiones, paradas no servidas) y se muestran sin «≈». Si no, o para los vehículos no seguidos, son los horarios previstos, marcados con «≈» o «horario teórico». La búsqueda de red indica lo que publica cada una.

Requisitos​

  • Gladys 5.1 o posterior, con acceso a Internet.
  • Para listar las paradas alrededor de su casa: la posición de su casa en Gladys (Configuración → Viviendas). La integración la solicita al instalarse (location): lee las coordenadas de sus viviendas, nada más, y solo para ordenar las paradas por distancia. Sin ella, busque por nombre.
  • De 1 a 80 MB de disco en /data por red (el archivo de horarios, actualizado una vez al día): 6 MB para la SNCF, 26 MB para Naolib.

Instalación​

  1. En Gladys, vaya a Integraciones → Instalar desde GitHub e introduzca https://github.com/guim31/gladys-gtfs.
  2. Abra la pestaña Configuración de la integración y elija el idioma de los textos (francés por defecto).
  3. Añada su red y luego sus paradas con las acciones de la misma pantalla (abajo), y cree sus dispositivos en la pestaña Descubrir.

Configuración​

Ajustes​

  • Idioma de los textos: nombres de las funciones, nombres de las líneas, frases de las escenas. Los nombres se fijan al crear el dispositivo: cambie primero el idioma y cree después los dispositivos.

  • Frecuencia de actualización: 30 segundos, 1 minuto (por defecto), 2 o 5 minutos.

  • Tiempo real: activado por defecto. Desactivado, la integración solo usa los horarios teóricos y deja de descargar los flujos en tiempo real.

  • Claves de API SIRI (secreto, opcional): solo para una red cuyo tiempo real es SIRI y pide una clave (vea «Tiempo real SIRI»).

Añadir una red​

  1. Buscar una red: un nombre de red, una ciudad o una región («Naolib», «Rennes», «TER»…). Cada resultado da su nombre, su identificador y el tiempo real publicado, por ejemplo • Naolib [tdg84101] — … — tiempo real : salidas. Algunas redes publican dos archivos (horarios en vigor y futuros): elija el que está en vigor.
  2. Añadir una red: su identificador (tdg…), o su nombre si es único. La integración descarga sus horarios y los lee: hasta un minuto para una red grande.

Una red fuera del catálogo: indique la dirección de su archivo GTFS (https://….zip) en Identificador, nombre o URL GTFS y, si las conoce, las direcciones de sus flujos GTFS-RT en URL GTFS-RT. Nombre mostrado sustituye el nombre que se pone delante del de las paradas.

URL SIRI o SIRI Lite (opcional): el tiempo real SIRI de una red fuera del catálogo, usado si no tiene GTFS-RT.

Añadir una parada​

  1. Buscar una parada: escriba un nombre («hotel dieu» encuentra «Hôtel Dieu», los acentos y las mayúsculas no importan), o déjelo vacío para listar las 10 paradas más cercanas a su casa. Cada resultado da sus líneas, su distancia y su identificador entre corchetes, por ejemplo • Commerce [20] — 1, 2, 3, C2, C3 — 90 m. Con varias redes, el campo Red restringe la búsqueda.
  2. Añadir una parada: su nombre, o su identificador si varias paradas tienen el mismo nombre. Líneas es opcional: «1, C2» conserva solo esas dos líneas; vacío, todas las líneas. Una gran estación tiene decenas de líneas: elija las suyas (un dispositivo conserva como máximo 12 líneas y direcciones).
  3. Abra la pestaña Descubrir y cree el dispositivo.

Añadir una parada ya vigilada cambia sus líneas: Gladys propone entonces actualizar el dispositivo en la pestaña Descubrir.

Identificador SIRI (opcional, solo redes SIRI): cuando «Mostrar lo vigilado» dice que el servidor SIRI no conoce la parada, su MonitoringRef (uno por andén, separados por comas).

Eliminar, comprobar los flujos​

  • Eliminar una parada o una red: su nombre o su identificador. Eliminar una red elimina también sus paradas y borra sus horarios. Los dispositivos permanecen en Gladys hasta que los elimine.
  • Mostrar lo vigilado: para cada red, la fecha de los horarios, la antigüedad de los datos en tiempo real, el número de trayectos seguidos, el volumen descargado por hora, las paradas vigiladas y el último error, si lo hay.

Dispositivos​

Parada​

Para cada línea y dirección servida (o las líneas elegidas):

FunciónTipoValor
Tranvía 1 → François Mitterrandduración (min)minutos hasta la próxima salida
Tranvía 1 → François Mitterrand (siguiente)duración (min)minutos hasta la siguiente

Y dos textos para toda la parada:

  • Próximas salidas: las tres más próximas, p. ej. 1 → Jamet 2 min · C2 → Gare Sud ≈4 min («≈» = teórico).
  • Info de tráfico: los títulos de las incidencias en curso en sus líneas, o «Sin incidencias».

0 significa que el vehículo está en la parada o llegando (menos de un minuto); 1440 significa ninguna salida en las próximas 24 horas (noche, línea que no circula ese día). Estos valores no guardan historial: una cuenta atrás releída cada minuto llenaría la base de datos para nada.

El nombre del dispositivo empieza por el nombre de la red («Naolib · Commerce»). La dirección de un tren es su estación terminal: la SNCF pone ahí el número del tren, la integración lo sustituye.

Widget del panel​

Próximas salidas: elija una parada. Una fila por línea y dirección (diez como máximo, primero las que tienen una salida): «3 · 7 min» en verde cuando es tiempo real, «≈ 3 · 7 min» en azul para el horario teórico. La leyenda enumera las incidencias de sus líneas (⚠), o recuerda el significado de «≈».

Disparador de escena​

Incidencia en una línea seguida: aparece un nuevo aviso de tráfico en una línea de sus paradas vigiladas (el filtro de líneas de una parada lo restringe), o en toda la red (huelga, cierres). Filtros: alcance (una línea seguida, toda la red, o vacío para ambos) y línea (tal como la escribe la red: A, C1, 15). Variables: alcance, red, línea, título, detalles (texto plano), enlace. Un aviso se anuncia una vez; los que ya existen cuando añade una parada no se anuncian. Requiere una red que publique sus avisos en GTFS-RT («avisos» en la búsqueda de red).

Para «el próximo autobús llega en menos de 5 minutos», use el disparador «Cambio de estado del dispositivo» de Gladys sobre la cuenta atrás de la parada: ya sabe comparar valores.

Acción de escena​

Leer las próximas salidas: una parada vigilada y, opcionalmente, una línea. Salidas: frase (hasta cuatro líneas y direcciones, primero las más próximas), parada, línea y dirección de la próxima salida, minutos de espera, minutos hasta la siguiente, tiempo real (1) o teórico (0), número de líneas con una salida. Las frases siguen el idioma de la configuración.

Ejemplos de escenas​

  • Es la hora: a las 7:45 los días laborables, «Leer las próximas salidas» en su parada para la línea C2, y luego envíe {{sentence}} por Telegram o anúnciela en un altavoz.
  • Mi TER tiene una incidencia: disparador «Incidencia en una línea seguida», alcance «una línea seguida», en la estación añadida con su línea TER: envíe el título y los detalles a su teléfono.
  • Salir cuando llega el autobús: disparador «Cambio de estado del dispositivo», cuenta atrás de su autobús inferior a 4, condición «alguien en casa» y antes de las 8:30: haga parpadear la luz de la entrada.

Datos, actualización y ancho de banda​

DatosFuenteCuándo
Catálogo de redestransport.data.gouv.fr (API pública)al buscar o añadir una red, guardado un día
Horarios (GTFS)la red, a través de transport.data.gouv.fruna vez al día como máximo, guardados en /data
Tiempo real (GTFS-RT)la red, o el proxy del catálogoen cada actualización, cada 15 min cuando nada circula
Tiempo real (SIRI)el servidor SIRI de la redpor parada, en cada actualización cuando se acerca una salida

El tiempo real es lo más pesado: de unos kB a 2 MB por flujo y por lectura. A una lectura por minuto, Tisséo supone unos 100 MB por hora y la SNCF unos 90 MB por hora, durante las horas de servicio; la acción Mostrar lo vigilado muestra el volumen de sus redes. De noche, sin salidas en los próximos 90 minutos en sus paradas, los flujos solo se leen cada 15 minutos, y una red sin parada vigilada nunca se lee. Elija 2 o 5 minutos, o desactive el tiempo real, con una conexión limitada. El catálogo y los flujos abiertos no imponen cuota; el proxy de transport.data.gouv.fr solo acepta una lectura por flujo cada 30 segundos, y la integración lo respeta.

Licencias: los horarios se publican bajo la Licence Ouverte (Etalab) o la ODbL según la red; al añadir una red se muestra la suya, y transport.data.gouv.fr la indica en la página de cada conjunto de datos.

Tiempo real SIRI​

Una veintena de redes publican su tiempo real en SIRI o SIRI Lite en lugar de GTFS-RT: Ginko (Besanzón), CTS (Estrasburgo), el agregado de Pays de la Loire, Idelis, TUB, évolitY, Tanlib, Calibus, Tréma, R'Bus, Evalys, ARVI, TuT, Dordogne, BlaBlaCar Bus… La integración lo usa cuando la red no tiene GTFS-RT; la búsqueda lo indica con «tiempo real: salidas parada por parada (SIRI)». TCL e IDFM, que también lo publican, tienen sus integraciones dedicadas.

  • Sin clave: cuando el catálogo publica la clave de acceso del servidor (el «RequestorRef» público de algunos servidores SIRI) o el servidor es abierto, no hay nada que hacer.
  • Con clave: muchos servidores piden una, gratuita, que se obtiene de la red; la página del conjunto de datos en transport.data.gouv.fr indica a quién pedirla (Ginko: su soporte, por correo; CTS: una cuenta en su portal para desarrolladores). Escríbala en Claves de API SIRI de la configuración, como Ginko = su-clave; una por línea (o separadas por «;») si varias redes la piden; sola, una clave vale para todas. Nunca aparece en los registros, en «Mostrar lo vigilado» ni en /data. La integración la pone donde el servidor la espera: RequestorRef en SIRI, autenticación HTTP para la CTS, parámetro AccountKey para los servidores Mecatran. Si su red la quiere en otro sitio, escriba nombre=clave (parámetro de URL) o Nombre-Cabecera: clave (cabecera HTTP).
  • Paradas: SIRI designa las paradas con sus propios identificadores. La integración pide al servidor su lista de paradas (una vez al día) y las enlaza con las de los horarios (mismo código, si no mismo nombre a menos de 100 m); sin lista, prueba el código público de la parada y luego su identificador GTFS. Si «Mostrar lo vigilado» señala una parada desconocida para el servidor, indique su identificador SIRI en Identificador SIRI de «Añadir una parada».
  • Qué cambia: nada en el dispositivo, el widget ni las escenas. Las salidas que da el servidor sustituyen los horarios teóricos de su línea y dirección, sin «≈» cuando el vehículo está seguido. Las incidencias (GeneralMessage, si no SituationExchange) alimentan la info de tráfico y el disparador de escena.
  • Redes en la pasarela Okina (Pays de la Loire, Tanlib, Calibus, Tréma, R'Bus, Evalys, TuT, Dordogne, CC Sud Gironde): Okina solo acepta una petición cada 30 segundos por dirección, para todas estas redes juntas. La integración lo respeta (35 s), así que cada andén vigilado solo se vuelve a leer cada 35 s × el número de andenes: con una parada de dos andenes, cada 70 s aproximadamente; con más de 2 o 3 paradas, el tiempo real llega demasiado tarde para ser útil. Vigile una o dos paradas e indique si hace falta el Identificador SIRI del único andén de su dirección.
  • Servidores particulares: un servidor que responde sin ninguna parada ni salida casi siempre pide una clave («Mostrar lo vigilado» lo indica). Un servidor que no ofrece las próximas salidas por parada (solo los horarios estimados de líneas enteras, como BlaBlaCar Bus) no se lee: solo horarios teóricos.
  • Moderación: una petición por andén (cuatro como máximo por parada) en cada actualización, solo para las paradas con una salida en los próximos 90 minutos (cada 15 minutos si no), y las incidencias cada 5 minutos. Dos paradas de dos andenes, una actualización por minuto: unas 250 peticiones por hora durante el día, de pocos kB cada una. Un servidor que responde «demasiadas peticiones» (429) se deja en paz el tiempo que pide (5 minutos por defecto), y el proxy de transport.data.gouv.fr se consulta una vez cada 30 segundos como máximo. Si su red fija una cuota más baja (vea la página de su conjunto de datos), elija una actualización cada 2 o 5 minutos.

Solución de problemas​

  • «… son demasiado grandes para los 256 MB de la integración»: la red supera lo que el contenedor de Gladys puede leer (Île-de-France, más de 400 000 trayectos por semana, archivo de más de 80 MB). Use la integración específica, o un conjunto de datos más pequeño de la misma red.
  • «Varios resultados»: añada la parada por su identificador, que da «Buscar una parada», o indique la Red.
  • Todos los horarios de una parada aparecen con ≈: la red no publica tiempo real, o no para esos vehículos, o el flujo está caído (la acción «Mostrar lo vigilado» da el último error). Los horarios teóricos siguen funcionando.
  • «Tiempo real (SIRI): el servidor ha rechazado el acceso»: falta la clave o no es la correcta (campo Claves de API SIRI). Una clave dada de otra forma (parámetro de URL, cabecera) se escribe nombre=clave o Nombre-Cabecera: clave.
  • Una línea muestra 1440: ninguna salida en las próximas 24 horas (servicio nocturno, línea que no circula ese día, desvío).
  • Ningún dispositivo en la pestaña Descubrir: añada primero una red y luego una parada.
  • La red ha cambiado de dirección (error HTTP 404 en «Mostrar lo vigilado»): elimine la red y vuelva a añadirla desde la búsqueda.
  • Registros: en Gladys, los registros de la integración indican qué flujo ha fallado y por qué (nunca la dirección completa, que puede contener una clave).

Limitaciones​

  • Redes que publican un GTFS: la mayoría de las redes francesas, pero no todas; tres redes y veinte paradas como máximo.
  • Demasiado grandes: Île-de-France (IDFM); los agregados regionales más pesados también pueden rechazarse.
  • El tiempo real depende de la red: algunas solo publican avisos, o solo siguen una parte de sus vehículos.
  • Los nombres de líneas y direcciones son los del archivo de la red (códigos de línea SNCF como «P2» o «C30», por ejemplo).
  • Una cuenta atrás es tan precisa como la frecuencia de actualización.
  • Desarrollada y probada con los datos reales (SNCF, Naolib, Tisséo, Aix-Marseille) y el Gladys simulado del SDK, sin una instancia real de Gladys: sus comentarios son bienvenidos en el foro.

Créditos​

  • Datos: las redes de transporte, a través de transport.data.gouv.fr (Licence Ouverte u ODbL según el conjunto de datos).
  • Retoma el código de la integración Tisséo del mismo autor; inspirada en la integración TCL de prohand y en las integraciones GTFS de Home Assistant.
  • Código bajo licencia Apache 2.0.

Parámetros de configuración​

Estos son los parámetros que Transports en commun (GTFS) te pide en su pantalla de configuración en Gladys.

ParámetroTipoObligatorioDescripción
FuncionamientosectionNoAñada su red con las acciones de abajo (búsqueda en el catálogo nacional transport.data.gouv.fr, o dirección de un archivo GTFS), luego sus paradas (por nombre, o alrededor de su casa), y cree sus dispositivos en la pestaña Descubrir. Sin cuenta; clave solo para algunos flujos SIRI.
Idioma de los textosselectNoIdioma de los nombres de las funciones, de las líneas y de las frases enviadas a sus escenas. Los nombres de las funciones se fijan al crear el dispositivo.
Intervalo de actualizaciónselectNoFrecuencia de actualización de las salidas. Cada actualización descarga los flujos en tiempo real de sus redes: de unos kB a 2 MB cada uno (Tisséo: unos 100 MB por hora a 1 minuto). La acción «Estado» muestra el volumen de los suyos. De noche, solo cada 15 minutos.
Tiempo realbooleanNoCorregir los horarios con los vehículos seguidos en directo y leer las incidencias, cuando su red los publica (GTFS-RT, si no SIRI). Desactivado: solo horarios teóricos, sin descarga en cada actualización.
Claves de API SIRIsecretNoSolo para una red cuyo tiempo real es SIRI con clave (p. ej. Ginko, CTS): una por línea o separadas por «;», como red = clave (nombre o identificador). Una clave sola vale para todas. Nunca en los registros.

Cómo instalar Transports en commun (GTFS) en Gladys​

  1. En Gladys, abre Integraciones: Transports en commun (GTFS) aparece en el catálogo junto a las integraciones nativas, con una insignia de comunidad.
  2. Haz clic en Instalar. Gladys descarga la imagen Docker (ghcr.io/guim31/gladys-gtfs:1.1.0), la ejecuta en un entorno aislado del núcleo y genera la interfaz de la integración (dispositivos, descubrimiento y configuración).
  3. Abre la pantalla de Configuración de la integración, rellena los parámetros y guarda.
  4. También puedes instalarla directamente desde la URL de su repositorio: https://github.com/guim31/gladys-gtfs.

Transports en commun (GTFS) requiere Gladys >=5.1.0. El catálogo de Gladys se actualiza cada hora, así que una nueva versión está disponible como máximo una hora después de publicarse.

¿Todavía no usas Gladys? Es gratuito y de código abierto: sigue la guía de instalación para empezar.

Sobre las integraciones externas​

Transports en commun (GTFS) es una integración externa: una integración comunitaria empaquetada como contenedor Docker y publicada en GitHub. Gladys la instala con un clic y la ejecuta en un entorno aislado del núcleo. La publica y mantiene guim31, no el equipo principal de Gladys.

Suscríbete a la newsletter de Gladys Assistant

Unos pocos correos al mes sobre nuevas versiones y novedades del proyecto. Enviados por Pierre-Gilles Leymarie, fundador del proyecto. Puedes darte de baja cuando quieras 🙂