TL;DR: I built a custom integration that pulls real-time shuttle/bus data from BusWhere into Home Assistant. If your university or organization uses BusWhere for shuttle tracking, you can now get live GPS position, stop ETAs, and route status right in your HA dashboard. No API key needed.
What is BusWhere?
BusWhere is a real-time shuttle tracking platform used by universities and organizations across the US. If you’ve ever used a page like buswhere.com/yourschool/routes/shuttle_name to check where the campus shuttle is, this integration is for you.
What does this integration do?
Once configured, it creates:
- Device Tracker — the bus shows up on your HA map, moving in real-time
- Stop Zones — each shuttle stop is created as a zone/location on the map
- Per-Stop ETA Sensors — a sensor for each stop showing how many minutes until the bus arrives
- Route Status Sensor — shows running / not running / suspended, plus any service alerts
- Active Binary Sensor — simple on/off for whether the bus is currently operating
Setup
- Install via HACS (add as custom repository) or copy manually
- Add the integration in Settings > Devices & Services
- Paste your BusWhere route URL (e.g.,
https://buswhere.com/theory/routes/theory_shuttle) - Done — entities start populating immediately
You can also rename the stops to something meaningful (like “Main Campus” or “Dorm”) through the integration’s Configure option.
Automation Ideas
Get notified when the shuttle is almost at your stop:
automation:
- alias: "Shuttle approaching my stop"
triggers:
- trigger: numeric_state
entity_id: sensor.buswhere_theory_shuttle_stop_3_eta
below: 3
actions:
- action: notify.mobile_app_phone
data:
title: "Shuttle Alert"
message: >
Shuttle arriving at your stop in
{{ states('sensor.buswhere_theory_shuttle_stop_3_eta') }} minutes!
Morning check if shuttle is running:
automation:
- alias: "Shuttle not running alert"
triggers:
- trigger: time
at: "07:30:00"
conditions:
- condition: state
entity_id: binary_sensor.buswhere_theory_shuttle_active
state: "off"
actions:
- action: notify.mobile_app_phone
data:
message: "Heads up — the shuttle isn't running this morning."
Use zone triggers when the bus enters your area:
automation:
- alias: "Bus near home"
triggers:
- trigger: zone
entity_id: device_tracker.buswhere_theory_shuttle_bus
zone: zone.home
event: enter
actions:
- action: light.turn_on
target:
entity_id: light.porch
How it works
The integration polls BusWhere’s public endpoints — the same ones their website uses. A lightweight JSON poll runs every 30 seconds (configurable) for the bus position, and a full data refresh happens every 5 minutes to update stop ETAs and route metadata. No API key, no authentication, no scraping tricks needed.
Installation
HACS (recommended):
- HACS > three dots > Custom repositories
- Add
https://github.com/DEADSEC-SECURITY/ha-buswhereas an Integration - Install “BusWhere Shuttle Tracker”
- Restart HA
Manual:
Copy custom_components/buswhere/ to your config directory and restart.
Links
- GitHub: GitHub - DEADSEC-SECURITY/ha-buswhere · GitHub
- Issues/Feature Requests: Issues · DEADSEC-SECURITY/ha-buswhere · GitHub
This should work with any organization on BusWhere. If you run into issues with your school’s route, open an issue and I’ll take a look.
Feedback and contributions welcome!