{
  "generated": "2026-10-29T07:18:32Z",
  "channels": {
    "stable": {
      "version": "v3.3.2-etr.3",
      "manifest": "https://updates.edmontontransitriders.org/firmware/manifest.json"
    },
    "beta": {
      "version": "v3.3.2-etr.5",
      "manifest": "https://updates.edmontontransitriders.org/firmware/beta/manifest.json"
    }
  },
  "firmware": [
    {
      "version": "v3.3.2-etr.5",
      "upstream": "v3.3.2",
      "etr": 5,
      "status": "beta",
      "withdrawn": null,
      "to_beta": "2026-10-28T03:35:50Z",
      "to_stable": null,
      "superseded": null,
      "esphome": "2026.9.1",
      "firmware_commit": "6f6d0681a78f76df378ff7cfeb69bc7cccba2c49",
      "component_commit": "ea37b4ea4d5250f716b6b485fe772620d40fb679",
      "files": [
        {
          "kind": "factory",
          "name": "firmware-v3.3.2-etr.5.factory.bin",
          "bytes": 1382816,
          "sha256": "25b7f9ece215c8bc1e96c884b755624b38f94711677add21363f89c1dc844806",
          "url": "https://updates.edmontontransitriders.org/firmware/firmware-v3.3.2-etr.5.factory.bin"
        },
        {
          "kind": "ota",
          "name": "firmware-v3.3.2-etr.5.ota.bin",
          "bytes": 1317280,
          "sha256": "a4daa5cb0021fb946bcfe42f6e5b432a1e5bfba241acca91bb3c9252b1944f6f",
          "url": "https://updates.edmontontransitriders.org/firmware/firmware-v3.3.2-etr.5.ota.bin"
        }
      ],
      "notes": "Shows the correct Alberta time.\n\n- Clock times on the display now use Edmonton time. Before this, the firmware\n  used Pacific time, so arrival times shown as a clock time were an hour early.\n- Follows Alberta's year-round time (UTC-6): no clock change in November.\n- No other changes from v3.3.2-etr.4.\n\nEmergency patch: built directly on v3.3.2-etr.4 with this one change. It skips\nthe usual bench soak (exception recorded here, as the release rules require)."
    },
    {
      "version": "v3.3.2-etr.4",
      "upstream": "v3.3.2",
      "etr": 4,
      "status": "superseded",
      "withdrawn": null,
      "to_beta": "2026-10-23T23:18:39Z",
      "to_stable": null,
      "superseded": "2026-10-28T03:35:50Z",
      "esphome": "2026.9.1",
      "firmware_commit": "8ce1ab09bc548a6b47e5e8fda134b0644355ca32",
      "component_commit": "ea37b4ea4d5250f716b6b485fe772620d40fb679",
      "files": [
        {
          "kind": "factory",
          "name": "firmware-v3.3.2-etr.4.factory.bin",
          "bytes": 1382848,
          "sha256": "344d761358b1652a7f911c2937176faa79c0006d20060f6875012d6e4ba372ba",
          "url": "https://updates.edmontontransitriders.org/firmware/firmware-v3.3.2-etr.4.factory.bin"
        },
        {
          "kind": "ota",
          "name": "firmware-v3.3.2-etr.4.ota.bin",
          "bytes": 1317312,
          "sha256": "080b46ae852db67fb55dade1da02b34a1d6dd30bf530de7e3820430bd01b5616",
          "url": "https://updates.edmontontransitriders.org/firmware/firmware-v3.3.2-etr.4.ota.bin"
        }
      ],
      "notes": "Works on networks that block internet time servers.\n\n- If the tracker cannot reach a time server (some business and office\n  networks block them), it now sets its clock over a normal web connection\n  instead. Before this, it stayed on \"Waiting for time sync\".\n- No change on networks where time sync already works."
    },
    {
      "version": "v3.3.2-etr.3",
      "upstream": "v3.3.2",
      "etr": 3,
      "status": "stable",
      "withdrawn": null,
      "to_beta": "2026-10-22T03:56:22Z",
      "to_stable": "2026-10-22T14:20:43Z",
      "superseded": null,
      "esphome": "2026.9.1",
      "firmware_commit": "dd3d108a063108785ff6edb89688c4a7208ffac7",
      "component_commit": "0073c94010a9f8710a8e69fe3103d6e84b9176fe",
      "files": [
        {
          "kind": "factory",
          "name": "firmware-v3.3.2-etr.3.factory.bin",
          "bytes": 1377792,
          "sha256": "2b155b2e449672bcc6f7d4bdf3eaf7bff013e3ae6659a8c30aa0882704efdaa1",
          "url": "https://updates.edmontontransitriders.org/firmware/firmware-v3.3.2-etr.3.factory.bin"
        },
        {
          "kind": "ota",
          "name": "firmware-v3.3.2-etr.3.ota.bin",
          "bytes": 1312256,
          "sha256": "d35f067f1036ba5c9aed1da01e82a344d759c392144b92156d3bf7c959fa5a3a",
          "url": "https://updates.edmontontransitriders.org/firmware/firmware-v3.3.2-etr.3.ota.bin"
        }
      ],
      "notes": "First release on the ETR update channel.\n\n- Badge layout (opt-in) and classic layout, based on upstream v3.3.2.\n- This device now checks updates.edmontontransitriders.org for new versions.\n  Turn off Auto-Update on the device's web page if you would rather install\n  updates yourself.\n\nReleased to stable about ten hours after it reached beta, without the\nusual 7-day beta period, to fix the configurator's setup page installing an older\nbuild that never updated itself."
    }
  ],
  "changelog": {
    "configurator": [
      {
        "date": "2026-10-23",
        "title": "Switched to the realfeeds data server",
        "body": "### Changed\n- New setups now use `realfeeds.edmontontransitriders.org` for transit data, where\n  Edmonton routes are coded `ets:`. A browser that already saved its settings\n  keeps the server it had.\n- **Use ETR defaults** treats `kcm:` and `ets:` as the same Edmonton route, so\n  route colours and badges apply whichever server a tracker uses."
      },
      {
        "date": "2026-10-22",
        "title": "ETR branding, and setup installs the channel build",
        "body": "### Added\n- ETR branding on the home page, with a support and credits footer.\n\n### Fixed\n- **Initial setup** could install an older ETR build (etr.2) that reports its\n  version as `dev` and never auto-updates. It now installs the current channel\n  build."
      },
      {
        "date": "2026-10-20",
        "title": "Firmware families and the ETR update page",
        "body": "### Added\n- Firmware families: a tracker running ETR firmware is only ever offered ETR\n  builds, and one running stock firmware only stock builds. Without this, a stock\n  release could be offered to an ETR tracker as an \"upgrade\" and remove the badge\n  layout.\n\n### Changed\n- The update prompt sends ETR trackers to the ETR update page instead of\n  upstream's documentation.\n\n### Fixed\n- Switching from Badge back to Classic layout now always takes effect.\n- A leftover layout setting from the first badge builds (May 2026) is reset.\n- The real-time wave in badge mode is drawn at the same height as in Classic."
      },
      {
        "date": "2026-08-21",
        "title": "Firmware choice on setup, better defaults",
        "body": "### Added\n- A firmware choice on **Initial setup**: ETR build or upstream.\n- The preview shows the small \"m\" minutes mark the firmware draws.\n\n### Changed\n- **Use ETR defaults** now corrects a wrong route colour, not just missing ones.\n\n### Fixed\n- Letters with descenders (g, j, p, y) were clipped on the short band.\n- The bar real-time indicator was reworked to read more clearly."
      },
      {
        "date": "2026-08-20",
        "title": "Badge layout in the configurator",
        "body": "### Added\n- The simulator draws the badge layout, so you can preview it before pushing.\n- Layout and real-time indicator pickers that show how many departures fit.\n- **Use ETR defaults**: imports ETR's route category colours and badge codes.\n\n### Fixed\n- The warning before pushing settings never appeared.\n- The simulator ignored language settings."
      }
    ],
    "feeds": [
      {
        "date": "2026-10-23",
        "title": "Second data server, shared real-time cache",
        "body": "### Added\n- `realfeeds.edmontontransitriders.org`, a second data server where Edmonton\n  routes and stops are coded `ets:`, the same as upstream's naming. New setups use\n  it.\n\n### Changed\n- Both servers now share one cached copy of ETS's real-time data instead of each\n  fetching it separately.\n\n### Known issues\n- `feeds.edmontontransitriders.org` (Edmonton coded `kcm:`) stays online for\n  trackers set up before the switch. Moving a tracker means re-pushing its routes\n  with `ets:` codes."
      },
      {
        "date": "2026-10-22",
        "title": "Seven more Alberta transit systems",
        "body": "### Added\n- Calgary, Red Deer, Lethbridge, Medicine Hat, Grande Prairie, Roam (Bow Valley)\n  and Wood Buffalo. Real-time predictions where the agency publishes them:\n  Calgary, Medicine Hat, Roam and Wood Buffalo. The others show scheduled times.\n\n### Fixed\n- Calgary real-time predictions froze, because Calgary's server asks for its data\n  to be cached for 14 days. They now refresh every 15 seconds."
      },
      {
        "date": "2026-10-21",
        "title": "ETR runs its own data server",
        "body": "### Added\n- `feeds.edmontontransitriders.org` serves ETS schedules and real-time\n  predictions. ETS's data also covers St. Albert, Strathcona County, Spruce\n  Grove, Fort Saskatchewan, Beaumont and Leduc. Schedules refresh daily.\n\n### Changed\n- Edmonton is coded `kcm:` on this server, matching what trackers already in\n  the field have stored.\n\n### Fixed\n- Looking up departures for a stop went from about 10 seconds to a few\n  milliseconds."
      }
    ]
  }
}