Repository navigation
Releases
v0.2.1 - Dashboard units and refreshed screenshots
The local weather dashboard now coordinates temperature, wind, gusts, and rain units from one selection.
| Selection | Temperature | Wind and gusts | Cumulative rain |
|---|---|---|---|
| Fahrenheit | F | mph | inches |
| Celsius | C | km/h | mm |
The browser remembers the selection. Stored readings and CSV field units remain unchanged. Rain is the cumulative sensor total, not daily rainfall.
This release also refreshes the README, repository description, feature summary, documentation links, and screenshot gallery. New images show actual live reception on November 3, 2026; earlier screenshots remain labeled as experiment history.
Dashboard guide and complete screenshot gallery
Validation: both display modes were checked in the running UI. All 37 software tests, native C++ fixture checks, and the firmware build passed in GitHub Actions. Documentation links and image loading were checked. This update does not change the RF acquisition or onboard decoder algorithm introduced in v0.2.0.
Reception remains experimental. Native 915 MHz reception, absolute RF frequency, and useful range remain unverified.
v0.2.0 - Onboard VEVOR decoding
Normal VEVOR packet decoding now runs on the ESP32. The dashboard and CLI receive CRC-framed weather reports and compact diagnostics, with no raw RF array transfer in normal operation.
- Onboard clock recovery, local refinement, measured-copy combining, sync-template phase fitting, header/checksum/counter validation, and weather extraction.
- Bounded scratch storage uses integer-only access to the original ESP32 32-bit heap; RF aperture guards remain enabled.
- Receiver panel shows decoding location, measured runtime, and USB report size. Explicit raw CAP/MON and recorded replay remain available for debugging.
Validation: all 37 software tests, native C++ fixture checks, and GitHub host/firmware builds pass. All 11 real saved captures matched the PC reference when replayed on the actual ESP32, including the negative controls. Measured replay decoding was 0.57-0.76 seconds. Six consecutive live bursts were accepted about 20 seconds apart, with 0.63-0.68 second decoding and 943-1566 byte reports. The restarted deployment also accepted four consecutive predicted windows without USB errors.
A short USB report occurred before pacing UART writes; CRC and reconnect recovery remain required. This is a short live check, not a range or long-term reliability guarantee. Absolute RF frequency, harmonic origin, and native 915 MHz reception remain unverified. See docs/VALIDATION.md and docs/onboard-validation.json for the recorded evidence.
v0.1.5 - Persistent capture diagnostics and adaptive timing
Adds persistent diagnostics and conservative adaptive timing.
- Every new attempt gets a journal record, including quiet windows, payload failures, successful packets, and USB failures. Decoder candidates retain stage-specific header/checksum/counter results.
- Receiver > Capture diagnostics displays the latest failures and provides raw-capture downloads and a full JSONL export. The latest 1,000 raw failed transfers are retained. Quiet MON windows have metadata only; older unlogged failures cannot be reconstructed.
- Verified matching-station arrivals can update the estimated period. Same-burst copies and other decoded station IDs do not steer rate learning. Timing survives short restarts.
- A mismatching-ID candidate no longer blocks further recovery for a preferred station. Two retained live failures recovered a valid 14AB payload through measured repetition combining without relabeling IDs.
Validation: 31 local tests and GitHub Actions host tests / ESP32 build passed. Live records, raw downloads, and journal export were verified across a server restart. The physical USB device temporarily disappeared and was reconnected; transport faults remain possible.
Longer-snapshot experiment: 192 samples slowed observations to 52-53 us and decoded 1/3 predicted bursts (no accepted controls). This small sequential test did not demonstrate a gain. The original 128-sample firmware was restored and remains the default. An advanced compile-time option and snapshot-length metadata support reproducing the experiment.
Logging and timing tracking do not establish reliable range, a guaranteed success rate, RF tuning accuracy, harmonic origin, or native 915 MHz reception. The receiver remains experimental.
v0.1.4 - Sync-template phase recovery
Adds a host-decoder fallback that fits phase to the known sync waveform while holding the transition-derived symbol period fixed. The phase fit is bounded and chosen before payload checks. It downweights observations near symbol boundaries and retains the two-error sync limit and exact header/checksum/counter checks. New recovery methods are labeled sync / sync_repetition. Firmware and protocol remain compatible with 0.1.3.
Paired evaluation: the decoder rules were fixed, then both versions processed the same four new burst recordings and four quiet controls. Previous paths accepted 3/4 bursts; the new fallback accepted 4/4. Both rejected all four controls. The extra fresh recovery and its control are checked-in holdout fixtures. An older measured regression also gains a validated packet after sync phase refinement and repetition combining.
Validation: 23 local host/dashboard tests passed; GitHub Actions host tests and ESP32 build passed. The standard live dashboard received new readings after deployment, but also experienced another USB framing fault, which automatically reset/reconnected. The slower transfer rate has not eliminated all transport failures.
This improves recoverability for these measured captures; it does not establish sustained reliable updates, a long-term success rate, useful range, RF tuning accuracy, harmonic origin, or native 915 MHz reception. Reception remains intermittent.
v0.1.3 - Stable USB rate and repeated-copy recovery
Improves transfer integrity and weak-packet recovery without adding receiver hardware.
- New firmware starts at 1,000,000 baud and advertises rate negotiation. The host switches to 500,000 baud after an old-rate ACK, verifies the new rate, and retains legacy compatibility.
- If single-copy decoding fails, the decoder can combine measured symbol evidence from correctly spaced, closely matching repeated copies. Timing/grouping is selected before payload checks. Exact header, additive checksum, and paired-counter checks remain required; no checksum-directed bit flipping is used.
- Readings record recovery_method and repetition_count; dashboard receiver settings show the negotiated rate. Includes measured regression and fresh holdout/control fixtures.
Validation: 21 local host/dashboard tests and GitHub Actions host/ESP32 build passed. A 20-full-frame stress test at 500,000 baud had zero CRC/framing errors. A separate fresh four-burst test decoded all four bursts with zero transfers lost; four between-burst controls yielded no accepted payload. Two of the four bursts required repetition combining.
The normal dashboard subsequently received 6 fresh packets in 10 capture windows with zero CRC/framing errors, including repeated-copy recoveries. Latest checked reading was 17.5 C / 63.5 F, 90% RH, station 14AB. These are short bench observations, not a controlled long-term success-rate comparison. Some bursts still fail. RF tuning accuracy, harmonic origin, native 915 MHz reception, and useful range remain unverified.
v0.1.2 - USB recovery and activity-gated acquisition
Adds bounded USB reset/reconnect after malformed capture framing or serial I/O failure, and negotiated activity-gated MON acquisition to avoid transferring quiet measurements. Predicted bursts and every 32nd acquisition scan use unfiltered CAP as a weak-signal backstop. Also explicitly selects the normal ESP32 LO divider and reports reset reason.
Validation: 18 local host/dashboard tests passed; GitHub Actions host tests and ESP32 build passed. A 65.16-second early monitor test achieved 94.39% capture-window coverage, with 410 quiet replies and no accepted packet. Window coverage is not continuous I/Q coverage.
A later standard-dashboard run on this revision, without changing the board placement, acquired four new validated 14AB packets between 23:04:29 and 23:05:49 America/New_York (2026-11-02). Latest: 17.8 C / 64.04 F and 89% RH. One intervening scheduled burst did not decode; reception remains intermittent. The 723-window session count includes hundreds of quiet acquisition scans, not 723 sensor transmissions.
The RF/harmonic interpretation remains unverified; this is not proof of direct 915 MHz reception or guaranteed range. See docs/API.md and docs/VALIDATION.md for protocol and measurement limits.
v0.1.1 - Burst timing and local clock recovery
Fixes short-packet clock recovery and preserves measured burst timing for five minutes across dashboard restarts. Adds a real RF regression fixture and updated screenshots.
Validation: 14 local tests and GitHub Actions host tests / ESP32 build passed. Spectrum-assisted acquisition restored live weather reception. After restarting the standard dashboard, a newly captured packet at 22:43:09 America/New_York reported 65.3 F / 18.5 C and 86% RH from sensor 14AB.
Local timing is selected using physical transition coherence, without checksum-guided timing search or payload bit repair. Reception remains intermittent. Automatic cold-start acquisition reliability and the harmonic RF path remain unverified. See docs/VALIDATION.md for the full distinction between timing-assisted reception and the decoder regression.
v0.1.0 — Experimental VEVOR receiver
Experimental source release for original dual-core ESP32 and Arduino-ESP32 2.0.17.
Includes the Arduino capture API, pinned VEVOR YT60234 example, Python decoder, local dashboard, real RF fixtures, screenshots, and setup/validation documentation.
Validation: 12 local host/dashboard tests passed; GitHub Actions host tests and ESP32 build passed. The refactored firmware was flashed and returned 284 observations in a 10 ms pilot without capture failures. No fresh weather payload was accepted during the final weak-signal retest. The documented four-of-five accepted burst result belongs to the earlier prototype session.
Important limits: intermittent close-range experiment; possible harmonic coupling remains unverified. Direct 915 MHz reception and useful range are not demonstrated. Saved dashboard readings are labeled separately from live readings.
GPL-3.0-only; see third-party notices. Source distribution only; not submitted to Arduino Library Manager, PlatformIO Registry, or PyPI.
