Bluetooth: устройства и алгоритмы
Базовая настройка Bluetooth, слоты BTTAG и сканер описаны в статье «Bluetooth: подключение датчиков». Здесь собраны устройства, которые требуют чего-то сверх выбора датчика из списка: ручного разбора рекламного пакета, алгоритма EasyLogic или собственных команд.
Что нужно включить заранее
Заголовок раздела «Что нужно включить заранее»Для алгоритмов, которые не просто слушают эфир, а подключаются к устройству, в настройках системы должны быть включены модули:
- Bluetooth;
- Bluetooth конфигурирование/управление — без него алгоритм не сможет установить соединение с датчиком;
- Запись архива точек в память — для алгоритмов, выгружающих архивы.
После включения примените настройки и перезагрузите прибор.
⚙ Открыть настройки системы
Алгоритм загружается командой SCRIPT galileosky/<имя> — для этого
нужно активное GPRS-соединение, загрузка идёт с ресурсов Galileosky и
занимает несколько минут. При локальном подключении алгоритм можно
загрузить из .bin-файла в разделе EasyLogic.
⚙ Открыть EasyLogic
Проверить, что алгоритм встал: на вкладке «Устройство» в идентификационных данных появится его название. Если через 10 минут не появилось — перезагрузите прибор.
Диагностические сообщения алгоритмов видны в разделе «Диагностика» при включённой опции «Диагностика алгоритмов и скриптов».
⚙ Открыть запись лога
Датчики TESLiOT
Заголовок раздела «Датчики TESLiOT»Универсальные датчики TESLiOT (все модификации работают в едином протоколе TESLiOT v1.0) — температура (SHT30 по I²C и DS18B20 по 1-Wire), влажность, освещённость, 3D-акселерометр, магнитный датчик и цифровые входы.
Доступно на Galileosky 10 с прошивки 1.0 и 7x с прошивки 39.0 (приём пакетов в EasyLogic — с 30.0).
Вариант 1: разбор рекламного пакета вручную
Заголовок раздела «Вариант 1: разбор рекламного пакета вручную»Так параметры можно разложить по любому числу слотов — вплоть до 64 BLE-параметров (например, 64 температуры с разных датчиков).
- Убедитесь, что Bluetooth работает в режиме приёма датчиков, частота опроса — 1 с, таймаут датчика — 60 с.
- Запустите сканирование, найдите MAC нужного датчика (его показывает фирменное приложение TESLiOT-Mobile).
- Разверните строку устройства, чтобы увидеть RSSI и рекламный пакет.
- Добавьте новую строку из полученного пакета и выберите в ней до 4 байт по таблице ниже.
- Укажите тег, в который попадёт значение.
- Остановите сканирование и примените настройки.
- Отметьте выбранные теги в основном пакете.
Структура рекламного пакета TESLiOT v1.0:
| Байт | Поле | Расшифровка | Пример |
|---|---|---|---|
| 7 | Служебные данные | Не анализируются | |
| 3 | Type ID | Код типа устройства в ASCII | 54 53 31 → TS1 |
| 1 | Version HW | Версия железа | 05 → hw.5 |
| 1 | Version SW | Версия ПО | 0A → sw.1 |
| 4 | Unix-время | Секунды POSIX | 5F 37 AA DC → 15.08.20 12:00 |
| 1 | Питание | Напряжение × 10 | 21 → 33 → 3,3 В |
| 1 | Флаги событий | 0x01 дверь закрыта, 0x02 дверь открыта, 0x04 тревога 1, 0x08 тревога 2 | 0A → открыта + тревога 2 |
| 3 | Ускорение X, Y, Z | Из каждого байта вычесть 128, разделить на 100 | 8F 46 0A → X = 0,15 g; Y = −0,58 g; Z = −1,18 g |
| 1 | Hall | Напряжённость магнитного поля, отн. ед. | 4A → 74 |
| 2 | Освещённость | Люксы | 33 A4 → 13220 лк |
| 2 | Влажность | Разделить на 100 | 06 53 → 16,19 % |
| 2 | Температура | Знаковое, разделить на 100 | F9 CA → −15,90 °C |
Вариант 2: алгоритм для TESLiOT-THLD
Заголовок раздела «Вариант 2: алгоритм для TESLiOT-THLD»Для датчика «4 в 1» есть готовый алгоритм, который сам раскладывает пакет по тегам:
SCRIPT galileosky/bluetooth_TESLiOTMAC <b0>,<b1>,<b2>,<b3>,<b4>,<b5>MAC задаётся шестью байтами в десятичном виде. Например, для
ee:37:e6:0b:d9:46 — MAC 238,55,230,11,217,70; ответ повторяет адрес.
Байты MAC сохраняются в пользовательские теги 0…5.
Раскладка по слотам:
| Тег | Значение |
|---|---|
| BTTAG0 | Идентификатор типа устройства |
| BTTAG1 | Версия железа |
| BTTAG2 | Версия ПО |
| BTTAG3 | Дата и время работы датчика, POSIX-time |
| BTTAG4…BTTAG7 | Время: дни, часы, минуты, секунды |
| BTTAG8 | Напряжение питания, делить на 10 |
| BTTAG9 | Флаги событий (см. таблицу пакета) |
| BTTAG10 | Ускорение по X, Y, Z: вычесть 128, делить на 100 |
| BTTAG11…BTTAG13 | Ускорение по осям X, Y, Z по отдельности |
| BTTAG14 | Уровень магнитного поля |
| BTTAG15 | Освещённость |
| BTTAG16 | Влажность, делить на 100 |
| BTTAG17 | Температура, знаковое, делить на 100 |
Теги, занятые этим датчиком, нельзя использовать для параметров другого.
Метки ID-Tag Эскорт
Заголовок раздела «Метки ID-Tag Эскорт»Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 47.
Метка по умолчанию вещает в формате iBeacon, поэтому прибор разбирает её без алгоритмов: выберите метку в сканере и отметьте нужные параметры.
Значимые поля — Major и Minor, каждое до 65535. Их можно привязать к разным тегам BTTAG (тогда на сервер уйдут два отдельных числа) или объединить в один тег, если ПО мониторинга ждёт одно значение.
ДУТ ITALON
Заголовок раздела «ДУТ ITALON»Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 47.
Датчик умеет вещать в двух форматах, и оба прибор разбирает сам:
- Собственный формат ITALON — выбирается в сканере как отдельный тип датчика;
- «Альтернативный» — датчик имитирует ДУТ Эскорт, и прибор принимает его как Эскорт.
Формат переключается в фирменном мобильном приложении ITALON; вход в раздел настроек защищён паролем администратора 100000.
Если нужно разобрать пакет вручную (например, чтобы забрать поле, которого нет в списке параметров), структура собственного формата такая:
| Байт | Значение |
|---|---|
| 0…2 | 02 01 06 — префикс |
| 3 | 0E — длина блока данных |
| 4 | 77 — идентификатор данных |
| 5 | 0D — версия протокола |
| 6…9 | Unix-время |
| 10…11 | Уровень топлива |
| 12…13 | Напряжение питания, мВ |
| 14…16 | Служебные данные |
| 17 | Температура, −40…+85 °C |
| 18…19 | 0A 09 — разделитель |
| далее | Имя устройства = заводской номер датчика |
ДУТ Fantom (Mielta)
Заголовок раздела «ДУТ Fantom (Mielta)»Есть два пути — выбирайте по версии прошивки.
Разбор рекламного пакета
Заголовок раздела «Разбор рекламного пакета»Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 47. Алгоритм не нужен: добавьте датчик в сканере и выберите параметры вручную по структуре пакета.
| Байт | Значение | Пересчёт |
|---|---|---|
| 0…1 | 15 81 — идентификатор производителя | |
| 2…3 | Уровень топлива | little-endian |
| 4 | Уровень, % | |
| 5 | Батарея | 100 мВ на единицу |
| 6 | Температура | знаковое, °C |
| 7 | Наклон | 0…180° |
| 8 | Битовое поле состояния |
Порядок байтов в многобайтовых полях — little-endian.
Алгоритм dut_fantom
Заголовок раздела «Алгоритм dut_fantom»Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 38 — то есть на прошивках, где ручной разбор ещё недоступен.
SCRIPT galileosky/dut_fantomMAC<N> <b0>,<b1>,<b2>,<b3>,<b4>,<b5>Где <N> — номер датчика (до 4 штук), байты MAC — в десятичном виде.
Алгоритм раскладывает данные по слотам BTTAG0…BTTAG5.
TopFlytech TSR1-B
Заголовок раздела «TopFlytech TSR1-B»Датчик с управляемым реле. Доступно на Galileosky 10 с прошивки 1.3 и 7x с прошивки 47.6. Требуется включённый модуль «Bluetooth конфигурирование/управление».
SCRIPT galileosky/topflyTsr1bCtrlКоманды (MAC везде задаётся шестью байтами в десятичном виде):
| Команда | Что делает |
|---|---|
TOPFLYTSR1B 0,<b0>…<b5> | Запрос состояния |
TOPFLYTSR1B 1,<b0>…<b5>,<t>,<p> | Переключить реле: t — состояние, p — пароль |
TOPFLYTSR1B 2,<b0>…<b5>,<np>,<cp> | Сменить пароль: np — новый, cp — текущий |
Пароль — число от 0 до 999999, по умолчанию 654321.
Ответ на запрос состояния: id=, tr=, ep=, al=, tm=, rs=,
hw=, fw=. Поле al принимает значения 0, 1 и 16.
Коды ошибок взаимодействия — от −1 до −5.
Подключение к датчику может занимать до 30 секунд. За это время терминал команд успевает решить, что ответа не будет, поэтому результат чаще всего виден в диагностике, а не в окне команд.
Температурные регистраторы ELA BluePuck T EN12830
Заголовок раздела «Температурные регистраторы ELA BluePuck T EN12830»
Компактный температурный регистратор с сертификацией EN12830 v2018, автономностью до 18 лет, IP68 и настройкой по NFC. Алгоритм выгружает из датчиков накопленные архивы и отправляет их на сервер внеочередными точками.
Доступно на Galileosky 10 с прошивки 2.9 и 7x с прошивки 47.17, обязательно с microSD или eMMC (далее — хранилище данных).
Одновременно опрашивается до 20 датчиков: до 2 приоритетных (заданы по MAC) и до 18 отбираемых по уровню сигнала.
Настройка датчика
Заголовок раздела «Настройка датчика»Через фирменное приложение производителя по NFC задайте:
TAG Enable State= включено;TAG Format=T EN;Manufacturer Data Mode= включено;Battery voltage presence= включено (если нужны данные батареи);Data Logger Enable= включено;Data Logger Period— нужный период записи;- пароль в разделе Security — одинаковый для всех опрашиваемых датчиков.
Запишите настройки в память датчика.
Имя датчика в рекламных пакетах (
Advertising Name) менять не рекомендуется: в него зашит заводской номер, по которому алгоритм различает датчики.
Настройка прибора
Заголовок раздела «Настройка прибора»- Включите модули Bluetooth, Запись архива точек в память и Bluetooth конфигурирование/управление, примените настройки и перезагрузите прибор.
- Отметьте в основном пакете тег массива пользователя.
- Загрузите алгоритм:
SCRIPT galileosky/elabluepuckten12830gl2.
Как работает алгоритм
Заголовок раздела «Как работает алгоритм»Процессы сканирования, загрузки и конвертации архивов активны только при подключённом внешнем питании.
- Сканирование. Ищет ближайшие неприоритетные датчики, фильтрует их
по RSSI и сохраняет найденные MAC в
ela/bluepuckten12830/MACs.bin. Данные о батарее (заряд в % и напряжение) обновляются раз в 5 минут. - Загрузка архивов. Поочерёдно подключается к датчикам, начиная с
приоритетных, и складывает архивы в
ela/bluepuckten12830/logs/downloaded. После успешной загрузки в датчике стартует новый архив, а текущий очищается. - Конвертация. Каждый архив верного формата раскладывается в теги и
уходит внеочередными точками, после чего файл удаляется. Архив
неизвестного формата переезжает в
ela/bluepuckten12830/logs/bads— это признак, что в новой версии датчика изменилась структура архива.
Приоритетные MAC хранятся в ela/bluepuckten12830/priority.bin.
Перечисленные файлы и каталоги изменять нельзя.
Команды
Заголовок раздела «Команды»| Команда | Назначение |
|---|---|
ELABPTEN12830GL 1 | Текущий минимальный RSSI; ответ rssiMin=<n> |
ELABPTEN12830GL 2,<r> | Задать минимальный RSSI (по умолчанию −50) |
ELABPTEN12830GL 3,<p> | Пароль подключения к датчикам, 10 символов (по умолчанию 123456789A) |
ELABPTEN12830GL 4 | Список приоритетных MAC |
ELABPTEN12830GL 5,<MAC> | Добавить приоритетный MAC |
ELABPTEN12830GL 6 | Стереть все приоритетные MAC |
ELABPTEN12830GL 7 | Текущий лимит неприоритетных датчиков |
ELABPTEN12830GL 8,<c> | Задать лимит неприоритетных датчиков (по умолчанию 18) |
Минимальный RSSI — порог, ниже которого прибор не подключается к неприоритетным датчикам.
MAC в команде 5 задаётся сплошной строкой:
ELABPTEN12830GL 5,AABBCCDD001F для AA:BB:CC:DD:00:1F. Ответы:
priority MAC added, MAC invalid, priority MACs full (сначала
очистите список командой 6), write error.
Пароль с запятой или кавычками заключается в кавычки, внутренние кавычки экранируются:
ELABPTEN12830GL 3,abcdefghij → пароль abcdefghijELABPTEN12830GL 3,"abcde,fghi" → пароль abcde,fghiELABPTEN12830GL 3,"ab\"cd\"efgh" → пароль ab"cd"efghОтветы: pas updated — пароль обновлён; password length < <n> —
неверная длина.
Коды ошибок
Заголовок раздела «Коды ошибок»| Код | Причина |
|---|---|
| −1 | Ошибка подключения BLE: датчик вне зоны, таймаут |
| −2 | Ошибка файловой системы — проверьте хранилище данных |
| −3 | Неверный ответ датчика: неверный пароль, изменился протокол |
| −4 | Архивирование не запущено — выполните первоначальную настройку датчика |
| −5 | Нарушена целостность данных при передаче: нестабильная связь, эфир перегружен |
| −6 | Архив пуст — подождите, пока датчик накопит данные |
Формат передаваемых данных
Заголовок раздела «Формат передаваемых данных»Данные уходят в теге массива пользователя универсальной структуры.
Общая часть: байт 0 — 0x7F (тип «универсальная структура»), байт 1 —
описатель строки, далее имя датчика в ASCII (1…16 байт) → параметр
сервера upar0.
Дальше идут пары «метка времени — значение»; нечётные параметры сервера начиная с 1 — это Unix-время, чётные — значения:
| Что передаётся | Метки времени | Значения |
|---|---|---|
| Температура (× 100) | upar1, upar3 … upar41 | upar2, upar4 … upar42 |
| Заряд батареи, % | upar43, upar45 … upar89 | upar44, upar46 … upar90 |
| Напряжение батареи, мВ | upar91, upar93 … upar129 | upar92, upar94 … upar130 |
Смещение блоков батареи внутри массива задаётся описателями пропуска
(0x70 — пропустить 8 параметров, 0x10 — пропустить 2), поэтому номера
параметров сервера всегда одни и те же независимо от длины имени датчика.
Универсальный обмен BLEEXCH
Заголовок раздела «Универсальный обмен BLEEXCH»BLEEXCH — низкоуровневый интерфейс к BLE-модулю для алгоритмов
EasyLogic: с его помощью алгоритм сам сканирует эфир, подключается к
устройству, читает и пишет характеристики. Именно на нём построены
фирменные алгоритмы вроде ELA BluePuck.
Приём рекламных пакетов доступен на 7x с прошивки 38.19; полный набор операций — на 7x с 45.0 и Galileosky 10 с 1.0.
BLEEXCH нужен, когда устройства нет в списке разбираемых прибором
(см. «Bluetooth: подключение датчиков») и его формат
не описывается разбором рекламного пакета по байтам: например, значение
приходит не в рекламе, а читается из характеристики, или устройством
надо управлять — записать в него команду, подписаться на уведомления,
выгрузить архив. Если же датчик просто вещает своё значение в эфир,
BLEEXCH не нужен: хватит слота BTTAG.
Что даёт интерфейс: сканирование эфира и перебор найденных устройств, подключение к выбранному по MAC, чтение и запись характеристик, подписка на уведомления.
Ограничения, о которые спотыкаются чаще всего:
- одновременно открыто не более одного соединения с устройством;
- список сканирования вмещает 128 MAC-адресов;
- за одно чтение характеристики возвращается не более 123 байт;
- у рекламных пакетов есть срок актуальности — устаревшие прибор выбрасывает, интервал задаётся отдельной операцией.
Готовые алгоритмы под конкретные устройства обычно уже написаны — сверьтесь с разделами выше, прежде чем реализовывать обмен самостоятельно.
⚙ Открыть EasyLogic
Для интеграторов: коды операций и ответов BLEEXCH
Заголовок раздела «Для интеграторов: коды операций и ответов BLEEXCH»Этот раздел нужен только при написании собственного алгоритма EasyLogic.
| № | Операция |
|---|---|
| 1 | Открыть соединение с интерфейсом, ответ содержит id= |
| 2 | Подтверждение активности (keepalive) |
| 3 | Закрыть соединение с интерфейсом |
| 4 | Задать таймаут актуальности рекламных пакетов (arto=) |
| 5 | Запрос следующего устройства из списка найденных |
| 6 | Перезапустить сканирование |
| 7 | Статус инициализации сканирования |
| 8 | Запросить рекламный пакет по MAC (6 байт в десятичном виде) |
| 9 | Получить рекламный пакет: mc=, ri=, ds=, далее HEX |
| 10 | Подключиться к устройству: MAC и таймаут в мс, одновременно не более одного соединения |
| 11 | Отключиться от устройства |
| 12 | Количество характеристик |
| 13 | UUID характеристики по индексу: cs=16, UUID=… или cs=2, UUID=… |
| 14 | Подписаться на уведомления характеристики |
| 15 | Отписаться от уведомлений |
| 16 | Получить уведомление: ns=Z!… |
| 17 | Записать характеристику |
| 18 | Прочитать характеристику: rs=<размер><!|?><HEX>, не более 123 байт |
| 19 | Статус последней операции |
Коды возврата:
| Код | Значение |
|---|---|
| 1 | Неверная команда |
| 2 | Неверный идентификатор соединения |
| 3 | Неверные аргументы |
| 4 | Внутренняя ошибка интерфейса |
| 5 | Данные ещё не готовы |
| 10 | Достигнут предел — 128 MAC-адресов в списке сканирования |
| 11 | Таймаут |
| 12 | Устройство в неподходящем состоянии |
| 13 | Внутренняя ошибка BLE-модуля |
См. также: Bluetooth: подключение датчиков · Датчики температуры и влажности · Датчики уровня топлива