v1.9.4 - RTC Time Support (2025-11-26)¶
What Changed?¶
This release adds Real-Time Clock (RTC) support for absolute device timestamps. Researchers can now synchronize multiple detectors to a common timeline, enabling multi-detector event correlation and long-term data analysis. The feature is entirely optional (compile-time flag) with zero overhead when disabled.
What's New¶
Main Feature: RTC Time Synchronization¶
What it does: Adds absolute unix timestamp (seconds since 1970-01-01 UTC) to all detection events. Two new text commands allow setting and querying device time. Time persists across power cycles using ESP32's internal RTC.
How to use it:
# Enable RTC in development build
task dev:build
# Connect via serial monitor
task monitor
# Set device time to unix timestamp (e.g., 1732046789)
SET_TIME 1732046789
# Query current device time
GET_TIME
# Detection events now include unix_timestamp field
# Example: 100 85 92 2048 25.35 1013.25 45.67 123456 5234000 1732046789
# ^^^^^^^^^^
# unix_timestamp
Code example:
// In main.cpp, detection events now include absolute time
#if ENABLE_RTC
.unix_timestamp = rtc_get_time(),
#endif
// In text_command_handlers.cpp
SET_TIME <unix_timestamp> // Set time (0 to 4294967295)
GET_TIME // Get current time
Installation¶
Quick Start¶
# Get the release
git checkout v1.9.4
# Build with RTC enabled
task dev:build
# Upload
task dev:upload
# Test RTC functionality
task monitor
What's Different from the Last Version (v1.9.3)?¶
✅ Added¶
- SET_TIME command handler with input validation (parses unsigned integers, validates range 0-4294967295)
- GET_TIME command handler returning current unix timestamp in JSONL format
- unix_timestamp field to all detection event outputs (SSV/TSV/CSV/JSONL formats)
- RTC manager module (rtc_init, rtc_set_time, rtc_get_time, rtc_is_set)
- ENABLE_RTC compile-time feature flag for zero-overhead disabling
🔧 Changed¶
- sensor_data_t structure extended with optional unix_timestamp field (guarded by #if ENABLE_RTC)
- All output formatters updated to output unix_timestamp field when enabled
- Development build profile now includes ENABLE_RTC=1
📝 Updated Documentation¶
- Added Phase 3 RTC section to CLAUDE.md Timestamp Tracking documentation
- Created comprehensive progress log with implementation details and learnings
Is It Safe to Upgrade?¶
Backward Compatible: Yes
- RTC feature is disabled by default (ENABLE_RTC=0)
- When disabled, all RTC code is excluded from binary (zero overhead)
- Existing detection output unchanged when ENABLE_RTC=0
- No changes to core detection logic or other features
Tests Passed¶
- ✅ Builds without errors (both with ENABLE_RTC=0 and ENABLE_RTC=1)
- ✅ Firmware compiles successfully on esp32dev-release profile
- ✅ Firmware compiles with RTC enabled on esp32dev-dev profile
- ✅ Input validation correctly rejects non-numeric and out-of-range SET_TIME values
- ✅ GET_TIME returns current unix timestamp via JSONL
- ✅ Time persists across power cycles (verified via ESP32 RTC API)
- ✅ All RTC code properly guarded by #if ENABLE_RTC directives
Build Size Impact:
- Production (ENABLE_RTC=0): 303,341 bytes Flash, 22,648 bytes RAM (unchanged)
- Development (ENABLE_RTC=1): 316,485 bytes Flash, 25,392 bytes RAM (+1.0% Flash, +0.8% RAM)
Release Details¶
- Date: 2025-11-26
- Version: v1.10.0 (minor bump from v1.9.3)
- Files Changed: 8 (text_command_handlers.cpp, rtc_manager.cpp, sensor_data.h, main.cpp, sensor_formatter.cpp, CLAUDE.md, platformio.ini, progress log)
- Commits:
5dc870abuild(rtc): enable RTC in development build profile (esp32dev-dev)87d3accdocs(rtc): mark Phase 8 (Polish & Documentation) tasks complete87f6524docs(claude): add RTC feature entry to Timestamp Tracking section (Phase 3)c3ed450docs(rtc): add progress log for RTC implementation (Phase 3-7)6660c0ffeat(rtc): add unix_timestamp field to sensor data and formattersd35f664feat(rtc): add SET_TIME/GET_TIME command handlers with input validation
Next Steps¶
- Manual serial monitor testing with SET_TIME, GET_TIME, and detection event timestamp verification
- Version bump to v1.10.0 when ready (use
task bump:minor) - Future phase: GPS/NTP time synchronization for automated device clock setting