Bring the Toulouse network into Home Assistant: live departures, disruptions, journeys with up to two transfers, a "leave now" helper, VélôToulouse bikes and park-and-ride capacity, plus an animated dashboard card. Open data only: no API key, no account.

  • HACS custom repository
  • Home Assistant 2025.1+
  • Version 1.1.1
  • MIT licence
  • English · Français

Demo

Animated demo: Tisséo cards ticking down in a Home Assistant dashboard

Real dashboard on the test instance: countdowns, live icons, a "leave now" block, a departure board and journey sensors.

Features

Everything you need to catch your bus

One integration for stops, journeys, bikes and park-and-ride, and a card that feels native in Home Assistant.

Default card with the next departure and grouped rows

Live departures

Countdowns tick every second. A live icon appears only for real-time data, and delays only from 90 s. Departures are grouped by direction, and a big block tells you when to leave.

Dark departure board with metro and bus panels

Departure board

A dark station-style board with separate metro and bus/tram panels and paged disruptions. A compact layout is also available.

Trip dialog listing the stops of a line 87 trip

Trip details

Tap a departure to see every stop of the trip with its scheduled and live times. This also works for extra trips that exist only in the live feed.

Card showing the next departure tomorrow at 06:19

Never a blank card

No bus in the next 3 hours? The card says when the next one leaves, even if that is Monday morning.

Cards in dark theme

Feels native

It follows your theme, dark mode and 12/24 h setting. Badge shapes differ by mode and colours meet AA contrast. Visual editor in English and French.

Visual card editor

No YAML required

Set up everything from the UI: search a stop by name or code, pick one nearby, or build a journey. The card is registered automatically.

JourneysDirect, or with one or two transfers (e.g. 25 → A → B), with "transfer at risk" warnings.
Leave nowBased on your walking time and a buffer, as sensors you can automate.
Disruptionstisseo_disruption and tisseo_delay events, with 3 notification blueprints.
Timetable changesWarns when tomorrow's service differs (holidays, works).
Bikes & P+RVélôToulouse bikes and docks; park-and-ride capacity.
ReliableRetries, a circuit breaker, health sensors and diagnostics.
How it works

From open data to your dashboard

Public feeds only. The timetable is indexed locally, so lookups are instant and work even when the live feed drops out.

  1. Timetable. The GTFS (about 14 MB) is downloaded once and checked daily. It is indexed into a lean SQLite file that keeps only the trips serving your stops, plus the metro, tram, Linéo and Téléo trips once you configure a journey.
  2. Real time. GTFS-RT is polled every 60 s by default and merged on top. Cancelled trips and skipped stops are removed, and trips added by the feed are included.
  3. Entities. Coordinators publish departures, journeys and alerts as entities. The card reads only those entities, plus one WebSocket command for the trip dialog.
Install

Up and running in two minutes

Requires Home Assistant 2025.1 or newer.

HACS (recommended)

Open in HACS
  1. Or in HACS: ⋮ → Custom repositories → https://github.com/TurbulenceDeterministe/tisseo-ha, category Integration.
  2. Install Tisséo, then restart Home Assistant.

Manual

  1. Copy custom_components/tisseo into <config>/custom_components/.
  2. Restart Home Assistant.

Then add it

Add the Tisséo integration
  1. Or: Settings → Devices & services → Add integration → Tisséo.

Configuration

Entry typeWhat you do
Stop – searchType a name (capitole), a GTFS id (stop_area:SA_1715) or a stop code. Pick the whole stop area or a platform, and optionally some lines.
Stop – nearbyPick from the 10 nearest stops (within 5 km) of your Home Assistant home location.
JourneyPick an origin and a destination. Direct trips plus one or two transfers (minimum 3 min by default). If nothing leaves within 3 h, the next service is shown (later: true).
VélôToulousePick from the 15 nearest stations, with live bikes and docks.
Park-and-rideTisséo P+R car parks by distance, with their capacity.

Stop options: line filter · number of sensors · poll interval · network-wide alerts · walking time and buffer for leave-now · delay event threshold · optional Tisséo API key.

Dashboard card

One card, three layouts

Registered automatically, so there is no resource to add. Pick Tisséo departures in the card picker, or use YAML:

type: custom:tisseo-departures-card
entity: sensor.tisseo_jeanne_d_arc_departure_1   # any sensor of the stop
layout: default                                  # default | compact | board
OptionDefaultDescription
entity—Any sensor of a Tisséo stop (required).
titlestop nameCard title.
layoutdefaultdefault, compact or board.
max_departures6Rows shown (directions, when grouped).
grouptrueOne row per line + direction, with "then" times.
heroautoBig "next departure" block; auto = default layout only.
hero_line—Pin the hero to one direction, e.g. "B|Borderouge".
hero_min_minutes2Skip departures leaving sooner than this in the hero.
leave_entityautoThe stop's "leave in" sensor.
alertsbannerbanner, count or off.
timetable_noticetrueNotice when tomorrow's timetable differs.
show_filtersfalseLine / direction chips, saved per card in this browser.
filter_lines / filter_destinations—Fixed filters, e.g. [B, L1] / [Ramonville].
trip_dialogtrueTap a row to open the trip's stops.
show_clockfalseClock in the header.
badge_contrastautoauto (AA contrast) or brand (GTFS colours as they are).
board_themedarkdark or auto (follow Home Assistant).
FAQ

Questions

Why is there no live time for the metro?

Tisséo's public real-time feed (GTFS-RT) has no metro trip updates. The official API documentation (21/05/2025) says its real time covers only bus and tram, so a key would not change this. Metro times come from the timetable, and the card labels them "scheduled". Metro disruptions do come through as alerts.

Why is no API key needed?

Tisséo publishes its timetables (GTFS) and real time (GTFS-RT) as open data under ODbL, and VélôToulouse publishes GBFS. None of these feeds needs a key. If Tisséo gave you a personal API v2 key, you can add it as an extra source. The integration never ships, extracts or reuses any key from the official app.

A stop says "No departures in the next 3 h".

Some lines don't run in the evening or on Sundays. The card then shows the next scheduled departure, which is also available as the next_service attribute.

How big is the local index?

From about 7 MB (one quiet stop) to about 26 MB (several busy hubs). Once a journey is configured it is about 32–35 MB, because the trunk lines are added. It rebuilds automatically when you add stops or upgrade.

Can it show live P+R occupancy?

No. Only the capacity is open data. The live figures exist only on tisseo.fr, which is bot-protected, so they are not used.

What are the limits of journeys?

At most two transfers. The middle leg must be a metro, tram, Linéo or Téléo line, and transfers happen within the same stop area (no walking between different stops).

Credits, data licence & disclaimer

Timetables and real-time data © Tisséo, under the Open Database License (ODbL), via transport.data.gouv.fr and data.toulouse-metropole.fr. VélôToulouse data © JCDecaux. P+R data © Toulouse Métropole (Licence Ouverte v2.0). Code under the MIT licence.

Unofficial project. It is not affiliated with, endorsed by or supported by Tisséo, Tisséo Collectivités, Toulouse Métropole or JCDecaux. "Tisséo" and the line names and colours belong to their owners. For official information, see tisseo.fr.