A "we have Meater at home" kind of device.
Reads a K-type thermocouple (MAX6675) and broadcasts the temperature over BLE using Bluetooth SIG assigned UUIDs, so any generic BLE client can read it.
Hybrid layout: a custom app-protocol service (the rich, evolving protocol
the companion app speaks) plus standard SIG services kept for generic-client
interop (nRF Connect, OS-level). Advertised as local name Decent Temp.
All temperatures: int16 little-endian, value × 100 (0.01 °C). 25.70 °C
→ 2570. Matches the SIG 0x2A6E format.
Private 128-bit base (…c155-5f7c-ce0b-3342-a58cf0def2d9), 16-bit slot in the
leading field (scale-style, but vendor-owned — collision-proof, not SIG-reserved).
| Slot | Characteristic | Props | Payload | Status |
|---|---|---|---|---|
0001 |
service | — | — | — |
0002 |
Probe temperature | R/Notify | int16 ×100 °C, 5 Hz | implemented |
0003 |
Rate of rise | R/Notify | int16 ×100 °C/s | stub |
0004 |
Calibration offset | R/W | int16 ×100 °C (signed) | implemented (in-mem) |
0005 |
Status | R/Notify | uint8 bitfield (sensor-ok / fault) | partial |
| UUID | Service | Notes |
|---|---|---|
0x181A / 0x2A6E |
Environmental Sensing / Temperature | Same probe value, throttled ~1 Hz for generic clients (ESS isn't meant for 5 Hz streaming). |
0x180A |
Device Information | Model / FW rev / serial. |
0x180F |
Battery | Compiled in only on battery builds (HAS_BATTERY). |
Local name Decent Temp in the primary packet (ReaPrime identifies by exact
name; Linux/BlueZ scans unfiltered). The 128-bit service UUID rides in the scan
response — a 128-bit UUID (18 B) + the name don't both fit in the 31-byte
primary packet. App-side, ReaPrime would register the name in DeviceMatcher
and the UUID in serviceUuidsFor().
Probe-temp streaming + calibration write are live; rate-of-rise and full status
flags are stubbed (handles exist, bodies are TODO). Calibration offset is
in-memory only — NVS persistence is a TODO.
Built with the pioarduino
platform fork (arduino-esp32 3.x) because NimBLE-Arduino 2.x requires core 3.x;
the official platformio/espressif32 still ships core 2.x.