Реклама BLE-маяков SAUK Beacon: виды, типы и структура пакета
Описание рекламного (advertising) сообщения BLE-маяков SAUK: формат iBeacon-совместимого пакета, служебный блок Service Data и линейка исполнений — от обычного маяка до маяков с датчиками температуры, наклона, протечки и вскрытия. Структура едина для всех приборов; различается только состав полей датчика в зависимости от типа маяка.
Содержание
1Общие сведения
SAUK Beacon — это BLE-маяк, который периодически передаёт в эфир рекламное сообщение (advertising) стандарта Bluetooth Low Energy. Пакет iBeacon-совместим: маяк обнаруживается любым устройством с поддержкой BLE и стандартными сканерами (nRF Connect и др.).
Рекламное сообщение состоит из двух частей:
- Основная реклама (Advertising Data) — идентификация: тип, UUID, версия ПО, калибровочный RSSI. Доступна всегда.
- Scan Response — имя устройства и служебный блок Service Data: заряд батареи, режим и показания датчика. Возвращается только при активном сканировании.
Одна и та же платформа выпускается в нескольких исполнениях: обычный маяк и маяки с датчиками. Формат рекламы единый — меняется только набор полей датчика в блоке Service Data (см. разделы 2 и 6).
Настройка и тестирование
Конфигурирование и проверка всех функций маяка выполняются в бесплатном фирменном ПО SAUK BeaconManager. Данный документ описывает рекламный протокол (то, что маяк передаёт в эфир); протокол команд настройки в публичной документации не публикуется.
2Виды и типы маяков
Тип устройства определяется прошивкой и транслируется в эфир в байте режима — это байт [2] блока Service Data. По нему приёмник однозначно понимает, какой это маяк и как интерпретировать поля датчика [5..11].
| Режим [2] | Тип маяка | Датчик / назначение | Данные датчика в Service Data |
|---|---|---|---|
0x00 | Beacon | Без датчиков. Минимальное энергопотребление, позиционирование и идентификация. | Поля [5..9] = 0x00 (не используются). |
0x01 | Tamper | Детектор обрыва тросика (антисаботаж, контроль вскрытия/съёма). | [5] состояние тросика + флаг тревоги; [6..7] сырое значение АЦП. |
0x03 | Leak | Датчик протечки (кондуктометрический, по щупам). | [5] статус протечки; [6..7] сырое значение АЦП. |
0x04 | Temperature | Датчик температуры: внешний TMP117 (±0.1 °C) либо встроенный датчик nRF52 (резерв, ±5 °C). | [5] валидность; [6..7] температура; [8..9] погрешность; [10..11] поправка. |
0x05 | Angle | Датчик наклона/ориентации: акселерометр LIS2DH12 (медиана по осям). | [5] частота опроса + валидность; [6..7] Ax; [8..9] Ay; [10..11] Az. |
Длина Service Data зависит от типа
Beacon, Tamper и Leak передают 10 байт ([0..9]); Temperature и Angle — 12 байт ([0..11]), так как используют дополнительные поля [10..11]. Разбор полей — в разделе 6.
3Способы сканирования
Получить данные маяка можно двумя способами — при активном и при пассивном сканировании. Разница в том, запрашивает ли сканер дополнительный ответ Scan Response.
| Что доступно | Активное сканирование | Пассивное сканирование |
|---|---|---|
| Manufacturer Data (тип, UUID, версия ПО, RSSI@1м) | да | да |
| Имя устройства | да | нет |
| Заряд батареи, режим, параметры радио | да | нет |
| Показания датчика | да | нет |
| MAC-адрес | да (из заголовка пакета) | да (из заголовка пакета) |
При активном сканировании сканер дополнительно запрашивает Scan Response, и маяк отдаёт имя и блок Service Data (эти данные помечены в прошивке как передаваемые только по запросу). При пассивном сканировании доступна лишь основная реклама. MAC-адрес присутствует в заголовке BLE-пакета всегда и в Service Data не дублируется.
4Структура рекламного пакета
Ниже — полный пример рекламы обычного маяка (режим Beacon) с цветовой разметкой полей. Все значения в шестнадцатеричном виде (HEX).
4.1Основная реклама (Advertising Data)
| Длина | Тип | Данные |
|---|---|---|
| 0x02 | 0x01 — BLE Flags | 0x06 (LE General Discoverable, BR/EDR Not Supported) |
| 0x1A | 0xFF — Manufacturer Specific Data | FFFF 0215 EA0CCA2A01080100A1B18CE4BC06C19F 0001 0002 C9 |
4.2Scan Response
| Длина | Тип | Данные |
|---|---|---|
| 0x0D | 0x09 — Complete Local Name | 5341554B2D43343033303800 («SAUK-C40308») |
| 0x0B / 0x0D | 0x16 — Service Data (16-bit UUID) | 4253 + режим + батарея + мощн|инт + данные датчика |
Длина блока Service Data — 0x0B (11 байт с типом) для Beacon/Tamper/Leak и 0x0D (13) для Temperature/Angle.
5Manufacturer Data — детальный разбор
Блок Manufacturer Specific Data (тип 0xFF) присутствует и при активном, и при пассивном сканировании.
5.1Флаги BLE — 02 01 06
Сервисные флаги Bluetooth Low Energy (длина 3 байта): LE General Discoverable, BR/EDR Not Supported.
5.2ID производителя / тип — FFFF
2 байта. Определяет тип идентификатора:
0xFFFF— тип Beacon (по умолчанию).0x4C00— режим iBeacon (на клиенте отображается как Apple0x004C, little-endian).
Тип (Beacon / iBeacon) выбирается в SAUK BeaconManager.
5.3iBeacon-префикс — 02 15
2 байта: 0x02 — тип «iBeacon», 0x15 — длина полезной части 21 байт (UUID 16 + версия ПО 4 + калибровочный RSSI 1).
5.4UUID — 16 байт
Пример: EA0CCA2A-0108-0100-A1B1-8CE4BC06C19F. Структура:
| Байты | Поле | Описание |
|---|---|---|
| [0..3] | Префикс SAUK | 0xEA0CCA2A — константа производителя. |
| [4] | Hardware minor | Младшая версия аппаратной реализации платы. |
| [5] | Hardware major | Старшая версия платы (нанесена на шелкографии). |
| [6] | Набор опций | Кодирует набор установленных опций/датчиков конкретного исполнения. |
| [7] | Reserved | Зарезервирован (0x00). |
| [8..15] | Серийный номер | Уникальный идентификатор экземпляра. |
5.5Версия ПО и калибровочный RSSI
| Поле | Длина | Описание |
|---|---|---|
| Software Major | 2 байта, big-endian | Старшая часть версии прошивки (пример 0x0001). |
| Software Minor | 2 байта, big-endian | Младшая часть версии прошивки (пример 0x0002). |
| Калибровочный RSSI@1м | 1 байт | Опорный уровень сигнала на 1 метре для расчёта дальности. 0xC9 = 201; 201 − 256 = −55 dBm. |
6Service Data и данные датчиков
Блок Service Data (тип 0x16) присутствует только в Scan Response. Первые 5 байт одинаковы для всех типов маяков, байты [5..11] зависят от режима.
6.1Общие поля [0..4]
| Байт | Поле | Описание |
|---|---|---|
| [0..1] | Маркер сервиса | Константа 0x4253 — проприетарный сервис SAUK. |
| [2] | Режим устройства | Тип маяка: 0x00 Beacon, 0x01 Tamper, 0x03 Leak, 0x04 Temperature, 0x05 Angle. |
| [3] | Заряд батареи | Остаток в процентах 0..100. Пример: 0x63 = 99%. |
| [4] | Мощность | интервал | Упаковка: старшие 4 бита — уровень мощности, младшие 4 бита — код интервала рекламы. Пример 0x43 → мощность 4 (0 dBm), интервал 3 (1000 мс). |
Коды мощности и интервала (байт [4])
Мощность: 0 = −20, 1 = −12, 2 = −8, 3 = −4, 4 = 0, 5 = +4 dBm.
Интервал: 0 = 100, 1 = 250, 2 = 750, 3 = 1000, 4 = 2000, 5 = 5000, 6 = 10000 мс.
6.2Tamper — детектор обрыва тросика режим 0x01
| Байт | Поле | Описание |
|---|---|---|
| [5] | Статус | бит0: состояние тросика (0 = цел, 1 = оборван); бит1: флаг тревоги (Alarm). |
| [6..7] | АЦП | Сырое 12-битное значение (0..4095) для диагностики. Тросик цел (замкнут) ≈ 10; оборван ≈ 3380. |
Флаг тревоги фиксируется до сброса из SAUK BeaconManager.
6.3Leak — датчик протечки режим 0x03
| Байт | Поле | Описание |
|---|---|---|
| [5] | Статус протечки | 0x00 = сухо, 0x01 = протечка. |
| [6..7] | АЦП | Сырое 12-битное значение (0..4095). Порог ≈ 3100: ниже — протечка. Сухо ≈ 3380, водопроводная вода ≈ 1750. |
6.4Temperature — датчик температуры режим 0x04
| Байт | Поле | Описание |
|---|---|---|
| [5] | Валидность | 0x00 = ошибка измерения, 0x01 = данные корректны. |
| [6..7] | Температура | int16, big-endian, в десятых долях °C, со знаком, уже с учётом поправки. Пример: 0x00EB = 235 → +23.5 °C; 0xFF9C = −100 → −10.0 °C. |
| [8..9] | Погрешность | uint16, big-endian, в сотых долях °C. По значению виден источник: 500 = ±5.00 °C — встроенный датчик nRF52; 10/20/30 = ±0.10/0.20/0.30 °C — TMP117. |
| [10..11] | Поправка | int16, big-endian, в сотых долях °C, со знаком. Текущая калибровочная поправка. Пример: 0xFE34 = −4.60 °C; 0x0000 = без поправки. |
6.5Angle — датчик наклона (акселерометр) режим 0x05
| Байт | Поле | Описание |
|---|---|---|
| [5] | Частота + валидность | биты 7..4 — код ODR (0 = 1 Гц, 1 = 10 Гц, 2 = 25 Гц, 3 = 50 Гц); бит0 — valid (1 = данные актуальны). Пример 0x11 = 10 Гц, valid. |
| [6..7] | Ax | Медиана по осям в mg (1g ≈ 1000 mg), int16 big-endian, со знаком. Полная шкала ±2g, разрешение 16 mg. Медиана — по окну FIFO из 32 семплов (на 10 Гц окно ≈ 3.2 сек), что фильтрует кратковременные взмахи и шум. |
| [8..9] | Ay | |
| [10..11] | Az |
Ориентация (в покое): лёжа горизонтально Az ≈ −1000 mg; перевёрнут — Az ≈ +1000 mg; вертикально — Ax или Ay ≈ ±1000 mg. Из проекций вектора силы тяжести приёмник вычисляет угол наклона в диапазоне 0…±90° по оси (до 360° по ориентации через atan2), с разрешением около 0.9° у горизонтали. Применение — контроль медленного наклона/ориентации.
7Демонстрация в nRF Connect
Маяк обнаруживается и разбирается стандартным сканером nRF Connect. Ниже — обнаружение устройства и «сырые» данные рекламного пакета.


7.1Пример захвата (обычный Beacon)
| Параметр | Значение |
|---|---|
| Device name | SAUK-C40308 (Beacon) |
| MAC address | DE:34:9F:63:72:CB |
| RSSI | −68 dBm |
| Advertising type | Legacy, LE only |
| Flags | LE General Discoverable, BR/EDR Not Supported |
| Company | Reserved ID <0xFFFFFFFF> (режим Beacon) |
| UUID | ea0cca2a-0101-0100-a1b1-8ce4bc06c19f |
| Software Major / Minor | 1 / 2 |
| RSSI at 1m (калибровка) | −55 dBm |
Набор полей и содержимое Service Data зависят от типа маяка (раздел 2). Приведённый пример соответствует обычному Beacon без датчиков.
О снимках
Скриншоты сделаны на приборе ранней аппаратной ревизии: в UUID версия платы — 0101, а служебный блок Service Data имеет раннюю раскладку (в сканере отображается как 0x5242). В текущей прошивке маркер сервиса — 0x4253, а состав Service Data соответствует разделам 4 и 6.
8Примечания и совместимость
Формат и порядок байт
Все данные — в шестнадцатеричном виде (HEX). Числовые поля датчиков (температура, погрешность, поправка, оси акселерометра) — big-endian. Company ID Apple в режиме iBeacon на клиенте отображается в little-endian (0x004C).
MAC-адрес
Берётся из заголовка BLE-пакета, доступен при любом сканировании и не изменяется в ходе эксплуатации.
Данные датчиков и имя
Передаются только в Scan Response — то есть доступны лишь при активном сканировании.
Совместимость
SAUK Beacon совместим со стандартными BLE-сканерами (nRF Connect и др.) и обнаруживается любым устройством с поддержкой Bluetooth Low Energy. Настройка — в SAUK BeaconManager.