Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
members:sparky:projects [2026/02/08 19:49] – external edit 127.0.0.1members:sparky:projects [2026/09/14 23:48] (current) – Sparky
Line 1: Line 1:
 # Sparky's Projects # Sparky's Projects
  
-  ## Current Projects+## Current Projects
  
-  ### Transit Tracker+### Transit Tracker
  
-  ![](/:members:sparky:img_7282.jpg)+![](/:members:sparky:img_7282.jpg)
  
-  A DIY customizable public transit arrivals board displaying real-time transit information. Built using the open-source [Transit Tracker](https://transit-tracker.eastsideurbanism.org/) project by Eastside Urbanism.+A DIY customizable public transit arrivals board displaying real-time transit information. Built using the open-source Transit Tracker project by Eastside Urbanism, deployed on dma.computer infrastructure.
  
-  **How to interact with it at dma.space:**+**How to interact with it at dma.computer:**
  
-  - **View the display**: The transit board is accessible at `10.20.110.197` +- **Press a button**: A 15-key Stream Deck next to the sign switches which route it shows. Top row, left to right: Link, Bus 8, Bus 10, Bus 12, Streetcar. The live route lights up bright with a white border; the rest stay dimmed. Bottom-right key blanks the display. 
-  - **API endpoint**: Real-time feed data available at `http://transit-tracker.int.dma.space:3000/feeds` +- **View the display**: The transit board is on the network at `transittracker-display.user.dma.computer` (10.20.110.197) 
-    - http://transit-tracker.int.dma.space/ (http://10.20.100.80) has a page for you to view the health of the service(s) running on the Pi. +- **API endpoint**: Real-time feed data available at `http://transittracker-pi.int.dma.computer:3000/feeds` 
-  - **Configure the display**: Use the [web configurator](https://transit-tracker.eastsideurbanism.org/configurator) to customize which routes and stops are shown+- **API host**: Hosted on `transittracker-pi.int.dma.computer` (10.20.100.80) 
 +- **Configure the display**: Use the [web configurator](https://transit-tracker.eastsideurbanism.org/configurator) to customize which routes and stops are shown. Configurator routes by default through the upstream OneBusAway-backed feed; the local API runs a sibling GTFS-static feed (`st_gtfs`) for more accurate end-of-day train counts.
  
-  The board shows arrival times for local transit agencies and updates automatically. Perfect for checking your commute before heading out!+**Current feed config:**
  
-  ---+- `kcm` — King County Metro (GTFS-static) 
 +- `st` — Sound Transit via OneBusAway (legacy) 
 +- `st_gtfs` — Sound Transit via GTFS-static + GTFS-RT (used by the display; gives true "trains remaining today")
  
-  ### TRMNL E-Ink Dashboard+The board shows arrival times for local transit agencies and updates automatically. Perfect for checking your commute before heading out!
  
-  ![](/:members:sparky:img_7283.jpg)+**Route presets:**
  
-  A 7.5" e-ink display dashboard that serves as a distraction-free information display. TRMNL uses a privacy-focused design where the device polls for updates rather than allowing external access to the local network.+| Preset | Routes | Stops | 
 +| --- | --- | --- | 
 +| Link | 1 Line + 2 Line | Capitol Hill, both directions | 
 +| Bus 8 | KCM 8 | E John St & Broadway, both bays | 
 +| Bus 10 | KCM 10 | E Pine St & 12th Ave, both directions | 
 +| Bus 12 | KCM 12 | E Pine St & 12th Ave, both directions | 
 +| Streetcar | First Hill Streetcar | Broadway & Pike-Pine, both directions |
  
-  **How to interact with it at dma.space:**+**Home Assistant control:**
  
-  - **What it shows**: Customizable layouts featuring calendar, weather, news, stocks, and 794+ other plugins +You can do everything the Stream Deck does from Home Assistant, which is handy if you are not standing next to the sign.
-  - **Updates**: The display refreshes only when new information is available, preserving battery life (6+ months on a charge) +
-  - **Plugin ecosystem**: Supports integrations with Google Calendar, Home Assistant, weather stations, and community-created plugins +
-  - **Developer friendly**: Create custom plugins using HTML/JSON in under 5 minutes+
  
-  **Want to display something specific?** Reach out to Sparky on Zulip or Signal!+- `select.transit_tracker_cycling_transit_preset` — switches the route preset 
 +- `switch.hangout_transit_tracker_cycling_display_power` — blanks the display without cutting power 
 +- `number.hangout_transit_tracker_cycling_display_brightness` — brightness, 0-255
  
-  Learn more at [usetrmnl.com](https://usetrmnl.com)+The Stream Deck talks to these entities over the Home Assistant REST API. It runs as a container on the same Pi as the API, and it mirrors Home Assistant, so switching a preset from either place updates both.
  
-  ---+**Troubleshooting:**
  
-  ## Completed Projects+If the sign shows "no upcoming arrivals" for some routes but not others, the routes that break usually share a feed. Work through these in order:
  
-  *Coming soon*+1. Query the API for a broken route and for a route on the same feed the sign never asks for. If the second one works, the data is fine and something is caching empty results. 
 +2. Check for a stuck feed sync: `SELECT feed_code, locked_at, now() - locked_at FROM sync_lock;` A row older than a few hours is stale, and it blocks that feed from syncing again until you clear it. 
 +3. Check the data has not aged out: `SELECT feed_code, min(start_date), max(end_date) FROM calendar GROUP BY feed_code;` and compare to today. GTFS feeds expire, and an agency service change replaces them. 
 +4. To force a sync: `docker exec transit-tracker-api-api-1 node dist/cli sync --force --feed <code>` 
 +5. A sync run this way is invisible to the running API for up to 12 hours, because schedule results are cached in memory as well as in Redis. Restart the API container to pick them up: `docker restart transit-tracker-api-api-1` 
 + 
 +**Repos:** 
 + 
 +- API: [github.com/sparkyfen/transit-tracker-api](https://github.com/sparkyfen/transit-tracker-api) (fork of [tjhorner/transit-tracker-api](https://github.com/tjhorner/transit-tracker-api)) 
 +- ESPHome firmware: [github.com/sparkyfen/esphome-transit-tracker](https://github.com/sparkyfen/esphome-transit-tracker) 
 +- Stream Deck controller: [github.com/sparkyfen/streamdeck-transit](https://github.com/sparkyfen/streamdeck-transit) 
 + 
 +--- 
 + 
 +### ESP32 Transit Tracker (WhereTrain) 
 + 
 + 
 +![](/:members:sparky:img_7927.jpeg) 
 + 
 +A real-time transit tracker that displays Sound Transit Link Light Rail train positions on a physical LED map. The system uses an ESP32-S3 microcontroller to poll live transit data and render animated train movements across an addressable LED strip. Originally designed for /dev/hack Seattle. 
 + 
 +**Hardware:** 
 + 
 +- **Microcontroller**: ESP32-S3 (WROOM-1-N8R8) with 8 MB PSRAM and 8 MB flash 
 +- **Display**: 76 SK9822 (APA102-compatible) addressable RGB LEDs in a single chain 
 +- **PCB**: JLCPCB-manufactured, with an expansion connector breaking out unused GPIO, UART pins, and LED access points for external LED strings 
 + 
 +**How it works:** 
 + 
 +- Polls the [OneBusAway API](https://www.soundtransit.org/) for live Sound Transit train positions 
 +- Renders smooth crossfade animations showing train movements between stops on the LED strip 
 +- API key can be requested from Sound Transit at `oba_api_key@soundtransit.org` 
 + 
 +**Development:** 
 + 
 +- **Repository**: [codeberg.org/sparkyfen/wheretrain](https://codeberg.org/sparkyfen/wheretrain) 
 +- **Build environment**: ESP-IDF 5.x (Nix supported) — `cd wheretrain && nix develop && idf.py build flash monitor` 
 +- **Configuration**: WiFi credentials in `network.c`, API key in `main.c` 
 +- **Recovery**: Hold BOOT while powering on, then release and flash with `idf.py flash` 
 +- **License**: CC BY-NC-SA 4.0 
 + 
 +**Status**: Active development. Contributions and feedback welcome — reach out to Sparky on Zulip or check the repo. 
 + 
 +--- 
 + 
 +### TRMNL E-Ink Dashboard 
 + 
 +<WRAP alert> 
 +**Deprecated.** The space runs a different e-ink display now. This section stays for reference. Do not use it as current documentation. 
 +</WRAP> 
 + 
 +![](/:members:sparky:img_7283.jpg) 
 + 
 +A 7.5" e-ink display dashboard that serves as a distraction-free information display. TRMNL uses a privacy-focused design where the device polls for updates rather than allowing external access to the local network. 
 + 
 +**How to interact with it at dma.computer:** 
 + 
 +- **What it shows**: Customizable layouts featuring calendar, weather, news, stocks, and 794+ other plugins 
 +- **Updates**: The display refreshes only when new information is available, preserving battery life (6+ months on a charge) 
 +- **Plugin ecosystem**: Supports integrations with Google Calendar, Home Assistant, weather stations, and community-created plugins 
 +- **Developer friendly**: Create custom plugins using HTML/JSON in under 5 minutes 
 + 
 +Learn more at [usetrmnl.com](https://usetrmnl.com) 
 + 
 +--- 
 + 
 +## Completed Projects 
 + 
 +*Coming soon*
  
-  ---