Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 14 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

OpenAthan is an open-source, low-cost DIY Athan and Quran smart speaker project. It supports an ordinary-user reference build and a reusable ESPHome integration for people who already have compatible hardware. The reference experience is intended to work without soldering, PCB design, Home Assistant, or embedded-development experience.

> **Project status:** [v0.4.0](https://github.com/OpenAthan-Project/openathan/releases/tag/v0.4.0) is available for AtomS3R C126 + Pyramid A167, with standalone scheduled Athan, a display, phone-friendly setup and settings, USB Wi-Fi/password recovery and owner-requested updates. [v0.5.0 preparation](docs/development/v0.5.0-preparation-2026-10-10.md) adds Waveshare Box V2 production firmware and browser installation. That candidate has not been published; its physical production installation and update qualification remain pending. Newer Atom ST7735 display revisions remain unqualified.
> **Project status:** [v0.5.0](https://github.com/OpenAthan-Project/openathan/releases/tag/v0.5.0) is available for AtomS3R C126 + Voice Pyramid A167 and Waveshare ESP32-S3-Touch-LCD-1.85C-BOX V2. Both support standalone scheduled Athan, a display, phone-friendly setup and settings, USB Wi-Fi/password recovery and owner-requested signed updates. See the [release notes](docs/releases/v0.5.0.md) and [qualification results](docs/development/release-validation-2026-10-10.md). Waveshare V1 is not supported; newer Atom ST7735 display revisions remain unqualified.

Use the [public setup guide](https://openathan.com/docs/getting-started/) for a
new speaker and the [firmware update guide](docs/development/firmware-upgrades.md)
Expand All @@ -20,14 +20,14 @@ builds exact source commits and packages the [approved normal and Fajr recording
### Ordinary users

1. Buy the documented reference hardware.
2. Plug the pre-assembled modules together.
2. Assemble the Atom + Pyramid modules, or use the pre-assembled Waveshare Box V2.
3. Connect the device over USB.
4. Visit [openathan.com/install](https://openathan.com/install).
5. Install OpenAthan and enter Wi-Fi credentials.
6. Complete the phone-friendly local setup wizard.
7. Use the device standalone.

Precompiled reference releases are available through [openathan.com/install](https://openathan.com/install). This path requires neither YAML nor ESPHome knowledge. Use only the Atom USB-C data connection during setup, then disconnect it and use only Pyramid bottom power for normal playback. After a cold boot, the current reference firmware needs internet time synchronization before automatic playback can resume.
Precompiled releases are available through [openathan.com/install](https://openathan.com/install). This path requires neither YAML nor ESPHome knowledge. For Atom, use only its USB-C data connection during setup, then disconnect it and use only Pyramid bottom power for normal playback. Waveshare Box V2 uses its rear USB-C data port. First setup requires internet time synchronization. Atom also needs internet time after a cold boot; Waveshare can restore initialized RTC time after a powered restart. RTC battery-backed retention while unplugged has not yet been verified.

### ESPHome users

Expand All @@ -37,15 +37,17 @@ The reusable package treats hardware as capabilities. An audio playback endpoint

Home Assistant may eventually be supported as an optional integration on either path, but it will not be required for core operation.

## Initial reference hardware
## Supported reference hardware

The first official precompiled reference build targets:
The original precompiled reference build uses:

- **M5Stack AtomS3R C126** — ESP32-S3, 8 MB flash, 8 MB PSRAM, and a 0.85-inch display.
- **M5Stack Voice Pyramid A167** — speaker and audio hardware, microphone, RGB LEDs, capacitive touch controls, and enclosure.

SKU A167 has also been called **Echo Pyramid**; verify the SKU when purchasing. See the [AtomS3R documentation](https://docs.m5stack.com/en/core/AtomS3R), [Voice Pyramid documentation](https://docs.m5stack.com/en/atom/Voice_Pyramid), and [reference bill of materials](hardware/reference-builds/voice-pyramid/bom.md).

The second supported build is **Waveshare ESP32-S3-Touch-LCD-1.85C-BOX V2**: a pre-assembled ESP32-S3 speaker with a round display, 16 MiB flash, 8 MiB PSRAM and onboard RTC. See the [Waveshare profile and hardware mappings](docs/development/waveshare-box-v2.md). V1 has different audio hardware and is not supported. Touch input, microphones and SD storage are not yet supported by OpenAthan.

This C126 + A167 combination is the designated reference target, not a requirement of the reusable OpenAthan package. RTC, removable storage, larger external speakers, and other modules are optional capabilities rather than core requirements.

## Architecture
Expand All @@ -62,10 +64,12 @@ OpenAthan
│ └── required and optional capability interfaces
├── hardware integrations
│ ├── Voice Pyramid A167 adapter
│ ├── Waveshare Box V2 audio, display and RTC adapters
│ └── user-supplied ESPHome components
├── official reference firmware
│ ├── validated AtomS3R C126 board configuration
│ ├── C126 + A167 capability mapping
│ ├── Waveshare Box V2 production configuration
│ └── provisioning, networking, OTA, and release configuration
└── local OpenAthan device UI
```
Expand Down Expand Up @@ -99,15 +103,15 @@ Settings can be changed through the authenticated local interface.
The reference build includes phone-friendly setup, local configuration,
USB Wi-Fi/password recovery, explicit first-run activation, prayer-status LEDs
and signed application updates. The [roadmap](docs/development/roadmap.md)
separates shipped features from remaining work and validation limits. Touch
and display controls remain future optional adapters; neither is required by
the reusable scheduler.
separates shipped features from remaining work and validation limits. Displays
and their saved brightness/time-format controls are optional capabilities;
touch controls remain future work. None is required by the reusable scheduler.

Quran streaming, reciter and passage selection, resume position, adhkar, offline Quran storage, RTC expansion, and optional Home Assistant integration are later work. Streaming audio should use PSRAM for buffering; Quran audio is not expected to fit in the AtomS3R's flash.
Quran streaming, reciter and passage selection, resume position, adhkar, offline Quran storage, RTC expansion for other hardware, and optional Home Assistant integration are later work. Streaming audio should use PSRAM for buffering; Quran audio is not expected to fit in the AtomS3R's flash.

## Development safety

- Do not add hardware pin mappings until they have been verified against official M5Stack documentation or source and physical hardware.
- Do not add hardware pin mappings until they have been verified against the manufacturer's documentation or source and physical hardware.
- Do not present scaffold files as installable firmware.
- Do not commit Wi-Fi credentials or signing secrets.
- Do not bundle third-party Athan or Quran recordings without explicit, compatible redistribution rights.
Expand Down
2 changes: 1 addition & 1 deletion docs/development/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ acceptance or release readiness.

Core Athan scheduling must not require Home Assistant or a cloud service. Internet may be used for initial/periodic time sync, Quran streaming, firmware downloads, or optional services.

The generic ESPHome package does not configure Wi-Fi. Reference firmware provides USB provisioning, while ESPHome integrators keep their existing network configuration. The current reference build needs internet time synchronization after a cold boot; saved settings cannot establish the current time. The [Waveshare development profile](waveshare-box-v2.md#rtc-and-offline-restart) can restore previously initialized RTC time after a powered reset; physical qualification is pending. With a valid clock, prayer calculation and stored-recording playback remain local.
The generic ESPHome package does not configure Wi-Fi. Reference firmware provides USB provisioning, while ESPHome integrators keep their existing network configuration. Atom needs internet time synchronization after a cold boot; saved settings cannot establish the current time. The [Waveshare profile](waveshare-box-v2.md#rtc-and-offline-restart) can restore previously initialized RTC time after a powered reset. [Attended RTC RESET validation](waveshare-rtc-validation-2026-10-10.md#attended-powered-reset-validation) passed; retention while unplugged remains unverified. With a valid clock, prayer calculation and stored-recording playback remain local.

## Public website boundary

Expand Down
4 changes: 2 additions & 2 deletions docs/development/feasibility-report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

This report preserves the dated development measurements and device observations
below. They are not current release sizes or a statement of today's pending work.
For v0.3.0 production, media and public-installer status, see the
[2026-10-04 release summary](release-validation-2026-10-04.md).
For v0.5.0 production sizes, hardware qualification and public-installer status,
see the [2026-10-10 release summary](release-validation-2026-10-10.md).

**The compile-time capacity target passed.** ESPHome, released Adhan C++, and
the shared audio adapter fit comfortably in each 2 MiB OTA slot. Both supplied
Expand Down
9 changes: 7 additions & 2 deletions docs/development/firmware-upgrades.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ new transport-specific physical qualification and a capable release are availabl

## Hardware-specific releases

v0.5.0 preparation adds the Waveshare Box V2 production profile. Atom retains
Published v0.5.0 adds the Waveshare Box V2 production profile. Atom retains
`upgrade.json` and `firmware.ota.bin`; Waveshare uses
`waveshare-box-v2.upgrade.json` and `waveshare-box-v2.firmware.ota.bin`. Each
signed payload binds its hardware identity, and each device discovers only its
Expand All @@ -175,4 +175,9 @@ USB firmware INFO accepts the legacy nine fields and appends hardware as a tenth
field in new builds. USB status also appends `hardware=<identity>` after the
existing fields/URLs; older website clients ignore it as a non-URL. The new
installer validates the identity and uses Atom compatibility for older responses.
Physical Waveshare production update qualification remains pending.
Attended Waveshare signed-update, pre-selection power-cut recovery and
failed-startup rollback checks passed using isolated qualification builds.
Exact production restoration, preserved production records/audio and the real
public signed-descriptor check also passed. See the
[release qualification report](release-validation-2026-10-10.md) for the scope;
these results do not qualify the separate browser USB update transport.
94 changes: 94 additions & 0 deletions docs/development/release-validation-2026-10-10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# v0.5.0 release qualification — 2026-10-10 Toronto

[v0.5.0](../releases/v0.5.0.md) is published as stable/latest from
`9e47867facd06164ede96a77859a77896cdb4123`. It adds Waveshare Box V2 alongside
AtomS3R C126 + Voice Pyramid A167. The [public installer](https://openathan.com/install/)
serves both hardware bundles. Qualification below covers one attended Waveshare
V2 unit with 16 MiB flash and 8 MiB PSRAM; earlier Atom evidence retains its
original scope.

## Production artifacts and automated checks

Exact-source [firmware CI](https://github.com/OpenAthan-Project/openathan/actions/runs/38067247571)
passed all 12 jobs. Both production builds passed pinned ESPHome 2026.9.0 /
ESP-IDF 5.5.5 dependency, image, partition, recording-exclusion and capacity
checks. Each actual OTA image remains below the 1,572,864-byte application limit.
Both 2 MiB slots and the separate 3.5 MiB shared audio partition are retained.

| Production board | OTA bytes | Application budget remaining | Free bytes per 2 MiB slot |
| --- | ---: | ---: | ---: |
| AtomS3R + Voice Pyramid | 1,277,392 | 295,472 | 819,760 |
| Waveshare Box V2 | 1,284,784 | 288,080 | 812,368 |

These exact version/source-identified images are each 32 bytes larger than the
corresponding [prepared production build](v0.5.0-preparation-2026-10-10.md#matched-ota-measurements).
The private qualification applications are separate images with isolated records,
private update trust and test controls; none enters the public release.

## Attended Waveshare results

| Check | Observed result |
| --- | --- |
| Fresh installation | Browser erase/install completed; complete 16 MiB readback verified production firmware and approved audio. Physical RESET showed setup needed. |
| Local setup and USB identity | Owner completed Wi-Fi, password and settings setup. Compatible OpenAthan reported Waveshare Box V2 and Chrome recognized it automatically. Unknown firmware required explicit model selection. |
| Invalid signature | Private-feed descriptor was rejected without queuing an installation or erasing/writing an application. |
| Signed Wi-Fi update | Healthy private v0.0.2 transferred, switched slots and moved from PENDING to VALID; the queue cleared. |
| Power cut before selection | After the full target was finalized but before selection, attended power removal/reconnection retained the old VALID image and durable queue. A controlled truncated retry remained unselected and cancellation cleared the queue. |
| Failed startup | Private v0.0.3 remained unconfirmed and automatically rolled back to the previous VALID v0.0.2; the rejected request cleared. |
| Production preservation and restoration | Fresh paired reads verified production records and complete shared audio. One application-only restoration installed the exact v0.5.0 application; independent readback protected the other flash regions. Production startup and saved-state reconciliation passed. |

After installation was verified, the browser could not reconnect automatically
for setup. Physical RESET and USB reconnection completed the setup flow without
reinstalling. BOOT-held download mode was used during installation preparation.

Fresh installation deliberately erased the previous device data. Subsequent
preservation checks use the newly configured production baseline: settings,
credentials, preferences and audio were preserved through isolated OTA testing.
Prayer consumption did not regress; the one naturally elapsed production prayer
advanced its watermark. Historical NVS/full-flash restoration was not used.

The bounded power observer did not capture the exact unplugged duration or screen
darkness. The owner response and fresh power-on reset state support the recovery
result. These cases are a focused Waveshare extension, not a repeat of the entire
earlier [Atom interruption matrix](upgrade-qualification-2026-10-01.md).

212 quiet isolated OTA samples recorded internal free/largest-block minima of
194,676 / 143,360 bytes, internal low-water 192,640 bytes, PSRAM free/largest-block
minima of 8,031,200 / 7,995,392 bytes and updater unused-stack minimum 3,952 bytes.
Announcements were disabled; these observations do not establish concurrent
audio/network/display headroom or clean-production runtime memory.

## Reused hardware evidence and limits

The release RTC adapter files match tested source `1378dc2`, and the audio adapter
files match tested source `96670c1`, byte for byte. Reuse covers
[powered offline RTC RESET](waveshare-rtc-validation-2026-10-10.md#attended-powered-reset-validation),
[volume/listening and cold restart](waveshare-volume-build-2026-10-10.md), and
the separately dated [BOOT controls](waveshare-buttons-validation-2026-10-09.md)
and [development playback/scheduling/soak](waveshare-validation-2026-10-09.md).
Those results retain their tested images and observation gaps; no new full
listening session, real scheduled announcement or hour-long soak is claimed here.

RTC battery-backed unplugged retention, long-term drift and audible scheduled
playback using RTC-only time remain unqualified. Other display-panel lots and
broader hardware/browser/network coverage need separate validation. Earlier
intermittent HTTP timeouts remain unresolved. Touch, microphones and SD storage
remain deferred. Preserving browser USB updates require separate transport
qualification; public USB application writes remain disabled.

## Public delivery

All 13 unauthenticated GitHub downloads matched the immutable validated bundle;
both board signatures and the combined artifact contract passed. The
[website deployment](https://github.com/OpenAthan-Project/website/actions/runs/38098999421)
at source `358079bdac8b9d045c2dd50b6d58021548a3fd56` passed 180 unit tests,
369 development browser tests, 171 built-site browser tests and the release
freshness gate. Live metadata selected the correct manifests for both boards,
and all nine website-imported assets matched the release bytes.

The restored production Waveshare checked the real public signed descriptor and
reported v0.5.0 current, with no error or installation queued. Settings, history
and preferences matched the before-check state; clock and automatic readiness
were true. This establishes the device's public descriptor path, not a new
public-feed application-transfer test. Raw diagnostics, snapshots, credentials
and private qualification material remain outside Git.
9 changes: 5 additions & 4 deletions docs/development/releases.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
# Firmware release preparation

[v0.4.0](../releases/v0.4.0.md) is the published stable reference release.
The v0.5.0 candidate adds Waveshare Box V2 alongside Atom. Candidate preparation
does not establish physical installer/update qualification or publication.
[v0.5.0](../releases/v0.5.0.md) is the published stable release for Atom and
Waveshare Box V2. The [release qualification report](release-validation-2026-10-10.md)
records exact production images, attended Waveshare installation/update results,
public delivery and remaining limits.
The [v0.4.0 preparation record](v0.4.0-preparation-2026-10-07.md) records its
automated builds and physical-validation limits. The earlier
[release evidence](release-validation-2026-10-04.md) records reference-device
Expand All @@ -28,7 +29,7 @@ revision containing that approval and the exact approved MP3 files. Other privat
test recordings, CI audio fixtures and historical recovery images are not release
inputs. This tooling never flashes or publishes. Once a qualified release is
explicitly published as stable latest, the website's automatic policy can adopt
it after validation. See the [current release evidence](release-validation-2026-10-04.md).
it after validation. See the [current release evidence](release-validation-2026-10-10.md).

## Prerequisites

Expand Down
Loading