Собрано вживую 2026-08-20 с реального прибора (серийник 0425000100218, прошивка v1.21).
- USB VID/PID:
ABBA:A006(OBSIDIAN). Другие модели: A008 = Obsidian G Pro, A00A = Obsidian2, A011 = RADEX ONE. - Мост: Silicon Labs CP210x (
silabser.sys), виртуальный COM-порт. - 115200 8N1, поднять DTR и RTS.
- Строго request→response. Сам прибор ничего не шлёт. Уходит в USB selective suspend; будится обычным запросом после переподключения.
- То же самое семейство кадров туннелируется по BLE через Nordic UART Service (6E4000xx).
offset size поле
0 1 0x7b запрос / 0x7a ответ
1 1 0xff (константа)
2 1 cmd (0x20 = read register)
3 1 flags (0x80 в ответе)
4 2 len payload, LE16
6 4 counter, LE32 (эхо возвращается в ответе)
10 2 header checksum, LE16
12 len payload
12+len 2 payload checksum, LE16
Сумма всех 16-битных LE-слов блока (с обнулённым полем cksum) + сам cksum == 0xFFFF.
cksum = 0xFFFF - ones_complement_sum(block_with_zero_cksum).
Отдельно для заголовка (12 байт) и отдельно для payload (data + 2 нулевых байта).
Проверено на всех захваченных кадрах — сходится побитно.
(В python-radexreader это же выглядело как «магические ключи» keyA/keyC: keyA+keyC=0x5e — просто чексумма.)
payload запроса: <HH> = (addr: LE16, count: LE16). count=12 — рабочее значение для большинства регистров.
Ответ: payload = 8-байтовый префикс [addr:LE16][0000][len:LE16][0000] + данные.
| addr | что |
|---|---|
| 0x0000 | директория: список 16-битных адресов доступных регистров |
| 0x0800 | live-метрики (см. ниже), 128B |
| 0x0801 | конфиг: пороги/калибровка (float32) |
| 0x080d | история/тренд: 3×unix-timestamp + массив float32 |
| 0x0821 | таблица (в основном 0xFF — пусто) |
| 0x0825 | одиночный float + поля |
| 0x0870 | флаги/режим |
| 0x0872 | паспорт прибора (ASCII, см. ниже) |
QUARTA-RAD \0 Obsidian \0\0\0 0425000100218 6 \0\0 v1.21 \0\0 01 \0\0 643 \0\0
→ производитель, модель, серийный номер, версия прошивки.
Подтверждено по временному ряду (какие offset меняются) и сверено с BLE-характеристиками FE6417xx из BLE-реверса.
| offset (в data) | значение-пример | вероятный смысл |
|---|---|---|
| 8 | 0.128 | МЭД (DER), µSv/h — совпадает с фоном и BLE DER |
| 12 | 0.013 | погрешность МЭД |
| 20 | 0.70 | ? |
| 24 | 234.68 | ? (почти константа, калибровка/счётчик) |
| 60 | 9→16 | CPS-подобное (растёт) |
| 64 | 12.33 | ? |
| 68 | 700→1489 | накопительный счётчик импульсов |
| 76 | 12.2 | CPS — совпадает с BLE CPS |
| 84 | 917→898 | ? |
| 100 | 26.54 | температура, °C (константа в покое) |
| 108 | u32 1787229279 | часы прибора, unix time (= 2026-08-20) |
| 113 | 22 0c 14 08 1a 04 | дата/время по полям (доп. формат) |
Точную привязку beta/dose/battery доведём при TDD с живым захватом (BLE-реверс даёт семантику: DER, DER_dev, BETA, BETA_dev, CPS, CPS_dev, DOSE, BATTERY u8, MALFUNCTION u8, USER u8).