Read this in 3 minutes·
The whole lord-the-ring project on one screen: what the ring is, what was proven, the six commands you will run, how it feeds tiny, and what is still open.
In 10 seconds
A $30 BLE smart ring (SR116 / JY-Y3, app "LoraFit") speaks one plain, unauthenticated GATT protocol.
We wrote it down byte for byte, proved it on real rings, and built a Python driver + a tiny.technology gateway.
pip install git+https://github.com/cagataycali/lord-the-ring && ring-cli scan
1 · What the ring is·
| field | value |
|---|---|
| Sold as | "SMART RING · AI Recording Ring / AI Translation Ring", ~$30, a dozen brand names, app LoraFit |
| Inside | HR3918 optical HR/SpO₂/skin-temp sensor · microphone + flash for voice memos · Dialog DA14xxx BLE radio · motion for steps/sleep · vibration motor |
| Names | SR116-xxxx, JY-Y3-xxxx — model + last 4 hex of the MAC (a per-unit sticker) |
| Talks | GATT service 56FF · write 33F3 · notify 33F4 · MTU 512 · no pairing, no key, no checksum |
| Frame | FE FC · cmd u16 · total u16 · index u16 · len u16 · payload — little-endian, timestamps = local seconds |
| Holds | exactly one central: a ring on a phone does not advertise. Empty scan = somebody else has it |
2 · What we proved (and how)·
Every ✅ on this site has bytes behind it: [APK] read from the decompiled app, [CAPTURE] seen on the air between LoraFit and a ring, [LIVE] sent by this driver with the reply kept in evidence/*.jsonl.
| area | count / fact |
|---|---|
| commands mapped | 52 rows in the command reference — 28 ✅ live, 6 📡 on air, 16 📖 APK-only, 2 ⛔ never sent |
| vitals | live HR every ~5 s (cmd 7 → 11 ticks → 17 end), SpO₂ (23/24), skin temp, steps, 300 s sleep buckets, day history with terminators 42/43/45 |
| voice memos | 4 taps → Opus on flash → 0x3D count → 0x40 → 0x34 stream (12 × 40 B frames / packet) → 0x36 delete; a 6-min memo = 1522 packets |
| live mic | 0x30 mode 1 → 0x32/0x33 frames, 16 kHz mono Opus — the phone does the AI |
| gotchas | the standard Battery Service lies (use cmd 6) · the charger reads like a person (HR 80–103, 31 °C) · macOS bonds the ring as a Mouse · no error frames — silence means "not worn" |
| never sent | 39 reboot/factory-reset · 67 unbind · SUOTA FEF5 OTA — documented, deliberately not implemented |
3 · The six commands you will actually run·
ring-cli scan # who is advertising (nothing = held by a phone, or on a Mac bond)
ring-cli battery -a <uuid|mac> # {"battery_percent": 100, "charging": 0}
ring-cli hr --seconds 30 # live heart rate; [] = not on a finger
ring-cli sync --days 2 # steps · sleep · HR/SpO₂/temp history → JSON
ring-cli audio-pull # memos on the ring → captures/memo.opus (+ .wav), then clear
ring-cli bridge --days 2 # stay connected and post everything to your tiny account
Full walk-through: Getting started · all 21 verbs: CLI reference · from Python: API.
4 · How it feeds tiny·
finger ──BLE──▶ gateway (tiny iOS/Android app, or ring-cli bridge on a Mac/Pi)
──HTTPS──▶ tiny worker /api/health/ingest · /api/health/media · ring command queue
──▶ your agent (health_summary · ring_command) · your inbox (memo + transcript) · /health page
- A memo is a message: transcribed at ingest, then run as one agent turn — say "what's my ring's battery?" into the ring and the answer is pushed to your phone (Voice memos).
- The agent reaches the ring through a queue the phone claims: find · battery · status · measure_hr · measure_spo2 · set_auto_hr · sync · memo_pull · record (Agent tools).
- Each ring is a fleet endpoint ("Silver ring", "Black ring") with its own panel (Endpoint); every LoraFit feature vs tiny: Takeover matrix.
5 · Still open·
| open | why |
|---|---|
| first real night of sleep | the stage mapping (quality/motion codes) is provisional until compared with a worn night |
| live mic stream off the charger | proven as a fallback file so far; the 0x32/0x33 stream is next on metal |
| real button tap codes | cmd 40 codes 1/2 seen synthetically, not yet from a finger |
| alarms | cmd 55 says both rings lack alarm support — hardware, not us |
| battery runtime | never measured end to end |
Everything else — the recipe, the ledgers, the lanes that built it in a day — lives under Lab.