Releases: OpenShock/Firmware
1.5.1
OpenShock Firmware 1.5.1
Hotfix release addressing a safety-critical E-Stop bypass.
Bug Fixes
- E-Stop - Fixed shocker commands being transmitted while E-Stop was active. Commands are now rejected at the entry point (
CommandHandler::HandleCommand) and discarded in the RF transmit task's receive loop when E-Stop is engaged.
Full Changelog: 1.5.0 -> 1.5.1
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0
OpenShock Firmware 1.5.0
This release is a major firmware update bringing a fully reworked RF transmitter pipeline for more reliable shocker communication, a new T330 shocker protocol, an RFC 8908-compliant captive portal, a rebuilt frontend (Svelte 5 + shadcn), and significant improvements to E-Stop handling and rate limiting.
Warning: Petrainer users will need to re-pair their shockers once they update their hub due to protocol changes.
Highlights
- Added T330 shocker protocol support
- Completely reworked RF behaviour for more reliable shocker control
- WAY more and responsive stable captive portal (It's a night and day difference)
- Rebuilt Captive Portal UI to match frontend style.
- E-Stop button is now significantly more reliable with a re-arm grace period
- Wi-Fi RSSI telemetry reported by the hub for connection health display in frontend
Major Improvements
-
RMT / Radio Transmitter
- Added T330 shocker protocol support
- Fixed timing issues for CaiXianlin and improved PET998DR handling
- Lots of minor optimizations, refactors and guardrails to improve radio reliability
-
E-Stop
- More reliable E-Stop state transitions with change detection, eliminating event spamming
- Re-arm grace period after clearing prevents re-triggering from switch bounce or noise
-
HTTP
- Rate limiter now tracks requests more efficiently with corrected cleanup timing and more predictable blocking
-
Captive Portal
- Captive portal is now refactored to operate more like RFC 8908 spec with improved responsiveness
- Migrated from Svelte 4 + Skeleton UI to Svelte 5 + shadcn-svelte with Tailwind CSS v4
- UI palette synced with OpenShock website; reduced bundle size
- Added unit testing and Svelte check steps; migrated from npm to pnpm
- Removed mDNS server from captive portal
- Removed the "AbsolutelySureButton" UI element, meant as a joke but it got old and obnoxious
-
AssignLCG & Gateway
- AssignLCG uses the new backend endpoint and reports firmware version; legacy LCG override removed
- Improved HTTP error/status consistency and 401 token recovery
Minor Updates / Optimizations
- Wi-Fi RSSI telemetry now reported by the hub so the OpenShock.app frontend can display connection health
- Replaced all
ESP.restart()calls with ESP-IDF nativeesp_restart() - Improved OTA update flow and crash-loop resilience
- Safer integer formatting, reduced unnecessary string copying, and cleaner command/serial logic
- CA certificate bundle updated to December 2025 Mozilla extract, this bundle is not used yet but will be once we drop Arduino for ESP-IDF
- CDN migrated from Cloudflare R2 (rclone) to Bunny CDN (SFTP) with cache purge support
- CI/CD updated: Actions bumped (checkout v6, codeql v4, download-artifact v7), timeout limits on all jobs, pnpm adopted, Node.js updated
- Expanded and cleaned up compiler warnings; PlatformIO, espressif32, FlatBuffers, and other dependency updates
Bug Fixes
- Addressed variable initialization and type casting correctness issues
- Fixed timing issues in CaiXianlin and PET998DR shocker protocols
Full Changelog: 1.4.0 -> 1.5.0
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.7
OpenShock Firmware 1.5.0-rc.7
Fix stable Semver parsing error, make beta builds more verbose, increase OTA task stack size, implement more guards in OTA code.
Full Changelog: 1.5.0-rc.6 -> 1.5.0-rc.7
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.6
OpenShock Firmware 1.5.0-rc.6
Improved Captive-Portal responsiveness, removed mDNS server from Captive-Portal, some code cleanup.
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.5
OpenShock Firmware 1.5.0-rc.5
Fixed a bug where password was not being supplied to websocket serialization function, causing WiFi network to try to authenticate with no password.
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.4
OpenShock Firmware 1.5.0-rc.4
Fixed a bug where using Captive Portal to connect to a WiFi network would pair the password entered with another the network than selected, removed obnoxious "AbsolutelySureButton"
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.3
OpenShock Firmware 1.5.0-rc.3
Fixed a critical bug where the firmware could never connect to LCG, and addressed code correctness issues (variable initialization and type casting) along with compiler warning cleanups.
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.2
OpenShock Firmware 1.5.0-rc.2
This release candidate focuses on E-Stop reliability, rate limiting behavior, and general internal cleanup and correctness improvements.
Highlights
-
Improved E-Stop handling
- More reliable state transitions.
- Removed event spamming by introducing change detection.
- Added a short re-arm grace period after clearing to prevent immediate re-triggering due to switch bounce or noise.
- Cleaner handling of external E-Stop triggers.
-
Rate limiter improvements
- More efficient internal tracking of recent requests.
- Corrected cleanup and timing behavior under sustained load.
- More predictable blocking behavior when limits are exceeded.
Stability & Internal Cleanup
- Safer handling of integer formatting and digit counting (avoids edge-case overflows).
- Reduced unnecessary string copying by tightening ownership where appropriate.
- Command handling and serial logic cleaned up for clearer control flow.
- General warning cleanups, minor API refinements, and consistency improvements across the codebase.
Build & Tooling
- Minor CI and dependency updates.
- Expanded compiler warnings where possible to catch issues earlier during development.
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.5.0-rc.1
OpenShock Firmware 1.5.0-rc.1
This release candidate focuses on radio reliability, firmware behavior improvements, and a refreshed frontend.
Highlights (User-Visible Firmware Changes)
- Major RF/RMT transmitter rework for improved timing accuracy and more reliable shocker communication.
- Updated AssignLCG integration using the new backend endpoint (removes the old LCG override setting).
- Hub now reports its Wi-Fi signal strength (RSSI), this will be used to show connection health in UI's.
- Serial output now uses CRLF line endings for improved compatibility with Windows terminals.
- Added T330 shocker protocol support.
Radio & Timing
- Reworked RF pipeline with more consistent timing and fewer internal allocations.
- Fixed timing issues for CaiXianlin and improved PET998DR handling.
- Additional guardrails added to the RF subsystem to prevent stalls/crash loops.
Firmware Behavior / System
- Introduced internal execution time limits to prevent firmware from getting stuck in long-running operations.
- Replaced all
ESP.restart()usage with ESP-IDF nativeesp_restart()calls - Improved OTA, Wi-Fi initialization, and crash-loop resilience.
HTTP & Gateway
- Clearer/more consistent HTTP error and status behavior.
- Improved 401 handling and token recovery.
- AssignLCG now reports firmware version and uses the updated endpoint.
Frontend & UX
- Migrated to Svelte 5 + shadcn.
- Updated to Tailwind CSS v4 and reduced frontend bundle size.
- UI palette synced with website.
Misc / Internal Changes
- PlatformIO, espressif32, FlatBuffers, Node, pnpm, and other dependency updates.
- Build reproducibility improvements and CI cleanup.
- Various memory fixes, warning cleanups, and improved parsing logic.
Breaking Changes
- LCG override removed (new AssignLCG endpoint required).
- Serial output now uses CRLF (update scripts if needed).
Notes
- RF timing changes are substantial; please report shocker-specific regressions.
- Scripts relying on legacy AssignLCG behavior may need updates.
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin1.4.0
OpenShock Firmware 1.4.0
This release is packed with bugfixes, optimizations, code cleanup, prepwork for ESP-IDF, and some features!
Highlights
- Add support for configuring hostname of ESP via Serial.
- Add support for configuring Emergency Stop via Captive Portal and Serial.
- Report available GPIO pins to Captive Portal Frontend.
- Massively refactor serial command handler.
Optimizations
- Bump platform-espressif32 to version 6.9.
- Start using C++17 features including std::string_view.
- Clean up platformio.ini file.
- Lots of miscellanious code cleanup.
- Implement custom zero-copy type conversion methods with better error checking.
- Reduce log spam by the arduino library.
- Improve error handling of gpio pin selection.
- Attempt to make more sense out of the 998DR protocol serializer.
Flashing the firmware
Download OpenShock_[board]_[version].bin and flash it to your microcontroller:
esptool write_flash 0x0 OpenShock_[board]_[version].bin