Commit Graph

91 Commits

Author SHA1 Message Date
cc5881974c Add sender-local serial diagnostics for pipeline health 2026-02-17 01:12:31 +01:00
ea3e99f350 Use fixed-point meter parsing and early-exit on complete frame 2026-02-17 01:10:43 +01:00
557420c200 Refactor meter parser to single-pass OBIS dispatch 2026-02-17 01:09:56 +01:00
c33fb3274c Update docs for auth, time, discovery, and history changes 2026-02-17 00:45:39 +01:00
fea3749a93 Require AP web authentication by default 2026-02-17 00:39:44 +01:00
16b8827dca Use local hh:mm:ss in SD CSV human-readable column 2026-02-17 00:39:23 +01:00
318b81adbe Update HA discovery IDs and manufacturer metadata 2026-02-17 00:37:38 +01:00
3ef13bf865 Separate plausible clock from explicit sync state 2026-02-17 00:33:45 +01:00
8d42631045 Harden history parsing and single-point chart rendering 2026-02-17 00:32:48 +01:00
5c71bf841a Handle WiFi config save failures safely 2026-02-17 00:31:55 +01:00
96192d4b2f Fix HA discovery device identifiers format 2026-02-17 00:30:36 +01:00
16aad906a0 Harden receiver ingest against unknown senders 2026-02-17 00:30:06 +01:00
ee849433c8 Refresh README and add firmware requirements for Rust port 2026-02-16 14:38:50 +01:00
6ea8d9d5fc Use configured local timezone in web UI and drop legacy history CSV parsing 2026-02-16 11:14:30 +01:00
4de1dda82b Add human-readable UTC time alongside epoch in web UI and CSV 2026-02-16 08:57:16 +01:00
0a2e4e5a68 docs: update README to current lora-refactor state 2026-02-13 23:57:34 +01:00
5e27e2e7e8 Add meter Sekundenindex anchoring for epoch timestamps
Parse 0-0:96.8.0*255 meter seconds, derive sample epoch from anchored offset, and detect meter-time jumps via monotonic/delta checks.
2026-02-13 23:57:34 +01:00
c58e1627f4 Switch LoRa batch payload to present-mask schema v3
BREAKING CHANGE: schema v2 is no longer supported.

Replaces fixed dt_s timing with a 30-bit present_mask while keeping MQTT JSON unchanged.
2026-02-13 23:57:34 +01:00
7ad0a16a8d Improve meter ingestion resilience under UART gaps 2026-02-13 23:57:34 +01:00
78a880e56f Track receiver duplicate batches in web and OLED 2026-02-13 23:57:34 +01:00
1981a91415 Remove legacy state JSON size cutoff and raise doc capacity 2026-02-13 23:57:34 +01:00
9f5ad5f47e Backfill missed sender sample intervals to keep dt_s consistent 2026-02-13 23:57:34 +01:00
f65a6d28d9 Remove auto-reboot and make timezone configurable 2026-02-13 23:57:34 +01:00
32851ea61b Decouple sender meter reads and harden meter RX robustness 2026-02-13 23:57:34 +01:00
e569c8d627 Add web last-update timestamp and debug auto-reboot 2026-02-13 23:57:34 +01:00
3951183954 Fix sender stale sample reuse and add append helper 2026-02-13 23:57:34 +01:00
acidburns
1769949dc8 docs: refresh README for lora-refactor behavior 2026-02-13 23:57:34 +01:00
db18c549ea Reset RX signal state at start of each receive window 2026-02-13 23:57:34 +01:00
bd3f89a374 Drain oversized LoRa packets to prevent RX FIFO corruption 2026-02-13 23:57:34 +01:00
194c8a40cc Add detailed sender ACK RX diagnostics with reject context 2026-02-13 23:57:34 +01:00
780cf8dc97 Use protocol constants for ACK airtime window sizing 2026-02-13 23:57:34 +01:00
b056b2035a Document minimal batch/ack protocol and timestamp safety rules 2026-02-13 23:57:34 +01:00
a279c219ae Refactor LoRa protocol to batch+ack with ACK-based time bootstrap 2026-02-13 23:57:34 +01:00
5ad5d3a0cc Normalize power/energy output formatting 2026-02-13 23:57:34 +01:00
43c572a111 Scale ACK RX window to LoRa airtime
- Compute ACK receive window from airtime with bounds and margin
- Retry once if initial window misses
- Document ACK window sizing
2026-02-13 23:57:34 +01:00
06847a9da4 Add RX reject reasons to telemetry and UI
BACKWARD-INCOMPATIBLE: MeterBatch schema bumped to v2 with err_rx_reject.
- Track and log RX reject reasons (CRC/protocol/role/payload/length/id/batch)
- Include rx_reject in sender telemetry JSON and receiver web UI
- Add lora_receive reject reason logging under SERIAL_DEBUG_MODE
2026-02-13 23:57:34 +01:00
8681f37fc1 Repeat batch ACKs to cover RX latency
- Add ACK_REPEAT_COUNT/ACK_REPEAT_DELAY_MS and repeat ACK sends
- Update README with repeat-ACK behavior
2026-02-13 23:57:34 +01:00
2aca446860 Add LoRa TX timing diagnostics
- Log idle/begin/write/end timing for LoRa TX under SERIAL_DEBUG_MODE
- Document TX timing logs in README
2026-02-13 23:57:34 +01:00
8aa503c450 Send batch ACKs immediately after reassembly
- Move ACK ahead of MQTT/web work to meet sender 400ms window
- Update ACK log format and document early-ACK behavior
2026-02-13 23:57:34 +01:00
b2d7d77f5c Log ACK transmit and reject cases
- Add debug log for ACK TX with batch/sender/receiver ids
- Log rejected ACKs to help diagnose mismatched ids or batches
2026-02-13 23:57:34 +01:00
c2e1268f1f Improve timesync acquisition and logging
- Add boot acquisition mode with wider RX windows until first TimeSync
- Log sender TimeSync RX results and receiver TX events
- Document acquisition behavior
2026-02-13 23:57:34 +01:00
ecb73679b6 Validate RTC epoch before setting time
- Reject out-of-range DS3231 epochs and log accept/reject under SERIAL_DEBUG_MODE
- Document RTC validation so LoRa TimeSync can recover
2026-02-13 23:57:34 +01:00
bd784e88ba Gate slow timesync on LoRa reception
- Keep sender in fast TimeSync listen mode until it receives a LoRa beacon
- Reset scheduler when interval changes to avoid stuck timing
2026-02-13 23:57:34 +01:00
20348c3e6b Expose timesync error in MQTT and web UI
BACKWARD-INCOMPATIBLE: MQTT faults payload now always includes err_last/err_last_text and err_last_age (schema change).
2026-02-13 23:57:34 +01:00
deb060fd20 Add timesync burst handling and sender-only timeout
- Add TimeSync fault code and labels in UI/SD/web docs
- Trigger receiver beacon bursts on sender drift, but keep errors sender-local
- Sender flags TimeSync only after TIME_SYNC_ERROR_TIMEOUT_MS
2026-02-13 23:57:34 +01:00
e7318f2e71 Keep receiver timesync fast and extend sender fast window
- Receiver now sends time sync every 60s indefinitely (mains powered)
- Sender stays in fast timesync listen mode for first 60s even with RTC
2026-02-13 23:57:34 +01:00
532a9154b1 Calibrate battery ADC and document LiPo curve
- Add BATTERY_CAL config and debug logging for raw ADC samples
- Use LiPo voltage curve (4.2V full, 2.9V empty) for % mapping
- Document battery calibration, curve, and debug output in README
2026-02-13 23:57:18 +01:00
096b4384d0 Average battery ADC samples
- Read battery 5 times and average for a steadier voltage estimate
2026-02-13 23:57:18 +01:00
e045673a3a Fix OLED autosleep timing and battery sampling cadence
- Track last OLED activity to avoid double timeout; keep power gating on transitions
- Copy TZ before setenv() in timegm_fallback to avoid invalid pointer reuse
- Add BATTERY_SAMPLE_INTERVAL_MS and only refresh cache at batch start when due
- Keep battery sampling to a single ADC read (Arduino core lacks explicit ADC power gating)
2026-02-13 23:57:18 +01:00
532e51a76b Keep receiver LoRa in continuous RX
- Add lora_receive_continuous() helper and use it after init and TX (ACK/time sync)

- Ensure receiver returns to RX immediately after lora_send

- Document continuous RX behavior in README
2026-02-13 23:56:36 +01:00