🩺 Emulated · self-test & demos

The Canary checks itself.

Every Canary runs a 10-probe self-test at boot and scores its own health 0–100%. Every feature — camera PEEK, mic, motion, GPS, thermal — is one tap to test. None of it costs extra program memory: it's already in the firmware. Watch the Doctor run.

Your Canary firmware · we pick it for you

No decision needed — this is the build most people should run, and everything below matches it. Building something specific, or just curious? Open developer mode to choose any board and level.

⚙️ Developer & education — choose any board & build level

Only the S3 Canary has dev / release / full levels — the others are single builds. BLE + mesh live only in S3 · full (and the WAP), because they don't fit the smaller OTA slots. The tests below re-light to match whatever you pick.

Boot self-test · 10 probes · 0–100% health

Runs automatically on every boot; you can re-run it any time from the console or GET /api/selftest. Each probe is worth 10%.

health

Feature tests & demos

Each of these is a real endpoint or console command already in the firmware — tap Run to see what it does. (Emulated here; on a real device these return live data.)

🔵 Bluetooth bring-up · the hard one

BLE is the heaviest feature, so "it doesn't work" is really several different failures. The test reports the first rung that failed and what to do — including the honest reason it's a [env:full]-only build.

🧳 One checkup that isn't about the device

Everything above asks "is this Canary healthy?". There's one more question worth asking about the hub, and it's the only one on this page where a wrong answer is somebody else's opportunity: is your hub reachable from the internet?

Nobody decides to expose their home. They enable UPnP once, or follow a tutorial that says "forward port 8123", and then nothing ever mentions it again. So the hub ships with a checker that asks your own router what it is actually forwarding — no cloud scan, no third party, exit code 0 or 1:

python3 tools/away_access_check.py

If it comes back clean, you're done. If it doesn't, Away From Home has the fix and the ten-minute setup that replaces it — free, no subscription, nothing of yours left on the public internet.

🪶 …and it's nearly free on flash

On the XIAO ESP32-S3 the tight budget is flash, not RAM — so a "run everything" mode reuses what's already compiled in rather than adding a test framework:

  • The boot self-test and its 10 probes already ship (diag_run_selftest()). It's re-run by GET /api/selftest.
  • Every feature already exposes a cheap check — camera captureFrame(), audio_selftest_start(), *_is_running()/*_get_stats() — surfaced by the existing dashboard endpoints.
  • The only add is a one-key console t ("run all") that prints them in a table — a few strings, since every call it makes is already linked in. No new framework, no meaningful flash.

This is an emulation for illustration; live results come from the device. The probe list and feature tests are pinned to the firmware in onboarding-spec.json and checked in CI, so this page can't drift from what the device actually does. Firmware is open source on GitHub.