Skip to content

Releases: atnorman-us/gdo-blaq-homekit

1.3.1.12

Choose a tag to compare

@atnorman-us atnorman-us released this 10 Oct 01:02

What's changed in 1.3.1.12

  • Fix the HomeKit Learn Mode switch being omitted when Security+ 2.0 rolling-code recovery takes longer than the startup sync timeout. HomeKit now waits for positive protocol evidence rather than full paired-device synchronization, while tentative protocol probes and unknown hardware still hide Learn Mode safely.

See the README for installation and usage instructions.

1.3.1.11

Choose a tag to compare

@atnorman-us atnorman-us released this 09 Oct 15:00

What's changed in 1.3.1.11

  • Fix valid status packets being dropped as "RX data signature errors" while the motor or light is running. A UART read can contain a stray byte after the 19-byte packet as well as the usual leading break byte; the old framing assumed every extra byte was leading and discarded the packet's 0x55 start byte, so the packet was rejected. Packets are now located by their start signature, so Opening/Closing and other status updates are no longer lost mid-transition.

See the README for installation and usage instructions.

1.3.1.10

Choose a tag to compare

@atnorman-us atnorman-us released this 21 Sep 01:00

What's changed in 1.3.1.10

  • Reconcile obstruction state from every validated status frame, not only when the baseline is unknown or right after a toggle event. An obstruction toggle event can go stale if its matching event frame is lost to RX noise; the following status frame's obstruction bit now corrects it instead of leaving the stale reading in place.

See the README for installation and usage instructions.

1.3.1.9

Choose a tag to compare

@atnorman-us atnorman-us released this 16 Sep 20:08

Changes

  • Reject malformed Security+ 2.0 packets and invalid status fields before state updates; include rejected-frame diagnostics.
  • Fix battery-state handling and travel-time measurement after stops or reversals.
  • Keep HomeKit responsive during the five-second close warning. Newer commands can cancel a pending close, and closing rechecks synchronization and obstruction.
  • Limit an unstarted door command to one retry and revalidate automatic closing after its warning.
  • Apply real obstruction changes immediately. Request status when the initial baseline is unknown instead of guessing from a toggle; do not clear obstruction on a timer.
  • Correct watchdog status recovery and remove the ineffective unchanged-value HomeKit resend.
  • Protect device controls, firmware operations, and logs with a user-set admin password; mask entry and remove WiFi credentials from logs.
  • Display a pairing-fault indication after sustained synchronization failure.
  • Update installation, authentication, OTA, and troubleshooting documentation.
  • Publish correctly merged USB firmware, a separate OTA image, and SHA-256 checksums directly to GitHub.

Installation

  • Dashboard OTA: use gdo-blaq-homekit-1.3.1.9-ota.bin.
  • USB installation: use konnected-gdo-blaq-homekit-1.3.1.9.bin at flash address 0x0.
  • Do not upload the combined USB image through the OTA dashboard.
  • Verify downloads against SHA256SUMS.txt.

On first dashboard use, set an admin password. The generated-token workflow from earlier development builds has been replaced. Firmware uploads do not require signed images; use releases from this repository. See the README for password recovery limits and older partition-layout migration.

Validation

  • 19 host regression tests passed.
  • ESP-IDF 5.4.1 build for ESP32-S3.
  • No physical-device or iOS 27 compatibility certification is claimed.

1.3.1

Choose a tag to compare

@atnorman-us atnorman-us released this 28 Jul 02:18

Bug fix

Door state could flash back to "Closed" mid-open, then get stuck showing "Opening" long after the door had actually finished.

Root cause: a gdolib fix from 1.2 (arming door-position interpolation on the MOTOR_ON event, so a lost STATUS frame couldn't fool the stalled-motor watchdog) started the position-interpolation timer using door_target, but the timer's own callback picked its interpolation direction from g_status.door - which MOTOR_ON never actually set. If the real "Opening" STATUS frame got lost to RX noise (confirmed via a field capture showing a burst of RX data signature error lines right after MOTOR_ON), g_status.door stayed stale at Closed for the whole transition. The interpolation timer then computed position in the wrong direction and forwarded that stale Closed state straight to HomeKit - and the same staleness kept our own transition watchdog from recognizing a transition was even in progress, which is why the door then got stuck showing "Opening" well after it had actually finished.

Fix: g_status.door is now set from door_target at the same point the interpolation timer is armed, so the direction is correct from the first tick regardless of whether the real STATUS frame ever arrives. Bundled via the updated gdolib submodule.

Upgrade notes

No partition table or config changes since 1.3 - installable via the Firmware section on the dashboard.

1.3

1.3

Choose a tag to compare

@atnorman-us atnorman-us released this 28 Jul 01:02

Highlights

Redesigned diagnostics dashboard

The dashboard at http://gdo-blaq.local:8080/ has been rebuilt as a grouped card layout, inspired by (not cloned from) Konnected's own ESPHome dashboard:

  • Overview: Garage Door / Light / Lock shown as colored status pills instead of plain text.
  • Sensors: motion, obstruction, battery status, and lifetime door-opening count.
  • System: WiFi signal (dBm and %), device IP address, free heap, connected HomeKit sessions, last reset reason, RX error count.
  • Auto-Close and Firmware sections carry over unchanged (two-step upload/confirm/cancel, manual rollback, live countdown).
  • Follows your system's light/dark theme automatically.

New status fields

/status now reports openings, battery, wifi_rssi_pct, and ip_address - the IP address in particular is a useful fallback wherever mDNS/gdo-blaq.local isn't reachable (e.g. reading it off a router's client list).

Upgrade notes

No partition table or config changes since 1.2 - this is a pure OTA-installable update through the Firmware section on the dashboard.

1.2

1.2

Choose a tag to compare

@atnorman-us atnorman-us released this 27 Jul 01:48

Highlights

Over-the-air firmware updates

The diagnostics page (http://gdo-blaq.local:8080/, or by IP) now supports uploading new firmware directly from the browser — no more USB required for routine updates.

  • Device now ships with a two-OTA-slot partition table, so an uploaded image is written to the inactive slot while the current one keeps running.
  • Upload is two-step: the image is validated and its version reported before you commit to rebooting into it (Confirm & Reboot / Cancel).
  • Bootloader app-rollback is enabled: if a newly-flashed image can't bring WiFi and the diagnostics server back up, it's automatically reverted on the next reset instead of leaving the device stuck.
  • A manual "Roll back to other slot" button lets you deliberately boot the previous known-good image at any time.

mDNS

The device now advertises itself as gdo-blaq.local on the LAN, so the diagnostics page no longer requires hunting down its IP address.

GDO protocol reliability

  • The Security+ protocol (1.0 vs 2.0) is now pinned from the last confirmed successful sync instead of re-running auto-detection on every boot. This closes a real failure mode where a stray noise packet could get misidentified as a Security+ 1.0 command and lock a Security+ 2.0 opener into the wrong protocol for the whole session. A confirmed 2.0 sync is sticky and can't be overwritten by a later false-positive 1.0 detection — Security+ 1.0 hardware is still fully auto-detected and supported.
  • A stalled open/close command (motor never engaged) is now retried once before HomeKit's target state is reverted, instead of giving up immediately.

gdolib fixes

Bundled via an updated gdolib submodule (now tracking a fork with these fixes on top of upstream):

  • Door-position interpolation could fail to start if only one of the two travel-time directions had been learned yet, leaving position frozen during a genuine transition.
  • Position interpolation is now also armed on the MOTOR_ON event, not only on an explicit STATUS frame, so it survives a noise burst that eats the confirming frame.
  • get_status() is no longer re-requested on every repeated MOTION frame, only on a genuine state change.
  • Added a missing NULL check after the TX packet allocation.

Also included since 0.5

  • Auto-close: door closes automatically after a configurable open duration, with a live countdown on the diagnostics page.
  • Pre-close (UL-325) warning buzzer/LED before an automated or remote close.
  • Obstruction watchdog and RX-error/obstruction counters surfaced on the diagnostics page.
  • Fixed a GDO travel-time measurement bug.
  • General diagnostics web server hardening (more robust restart handling, protocol display, log download).

Upgrade notes

This release changes the flash partition layout to support OTA. A device currently running 0.5 or earlier needs one manual USB flash (idf.py flash) to move onto the new partition table — WiFi credentials and saved settings are preserved across this transition (same NVS partition offset/size). Every update after that one-time transition can go through the web page.

v1.1.1-beta

Choose a tag to compare

@atnorman-us atnorman-us released this 17 Jul 01:12

Fixed GDO travel time bug

v1.1-beta

Choose a tag to compare

@atnorman-us atnorman-us released this 16 Jul 15:32

Implemented Auto-Close feature with an enable/disable feature. You can set number of minutes open before it closes. Defaults to disabled and can be accessed via diagnostics web server.

v1.0-beta

Choose a tag to compare

@atnorman-us atnorman-us released this 15 Jul 19:00

Updated logic for obstruction state in Homekit.