Repository navigation
Releases
2026.11.1
Added
-
Added a journey progress sensor, schematic dashboard card and vehicle-confirmed transfer and alighting events. Progress follows the departing itinerary through subsequent replans using an in-memory snapshot. #57
-
Added opt-in one-off and recurring commute windows with scheduled polling, tracked trips, and Home Assistant events for confirmed delays, recovery, cancellations, and disruptions. #56
-
Journey entries can select the Cairns or South East Queensland live feed, or use scheduled times only. Cairns predictions and positions require verified service identity. Stop boards use the timetable for their selected stop. #59
-
Service Notices entries show active and upcoming Translink GTFS-RT alerts for South East Queensland and Cairns, with optional route or mode filtering. The Alerts card shows affected entities, active periods and the last successful fetch. #60
-
The Departures card offers an opt-in Arrivals view for drop-off-only stop visits and optional route, direction, and order controls. Scheduled and expected stop times are shown separately. #52
-
Added a preview for sharing journeys, downloading calendar files and creating events in a configured Home Assistant calendar. Journey details link to verified Translink trip timetables. #58
-
Added the response-only
translink.plan_journeyaction and an opt-in Journey card planner for comparing scheduled alternatives at a selected Brisbane date and time. #53 -
Added opt-in nearby stop discovery during setup. Choose a Home Assistant zone or map point, then confirm a stop ID to create a departure board. The lookup discards the selected coordinates. #55
Changed
- Behaviour change: The Live Vehicle tracker follows the active transit leg and exposes the fix provenance. Stale, ambiguous, and missing positions leave the tracker available with an
unknownstate. The Journey card marks the active leg, and diagnostics and recorder history exclude vehicle coordinates. #51 - Behaviour change: Delay now reports signed boarding offsets and shows
unknownwhen no applicable prediction is available. Journey Status distinguishes scheduled, early, cancelled, and skipped boarding services. Departure and arrival sensors keep their scheduled states and expose predicted times as attributes. #48 - Documented the limits of via stops, transfer preferences, and accessibility routing. Added exact planner request tests and an opt-in developer capture. Home Assistant routing behaviour is unchanged. #54
Fixed
- Departure boards use the selected station or platform timetable across routes and directions, with scheduled and expected times shown separately. Stop notices remain visible when there are no departures. #47
- Journey disruption sensors keep relevant planner notices when no services are found. The Journey card shows those notices with the no-service message. Notice details report
legorrequestscope, and notices expire when they reach a confirmed end time. #49 - Setup and reconfiguration ask you to confirm ambiguous location matches. Departure boards accept only stations and stops, and reconfiguration keeps unchanged locations. #50
- The journey feed picker displays readable names for South East Queensland, Cairns, and schedule-only mode. #59
- The Service Notices transport mode picker uses Home Assistant-compatible translation keys for Bus, Ferry, Train, and Tram. #60
- Reconfiguring a loaded entry uses its existing Home Assistant reload listener.
- Journey alternatives honour the planner's transfer count. The planner action requires read access to its itinerary sensor. #53
- Commute windows reset their saved trips when transport modes change and require fresh predictions for all transit legs before reporting recovery. Duplicate live trip updates cannot confirm a commute alert or journey delay. #56
- Reject invalid weekdays in recurring commute windows and show a reconfiguration message when a saved schedule is invalid. #56
- Journey progress handles late arrivals into walking legs, through-services and same-sequence vehicle arrivals. Vehicle observations expire after 90 seconds between refreshes. #57
- Cairns vehicle fixes with contradictory routes or service dates are discarded. Route-scoped Service Notices require both route identifiers to match when the feed supplies both. #59, #60
2026.11.0
Changed
- Config flow tests verify that error forms retain their step IDs ahead of Home Assistant 2027.5's enforcement. The integration already supplies explicit step IDs. #36
- Device metadata tests support the
DeviceInfodataclass introduced in Home Assistant 2026.11. The integration already supports both device metadata APIs. #37 - Tests use Home Assistant 2026.11.1 and its official
pytest-homeassistantplugin. HA Next installs matching PyPI releases, builds the development plugin from the same Core checkout, and reports unsupported test combinations separately from failures. #39
Fixed
- Pre-commit runs check-only Ruff hooks pinned to CI. Tests filter two known upstream deprecations while continuing to fail on Translink deprecations. #45
- CI retains the coverage report when the test gate fails. Dependabot runs enforce the 100% gate and retain the report for review, and maintainers can publish a reviewed head through a manual CI run. #43
- Location search, nearby-stop search and journey planning report only the operation and HTTP status when the server returns an error. This keeps upstream content out of Home Assistant logs and avoids downloading and decoding error bodies. #44
- The release workflow retries
gh release verifyfor about a minute, because GitHub writes the release attestation shortly after publishing. The 2026.10.6 run published correctly but failed this check. #32
2026.10.6
Fixed
- Journey planner, location search and nearby-stop requests that time out now raise a connection error, so a slow Translink response fails one refresh quietly and the next refresh recovers. Before, the timeout reached the catch-all handler, which logged "Unexpected error fetching Translink data" with a stack trace and an empty message. Timeouts on the optional real-time feeds (vehicle positions, trip updates and alerts) now leave that data empty for one refresh instead of failing it. Coordinator errors always name the exception type, so an exception with an empty message is still readable. #26, #27
- The disruption event entity opts in to the in-place entity ID changes of Home Assistant 2026.11 (
async_entity_id_changed), so renaming its entity ID no longer removes and re-adds it. The fallback ends in Home Assistant 2027.11.
Added
- Releases ship the integration as
translink.zip, with aSHA256SUMSfile and a signed build provenance attestation.hacs.jsonsetszip_releaseandfilename, so from this release HACS installs the zip and shows how many times the latest release's zip was downloaded. After this release, choosing an older release (one without the zip) in HACS can fail to download.script/build_release_zip.pybuilds the zip reproducibly fromSOURCE_DATE_EPOCH, every pull request checks that two builds match byte for byte, and the release workflow uploads the assets to a draft before it publishes, so it works with immutable releases. The README describes manual installation from the zip and how to verify it. #28 - Deprecation checks for the current and the next Home Assistant release. #29
- Blocking: pytest turns
DeprecationWarningandPendingDeprecationWarningfrom the integration's own modules into errors, and fails a test when Home Assistant logs a deprecation report that namestranslink(tests/deprecations.py). - Early warning: the weekly
HA Nextworkflow tests the newest Home Assistant on PyPI (betas included) and the head of Core'sdevbranch. It imports every module (script/import_smoke.py), runs the tests when a matchingpytest-homeassistant-custom-componentexists, and runs Hassfest. It opens oneha-next+bugissue per channel on failure and closes it when the channel passes again. - The weekly
HA Dev Blogworkflow (script/ha_dev_blog.py) reads the developer blog and opens oneha-dev-blog+enhancementissue per post that announces a change to code the integration uses.
- Blocking: pytest turns
Changed
- Tests run against Home Assistant 2026.10.4 (was 2026.6.2), and
script/testacceptsTEST_HOME_ASSISTANT_VERSION,TEST_PLUGIN_VERSION,TEST_PYTHON_VERSIONandTEST_VENV_PATHoverrides. script/hassfestruns Hassfest from pinned Core source in an isolateduvenvironment, and supports Core 2026.11 and later, where the validator moved intopackages/hassfest, and Coredev.- Dashboard cards use Home Assistant's design tokens for spacing, typography, radii, focus rings, hover and warning fills, with fallbacks for older themes. The journey arrow mirrors in right-to-left languages and is hidden from screen readers.
2026.10.5
Added
- Bundled Journey, Departures and Service Alerts dashboard cards with native visual editors, automatic module registration, Home Assistant theme/locale support, responsive Sections sizing and keyboard-accessible details. Built with TypeScript 7 and tested at phone, tablet and desktop widths.
- Expandable per-leg calling-stop timelines sourced from verified public trip schedules, with separately matched GTFS-RT predictions and explicit partial/unavailable fallbacks. Timetable requests are bounded and cached; missing enrichment does not interrupt journey entities.
Changed
-
Publish CI coverage to Codecov and enforce the existing 100% Python line and branch coverage baseline. The OIDC upload runs in a separate job without executing project code.
-
Register bundled cards through the HTTP/Lovelace setup lifecycle. The large live itinerary
legsattribute is excluded from recorder history; entity IDs, states and configuration remain compatible. -
Pull requests get path labels and at most one type label,
bugorenhancement, from the shared tinkerologie PR labeler. Dependabot pull requests whose largest update is a patch or minor version merge automatically once the checks and commit statuses on their head commit have finished without a failure (a Codecov check that is still pending is not waited for; a Codecov failure blocks); majors, and pull requests with open review threads, stay for review. -
Dependabot updates
uv.lock(theuvecosystem instead ofpip), so version and security updates reach the lock file;uv.lockis refreshed to matchpyproject.toml. -
Release workflows hardened (least-privilege job permissions, no expressions in shell scripts, no persisted checkout credentials, no dependency caches); scheduled workflows run on Australia/Brisbane time. New CI workflow runs lint and tests on every pull request. LICENSE now contains the complete Apache License 2.0 text.
-
Workflow layout tidied after the release hardening (no behaviour change):
permissions:blocks moved back to the top of their workflow or job inrelease.yml.NOTICErecords the copyright holder. -
Tinkerologie-Bot governance report updated to v1.4.3: an older run can no longer post a stale report after a newer run passed. Workflow formatting tidied.
-
Repository standardised to the tinkerologie layout (STANDARDS.md in tinkerologie/.github): workflows renamed to the standard set (CI, Validate, Release, PR Governance, ...), every action pinned to a commit SHA, shared Dependabot,
.editorconfig,.gitattributesandCODEOWNERSfiles, and organization-wide labels and community files. -
Tinkerologie-Bot's comment is now a readable "Pull request checklist": each problem is a numbered heading with plain-English guidance and its items listed underneath, and report updates for a pull request are serialised so an older run can never overwrite a newer one.
-
Contribution governance: issues without a
bugorenhancementlabel are labeled automatically when their type can be determined (issues labeledquestion,duplicate,invalid,wontfix, orno-typeare skipped), so CodeRabbit can plan them. Pull requests that conflict with the default branch are labeled, and their authors are notified in a comment. Stale issues and pull requests are labeled after 14 days without activity and closed 30 days later. PR governance now re-validates a human-authored, non-draft PR when a bot such as CodeRabbit edits its description, instead of skipping the check and reporting a pass, only maintainers with write access may useNoneinstead of linking an issue, and a link to an issue that does not exist now fails the check. -
Tinkerologie-Bot now posts one comment on pull requests that fail PR governance, listing every problem to fix, and updates it once they are fixed. PR governance runs from the default branch's workflow (
pull_request_target), so a pull request cannot change its own check. -
Update repository URLs and documentation references to tinkerologie organization.
Fixed
- Collapse identical planner alternatives in the departures card while preserving distinct trip identities when supplied.
- Match planner and GTFS-RT trip records with route suffixes and service dates. This can correct previously missing reported delays and vehicle positions.
- Resolve two existing Mypy typing errors without changing protobuf values or journey status behavior.
2026.10.4
Added
- Dynamic Transport Mode Icons for Map and Dashboard Entities:
- Live vehicle tracker (
device_tracker.<entry>_vehicle_tracker) now renders transport-specific Material Design icons dynamically on the Home Assistant Map area and Map cards based on the active vehicle mode:- Train:
mdi:train - Bus:
mdi:bus - Ferry:
mdi:ferry - Tram / Light Rail:
mdi:tram - Fallback:
mdi:bus-marker
- Train:
- Next Service sensor (
sensor.<entry>_next_service) also dynamically adjusts its entity icon to match the mode of transport for the upcoming journey or departure.
- Live vehicle tracker (
- Enhanced GTFS-Realtime Trip & Vehicle Correlation:
- Fixed cross-feed correlation between Journey Planner itinerary legs (which format trip identifiers as
s_T_<service>_<dir>_<date>_<trip_id>) and GTFS-RTVehiclePositionsandTripUpdatesfeeds (which format trip identifiers as<trip_id>-<agency>...). - Extracted and indexed normalized base trip IDs across feeds, allowing real-time GPS locations, speed, bearing, and live arrival delays to accurately track trains, buses, ferries, and trams in real time on the Map.
- Fixed cross-feed correlation between Journey Planner itinerary legs (which format trip identifiers as
Changed
- Update repository URLs and documentation references to tinkerologie organization.
- Home Assistant 2026.10 Compatibility & Standards:
- Modernized platform setup entry signatures across all entity platforms (
device_tracker,sensor,event, anddiagnostics) withTranslinkConfigEntrytype annotations. - Aligned
TrackerEntitylocation accuracy reporting to usefloatvalues (15.0) in accordance with the latest Home Assistant core specifications. - Added
route_colorattribute todevice_trackerextra state attributes to support custom card rendering and map track styling.
- Modernized platform setup entry signatures across all entity platforms (
2026.10.3
Changed
- Brand Logos and Icons:
- Updated integration brand icons and logos (
icon.png,icon@2x.png,logo.png,logo@2x.png) to the official Translink 3-blade swirl emblem with high-resolution transparency.
- Updated integration brand icons and logos (
2026.10.2
Fixed
- Platform Sensor Icon:
- Replaced invalid non-existent icon string
mdi:train-car-platformwith valid Home Assistant core standard iconmdi:bus-stop-uncovered. - Added explicit
icon="mdi:bus-stop-uncovered"attribute toplatformentity descriptions in both Journey and Stop departure sensors.
- Replaced invalid non-existent icon string
2026.10.1
Added
- Disruption Event Entity (event._disruption)
- Disruption Description Sensor (sensor._disruption_description)
- Enriched Disruption Sensor Attributes with summary, description, and notices list
- Notice mapping in TranslinkApiClient
2026.10.0
Added
- Initial release of Translink Queensland integration for Home Assistant (HACS).
- Journey Planner Tracking:
- Real-time journey planning between any Origin and Destination in South East Queensland and regional networks.
- Sensors for Next Departure timestamp, Arrival timestamp, Total Duration, Status, Transfers count, Next Route / Service, Origin Platform, Adult Go Card Fare (50c fares), Walking Distance, and Disruption Alerts count.
- Rich journey attributes including full leg breakdown, intermediate/skipped stops, operator info, route hex color codes, and encoded polyline for map cards.
- Live Vehicle GPS Tracking:
device_trackerentity providing live vehicle location (latitude, longitude), bearing, speed, and vehicle ID from Translink's GTFS Realtime feeds.
- Stop & Station Departure Boards:
- Dedicated Stop mode for tracking upcoming departures, platforms, and line delays for any Translink bus stop, train station, ferry terminal, or tram station.
- Location Autocomplete & Geolocation Support:
- Dynamic station/stop search via Translink's search API in config and options flows.
- Home Assistant Integration Quality Scale (Platinum):
- Strict type checking, Pydantic v2 data models, async I/O with injected websession.
- Complete translations (
strings.json,translations/en.json) and icon definitions (icons.json). - Redacted diagnostics download support.
- Robust test suite with comprehensive unit and integration tests.