Battery-powered Matter pool & aquatic temperature sensor
Single-SoC on u-blox NORA-W40 (ESP32-C6, Wi-Fi 6 + Thread + BLE 5.3).
Multi-year battery life · Local Matter connectivity · No cloud, ever.
Connect straight to a nearby AkvaLink over Bluetooth — no app, right in your browser.
For pools, spas, aquariums, wine cellars and cold storage — places where the temperature barely changes, but you want to know immediately when it does.
Adaptive sampling, Matter Sleepy End Device, and threshold reporting keep the radio asleep.
A standard Matter Temperature Sensor — commission by scanning a QR, no app to install.
Local Matter over Thread or Wi-Fi. Your data never leaves your home network.
DS18B20 in stainless steel, 10 m+ cable possible — drop it in and forget it.
Built on esp-matter, Apache-2.0 licensed. Single-SoC — no companion MCU.
Battery math, RF rules and known limitations are documented, not hand-waved.
Same Matter/BLE app, same web & app frontend — AkvaLink isn't tied to one chip. Everything on this page is the NORA-W40 build; other modules are landing over time.
Espressif ESP32-C6 — Wi-Fi 6, Thread, BLE 5.3. The flagship build documented below.
Nordic nRF54L — BLE, Thread, Matter. A non-Espressif option, for customers who want silicon made outside China.
One tiny module, one sensor, one pull-up resistor.
| Component | Part | Why |
|---|---|---|
| Module | NORA-W401 / NORA-W406 | Wi-Fi 6 + Thread + BLE in one module |
| MCU | ESP32-C6 (RISC-V @ 160 MHz) | Inside NORA-W40 |
| Sensor | DS18B20 (stainless probe) | ±0.5 °C, 12-bit (0.0625 °C), 1-Wire, ~$3 |
| Power | 2× AA alkaline (or 18650 Li) | ~12 years on 2× AA in pool conditions |
GPIO15 → DS18B20. One 4.7 kΩ pull-up. GPIO9 (BOOT) doubles as a re-provisioning button. Dashed box = future battery ADC circuit (R1/R2 voltage divider, 390 kΩ / 100 kΩ).
Heated pool at 28–29 °C with a 0.25 °C report threshold.
| Battery | Thread SED | Wi-Fi (TWT) | Wi-Fi (disconnect) |
|---|---|---|---|
| CR2477 (1000 mAh) | ~5 years | ~6 months | ~3.3 years |
| 2× AAA (1200 mAh) | ~6 years | ~8 months | ~4 years |
| 2× AA (2800 mAh) | ~12 years | ~1.8 years | ~9 years |
| 18650 (3400 mAh) | ~15+ years | ~2.2 years | ~11 years |
Estimates from the power model — real measurement (PPK2/Joulescope) is on the roadmap. In practice, alkaline AA self-discharge and shelf-life cap real-world life at roughly 5–7 years regardless of draw; lithium AA (e.g. Energizer L91) last longer and cope far better with outdoor cold.
Everything runs on the one ESP32-C6 inside NORA-W40 — no companion MCU.
Read the DS18B20 over 1-Wire with adaptive sampling — fast while changing, slow when stable.
Only report when the temperature moves past a threshold, so the radio stays asleep.
Push the reading over Matter — Thread (Sleepy End Device) or Wi-Fi (TWT).
It appears in Apple Home, Google Home or Alexa as a standard temperature sensor.
One codebase, one SoC — pick the network at build time.
| Variant | Flag | Stack |
|---|---|---|
| Matter / Thread (default) | (none) | esp-matter, OpenThread, BLE commissioning |
| Matter / Wi-Fi | --wifi | esp-matter, Wi-Fi, BLE commissioning |
| BLE-only | --ble | NimBLE GATT — no hub, no router |
| Wi-Fi AP (mains/USB) | --ap | SoftAP “AkvaLink” + captive web page, any phone; no router needed |
| Wi-Fi station (mains/USB) | --station | Joins home Wi-Fi (BLE-provisioned), unique akvalink-<last4mac>.local + HA MQTT autodiscovery; no hub |
| Sensor test | --sensor | Read & log the probe only |
Prebuilt single-image binaries for the NORA-W40 (ESP32-C6) — always the latest release.
Not sure which? Thread and Wi-Fi join Apple / Google / Alexa as a standard Matter sensor. ESPHome integrates natively with Home Assistant. BLE-only talks straight to your phone. AP and Station serve a live web page — no hub, no app, just a browser (need mains/USB power).
Matter over Thread · best battery. Needs a hub — HomePod, Apple TV, Nest or Echo.
Matter over Wi-Fi · no Thread hub. Runs on battery too — just fewer years. Your router + any Matter app.
Open hotspot “AkvaLink” · join it, the page opens automatically. No router, no app, any phone. Needs mains/USB power.
Joins your home Wi-Fi (provisioned once over BLE). Open akvalink-<last4mac>.local in any browser on your LAN. Auto-discovered by Home Assistant via MQTT. Multiple devices get unique hostnames. Needs mains/USB power.
Deep-sleep broadcast — wakes, reads DS18B20, sends one packet to any ESP32 on the same Wi-Fi channel, sleeps. No hub, no provisioning, maximum battery life. Receiver needs an ESP32 sketch.
Native Home Assistant API — no MQTT broker needed. Flash once, adopt in the ESPHome dashboard, OTA-update from Home Assistant. Provisioned with Improv over USB serial.
esptool .bin — full merged image, flash at 0x0. Use for first-time setup or switching variants: esptool --chip esp32c6 write-flash 0x0 <file>.bin
OTA .bin — app partition only. Use for updating within the same variant (BLE→BLE, Thread→Thread, etc.) without touching NVS or commissioning data. Cross-variant OTA is possible but requires a factory reset after. · All releases & changelog
Prefer a native app over the browser? The AkvaLink companion app (Windows/Linux/macOS/Android/iOS) shows live temperature and flashes OTA updates too — build it from source.
One click — the page fetches the latest firmware and flashes it over BLE (Chrome/Edge).
…or pick a .bin manually:
No file chosenWorking today, and where it's headed.