Перейти к содержимому
Черновик: материал сгенерирован и ещё не вычитан.

Bluetooth: устройства и алгоритмы

Базовая настройка Bluetooth, слоты BTTAG и сканер описаны в статье «Bluetooth: подключение датчиков». Здесь собраны устройства, которые требуют чего-то сверх выбора датчика из списка: ручного разбора рекламного пакета, алгоритма EasyLogic или собственных команд.

Для алгоритмов, которые не просто слушают эфир, а подключаются к устройству, в настройках системы должны быть включены модули:

  • Bluetooth;
  • Bluetooth конфигурирование/управление — без него алгоритм не сможет установить соединение с датчиком;
  • Запись архива точек в память — для алгоритмов, выгружающих архивы.

После включения примените настройки и перезагрузите прибор.

⚙ Открыть настройки системы

Алгоритм загружается командой SCRIPT galileosky/<имя> — для этого нужно активное GPRS-соединение, загрузка идёт с ресурсов Galileosky и занимает несколько минут. При локальном подключении алгоритм можно загрузить из .bin-файла в разделе EasyLogic.

⚙ Открыть EasyLogic

Проверить, что алгоритм встал: на вкладке «Устройство» в идентификационных данных появится его название. Если через 10 минут не появилось — перезагрузите прибор.

Диагностические сообщения алгоритмов видны в разделе «Диагностика» при включённой опции «Диагностика алгоритмов и скриптов».

⚙ Открыть запись лога

Универсальные датчики 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 температуры с разных датчиков).

  1. Убедитесь, что Bluetooth работает в режиме приёма датчиков, частота опроса — 1 с, таймаут датчика — 60 с.
  2. Запустите сканирование, найдите MAC нужного датчика (его показывает фирменное приложение TESLiOT-Mobile).
  3. Разверните строку устройства, чтобы увидеть RSSI и рекламный пакет.
  4. Добавьте новую строку из полученного пакета и выберите в ней до 4 байт по таблице ниже.
  5. Укажите тег, в который попадёт значение.
  6. Остановите сканирование и примените настройки.
  7. Отметьте выбранные теги в основном пакете.

Структура рекламного пакета TESLiOT v1.0:

БайтПолеРасшифровкаПример
7Служебные данныеНе анализируются
3Type IDКод типа устройства в ASCII54 53 31TS1
1Version HWВерсия железа05 → hw.5
1Version SWВерсия ПО0A → sw.1
4Unix-времяСекунды POSIX5F 37 AA DC → 15.08.20 12:00
1ПитаниеНапряжение × 1021 → 33 → 3,3 В
1Флаги событий0x01 дверь закрыта, 0x02 дверь открыта, 0x04 тревога 1, 0x08 тревога 20A → открыта + тревога 2
3Ускорение X, Y, ZИз каждого байта вычесть 128, разделить на 1008F 46 0A → X = 0,15 g; Y = −0,58 g; Z = −1,18 g
1HallНапряжённость магнитного поля, отн. ед.4A → 74
2ОсвещённостьЛюксы33 A4 → 13220 лк
2ВлажностьРазделить на 10006 53 → 16,19 %
2ТемператураЗнаковое, разделить на 100F9 CA → −15,90 °C

Для датчика «4 в 1» есть готовый алгоритм, который сам раскладывает пакет по тегам:

SCRIPT galileosky/bluetooth_TESLiOT
MAC <b0>,<b1>,<b2>,<b3>,<b4>,<b5>

MAC задаётся шестью байтами в десятичном виде. Например, для ee:37:e6:0b:d9:46MAC 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

Теги, занятые этим датчиком, нельзя использовать для параметров другого.

Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 47.

Метка по умолчанию вещает в формате iBeacon, поэтому прибор разбирает её без алгоритмов: выберите метку в сканере и отметьте нужные параметры.

Значимые поля — Major и Minor, каждое до 65535. Их можно привязать к разным тегам BTTAG (тогда на сервер уйдут два отдельных числа) или объединить в один тег, если ПО мониторинга ждёт одно значение.

Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 47.

Датчик умеет вещать в двух форматах, и оба прибор разбирает сам:

  • Собственный формат ITALON — выбирается в сканере как отдельный тип датчика;
  • «Альтернативный» — датчик имитирует ДУТ Эскорт, и прибор принимает его как Эскорт.

Формат переключается в фирменном мобильном приложении ITALON; вход в раздел настроек защищён паролем администратора 100000.

Если нужно разобрать пакет вручную (например, чтобы забрать поле, которого нет в списке параметров), структура собственного формата такая:

БайтЗначение
0…202 01 06 — префикс
30E — длина блока данных
477 — идентификатор данных
50D — версия протокола
6…9Unix-время
10…11Уровень топлива
12…13Напряжение питания, мВ
14…16Служебные данные
17Температура, −40…+85 °C
18…190A 09 — разделитель
далееИмя устройства = заводской номер датчика

Есть два пути — выбирайте по версии прошивки.

Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 47. Алгоритм не нужен: добавьте датчик в сканере и выберите параметры вручную по структуре пакета.

БайтЗначениеПересчёт
0…115 81 — идентификатор производителя
2…3Уровень топливаlittle-endian
4Уровень, %
5Батарея100 мВ на единицу
6Температуразнаковое, °C
7Наклон0…180°
8Битовое поле состояния

Порядок байтов в многобайтовых полях — little-endian.

Доступно на Galileosky 10 с прошивки 2 и 7x с прошивки 38 — то есть на прошивках, где ручной разбор ещё недоступен.

SCRIPT galileosky/dut_fantom
MAC<N> <b0>,<b1>,<b2>,<b3>,<b4>,<b5>

Где <N> — номер датчика (до 4 штук), байты MAC — в десятичном виде. Алгоритм раскладывает данные по слотам BTTAG0…BTTAG5.

Датчик с управляемым реле. Доступно на 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

Компактный температурный регистратор с сертификацией 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) менять не рекомендуется: в него зашит заводской номер, по которому алгоритм различает датчики.

  1. Включите модули Bluetooth, Запись архива точек в память и Bluetooth конфигурирование/управление, примените настройки и перезагрузите прибор.
  2. Отметьте в основном пакете тег массива пользователя.
  3. Загрузите алгоритм: 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 → пароль abcdefghij
ELABPTEN12830GL 3,"abcde,fghi" → пароль abcde,fghi
ELABPTEN12830GL 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, upar3upar41upar2, upar4upar42
Заряд батареи, %upar43, upar45upar89upar44, upar46upar90
Напряжение батареи, мВupar91, upar93upar129upar92, upar94upar130

Смещение блоков батареи внутри массива задаётся описателями пропуска (0x70 — пропустить 8 параметров, 0x10 — пропустить 2), поэтому номера параметров сервера всегда одни и те же независимо от длины имени датчика.

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Количество характеристик
13UUID характеристики по индексу: 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: подключение датчиков · Датчики температуры и влажности · Датчики уровня топлива