Skip to content

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.

  • anyone — the whole project on one page
  • 3 min read
  • 557 words

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 → 0x400x34 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.