BusWhere Shuttle Tracker — Track University Shuttles in Home Assistant

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

  1. Install via HACS (add as custom repository) or copy manually
  2. Add the integration in Settings > Devices & Services
  3. Paste your BusWhere route URL (e.g., https://buswhere.com/theory/routes/theory_shuttle)
  4. 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):

  1. HACS > three dots > Custom repositories
  2. Add https://github.com/DEADSEC-SECURITY/ha-buswhere as an Integration
  3. Install “BusWhere Shuttle Tracker”
  4. Restart HA

Manual:
Copy custom_components/buswhere/ to your config directory and restart.

Links

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!

1 Like