All notable changes to the Glasscalibur firmware are documented here. As of
v2.0.0 the version number comes from the release git tag: the build workflow
stamps it into the fw_version substitution (feeding project.version reported
to Home Assistant / the ESPHome dashboard and the "Firmware Version" diagnostic
sensor). Local/branch builds report dev.
This project adheres to Semantic Versioning and the format is based on Keep a Changelog.
2.1.0 - 2026-07-23
- Speed presets — Slow / Medium / Fast (Motion Tuning): 1200 / 2600 / 5500 steps/s, chosen from an accelerometer resonance sweep of this mechanism. The drivetrain has a violent resonance at ~2900–3300 steps/s (worst 3000–3100); all three presets stay clear of it (ramps only cross it transiently, which is harmless). The max-speed cap was raised 1200 → 5500 — the motor tracks cleanly well beyond, but above ~6000 the free-run vibration starts false-tripping the stall detector, so 5500 is the ceiling. Fast is ~4.5× the previous top speed. The raw Speed slider moves to the advanced group.
- StallGuard Auto-Tune switch (advanced group, opt-in, default OFF): a self-healing SGTHRS that cross-checks every StallGuard trip against the accelerometer. It raises the threshold when vibration catches a stall StallGuard missed, and lowers it after a run of quiet mid-travel trips that look like false positives. Adjustments are one register step at a time, clamped to a safe band, logged, and counted via a new "Auto-Tune Adjustments" diagnostic. A fresh Auto-Calibrate always overrides whatever it has drifted to.
- Calibration button gesture: double-click → 7 quick presses (GPIO21). Auto-calibration drives the window through its full travel, so the trigger is now deliberately hard to hit by accident; a stray double-tap no longer starts it. The 3–10 s hold (Wi-Fi credential wipe) on the same button is unchanged, and the two timings still cannot overlap.
2.0.0 - 2026-07-22
Major architectural change: the firmware is now built on the shared
valar-core + scheduling packages (from Valar-Systems/valar-motion,
pinned at v0.3.0) rather than a single monolithic config. Board infrastructure
(Wi-Fi, API, OTA, web UI, diagnostics, the TMC2209 driver, and the daily/sun
schedule) comes from core; only Glasscalibur's product hardware and logic (cover,
limit switches, LIS2DH12 tamper/vibration, TMP1075, buzzer, child lock, and the
auto-calibration sequence) live in the product layer.
- Auto-calibration (double-click the Wi-Fi/Calibrate button, or the "Auto-Calibrate" entity): a 3-phase sequence that homes on the limit switches, searches for the minimum viable motor current, and tunes StallGuard (SGTHRS / TCOOLTHRS) and the vibration threshold from the measured travel. Result is shown in "Calibration Status" and persisted. Includes a stall auto-release back-off and a thermal guard.
- Board diagnostic sensor (from core), reporting the board identity.
- BREAKING — tuning entity names now match the shared core across the Valar
product line. Home Assistant
entity_ids change accordingly:max_speed→ Speed,acceleration→ Acceleration,irun→ IRUN (motor current),SGTHRS→ SGTHRS (stall threshold), and theTSTEP Sensor/SG_RESULT Sensordiagnostics → TSTEP / SG_RESULT. Motor-current entries are still capped at IRUN 19 (rated 0.6 A). - Firmware version now comes from the release tag (see note above) instead of a
hardcoded
firmware_versionsubstitution. - The GitHub-OTA "Update Firmware" button, the Restart button, and the
Firmware Version / network-info diagnostics are now provided by core (the OTA
asset URL —
Glasscalibur.ota.binfrom the latest release — is unchanged).
1.2.0 - 2026-06-30
- Child Lock switch (Control group). When ON, the physical Button 1 (single- and double-click) is ignored so the cover can't be opened, closed, or stopped from the on-device button — useful for keeping a child from operating it. Remote control is intentionally unaffected: the web UI, Home Assistant, and the open/close schedule all keep working, so you can still operate the cover and toggle the lock from your phone. The Wi-Fi-reset button (GPIO21) is also left active so the device can always be recovered. State persists across reboots; defaults OFF so a fresh unit is never locked.
1.1.0 - 2026-06-29
- GitHub OTA updates:
http_requestOTA platform plus an "Update Firmware (GitHub)" button that pulls the latest release from GitHub and self-flashes. - Firmware Version diagnostic sensor and a Restart button.
- Sunrise/sunset schedule: latitude/longitude + signed minute offsets and a "Sun Schedule" switch (60 s sun poll). The fixed Open/Close-Time triggers are suppressed while Sun Schedule is on.
- Grouped web UI (
web_serverversion 3): entities are organized into Control / Motion Tuning / StallGuard / Security-Tamper / Schedule / Diagnostics groups instead of one alphabetical list. - Rewrote the firmware README to document the feature set and the release-publishing workflow the GitHub OTA button depends on.
1.0.0 - 2026-06-09
- Initial ESPHome firmware for the ESP32-C6 + TMC2209 stepper window cover.
- Cover control (open / close / position) with end-stop limit switches for absolute position calibration; position persisted across reboots.
- Browser-based control panel (no Home Assistant required) plus the native ESPHome API for optional Home Assistant pairing.
- Daily open/close time schedule with browser-editable times and timezone.
- Anti-tamper detection (LIS2DH12 accelerometer baseline + buzzer alarm).
- Stall detection: TMC2209 StallGuard plus a secondary accelerometer-based vibration-stall check.
- Motor over-temperature cutoff (TMP1075, hard stop above 80 °C).
- Wi-Fi provisioning with no hardcoded credentials (fallback hotspot + captive portal, Improv over USB serial).