Модуль SENS обеспечивает передачу данных с сенсоров метки параллельно с позиционированием. Данные передаются малыми порциями в пакетах позиционирования.
Каждое устройство имеет свой набор сенсоров, определяемый конкретной версией встроенного ПО. В зависимости от конфигурации модуля SENS передаются только выбранные сенсоры. Если все сенсоры не влезают в радиопакет, то оставшиеся передаются в следующем радиопакете, и так по кругу.
Сенсоры передаются в виде :. Коды сенсоров уникальны в рамках системы позиционирования (допустимы отрицательные коды). Значением сенсора может быть одно число, или массив чисел, или список вида :; здесь идентификатором могут быть номера каналов сенсора или индексы полей для сложных сенсоров. Типичное строковое представление (в Списке меток CoBench) блока сенсоров в радиопакете:
v1{i -4:0 -1:1 -14:0 -10:[2 -2318 28] -13:{3 3:0 4:0 6:0} -6:39 2:{2 1:-2 2:-2} 6:{2 1:0 2:0}}
Здесь v1 обозначает версию набора кодов сенсоров. В настоящее время есть только версия 1.
Описание значений и поведения разных сенсоров см. Коды сенсоров
Существует два типа сенсоров – сенсор состояния и сенсор события. Для каждого кода сенсора известен его тип.
Сенсор состояния (StateSensor)
Передает значение какого-либо измеряемого параметра на момент отправки сенсора в радиопакете. Примером могут быть напряжение батареи или температура метки.
Такие сенсоры передаются постоянно, пока включены в конфигурации.
Сенсор события (EventSensor)
Передает информацию о каком-либо событии. Например, нажатие кнопки или завершение замера GNSS. Такая информация обязательно сопровождается временем события в виде количества секунд от момента события до момента отправки радиопакета (PassTime), что позволяет восстановить абсолютное время события после приема пакета (с некоторой приемлемой точностью). Кроме PassTime передаются также код события или значения каких-либо параметров, измеренных в момент события.
Такие сенсоры конфигурируются по умолчанию на автоматическую отправку: /sens <name>#Send=Auto. В такой конфигурации они передаются несколько раз (для надежности) после возникновения соответствующего события, затем передача сенсора прекращается до следующего события. Количество раз свое у каждого сенсора.
Конфигурация модуля:
/sens
Парсет-массив, задает режим отправки для каждого сенсора. Содержит записи для всех сенсоров, отдельно для каждого канала многоканальных сенсоров. Ключом для идентификации записи является имя сенсора.

Параметр

Значения

Описание

i

text string

Описание сенсора – :_. Неизменяемый параметр (read only)

Send

Off, Auto, Normal, Urgent

Режим отправки сенсора:
Off – не отправлять
Auto – отправлять по мере необходимости Normal – отправлять постоянно
Urgent – отправлять постоянно с повышенным приоритетом


В режиме отправки Send=Auto решение об отправке принимается автоматически с учетом условий, специфичных для каждого сенсора.
Примеры (через CoBench):

Запрос

Ответ

GET /sens



s22: # i=bara -10: Send=Auto # i=Motionsa -15: Send=Auto
# i=Orientation -16: Send=Normal # i=buttona -5:Send=Auto
# i=temp-6:Send=Normal
# i=Ubat-7:Send=Off


Список всех сенсоров в устройстве и их текущий режим отправки

GET /sens bar



s22: # i=bara -10:Send=Auto


Состояние сенсора bar (код -10)

PUT GET

/sens
/sens

bar#Send=Off bar



s22: 2.04(Changed): Changed s22: # i=bara -10:


Изменение режима отправки сенсора bar



Send=Off

PUT GET

/sens
/sens

bar def bar



s22: 2.04(Changed): Changed s22: # i=bara -10:


Сброс режима отправки сенсора bar в исходное состояние




Send=Auto

PUT

/sens

clear



s22: 2.04(Changed): Changed


Сброс режима отправки всех сенсоров в исходное состояние

 


Коды сенсоров

Код

Название

Описание

7

BLE_SENSOR

{ номер_канала : значение } Данные с фитнесс-браслета. Каналы: 1 : Пульс (ударов в мин)

  1. : Шаги (количество)
  2. : Уровень заряда батареи (%)


    Коды ошибок:
    -1=данные отсутствуют (таймаут 15с)
    -2=BLE соединение отсутствует
    -3=заданное в /ble/bsens устройство не поддерживается

6

IN_UPTIME

{ номер_канала : значение } "Моточасы" Длительность активного состояния линии IN_DIG, секунды. См. INPUT сенсоры

5

CANBUS_PARAMETER

{ номер_канала : значение } Параметры с CAN-шины. Настройку каналов см. CAN модуль

2

FUEL_LEVEL

{ номер_канала : значение } Уровень топлива. Значение в условных единицах.
-1=Неправильные настройки (выключен опрос датчика или адрес датчика 0)
-2=Нет данных с датчика (более 5с)

-1

POWER_BATTERY_STATE

Состояние батареи: 0=BatteryOff, 1=Low, 2=Mid, 3=Good

-2

POWER_CHARGER_STATE

Состояние зарядки аккумулятора: 0=Idle, 1=Active, 2=Suspended

-3

POWER_SOURCE

Источник питания: 0=Battery, 1=External

-4

MOTION

Состояние по акселерометру: 0=Движение, 1=Покой

-5

EVT_BUTTON

Время с нажатия кнопки, секунды. Передается 5 раз после нажатия кнопки.

-6

TEMPERATURE

Температура, degC

-7

VOLTAGE_BAT

Напряжение батареи, mV

-10

BAROMETER

{ номер_параметра : значение } Показания барометра:

  1. - Относительное давление, Pa (Prel = Pabs - 101325 Pa)
  2. - Температура барометра, degC

-11

IN_ADC

{ номер_канала : значение } Аналоговый вход, Напряжение, mV. См. INPUT сенсоры

 

 

 

-12

IN_DIG

{ номер_канала : значение } Цифровой вход: 0, 1. См. INPUT сенсоры

-13

IN_COUNT

{ номер_канала : значение } Счетчик импульсов на линии IN_DIG. См. INPUT сенсоры

-14

TAGCFGSITE

Состояние метки для Автоконфигурации меток (ConfigUpdate); также признак TDOA Rx- блинка.
bitmap:
bit_0 - Old (update request) bit_3:1 - Mark
bit_7:4 - Group

-15

EVT_MOTION

{ EventId : timepassed } События акселерометра. Каждое событие передается несколько раз после того, как случилось.
timepassed – время с события, секунды
EventId=0: no event, reserved EventId=1: free fall EventId=2: impact

-16

ORIENTATION

Ориентация акселерометра.
ZH=0 ZL=1 YH=2 YL=3 XH=4 XL=5,
acceleration over threshold on this axis: Z, Y, X; H - positive, L - negative.

-18

EVT_GNSS

{ PassTime : { номер_параметра : значение } } Данные GNSS. Каждый замер передается несколько раз.
PassTime – время с замера. Параметры:
0 - LON, Longitude in deg (scaling 1e-6, up to 4 bytes) 1 - LAT, Latitude in deg (scaling 1e-6, up to 4 bytes)

  1. - HEIGHT, Height above ellipsoid in 100mm (up to 4 bytes)
  2. - hACC, Horizontal accuracy estimate in 100mm (up to 1000m) 4 - vACC, Vertical accuracy estimate in 100mm (up to 1000m)
    5 - VELN, NED north velocity 0.1 m/s 6 - VELE, NED east velocity 0.1 m/s 7 - VELD, NED down velocity 0.1 m/s

-19

EVT_BEACONS

{ PassTime : data_array } Результат одного сканирования BLE-биконов (см. BLE модуль). Передается несколько раз после окончания сканирования.

data_array: array of data_records data_record: array of values:

  1. - BeaconID: MAC-адрес MSB first
  2. - optional fPathLoss; PathLoss_dBm = (fPathLoss - 60); PathLoss_dBm is equal to (RSSI - TxPowerAt0m )
  3. - optional fVoltage : int; Voltage_V = (fVoltage / 100 + 3)

-21

DISTANCE

Дистанция до спаренного тага (см. SINGLETAG модуль) dist_dm OR { diffID : dist_dm }
diffID : int64, <EUI64 of remote device> - <EUI64 of sensor origin (this Tag)>; (subtraction of uint64_t with roll-over, then casted to int64_t)

dist_dm : int, positive distance to remote device in decimeters if measured recently and successfully, or -1 otherwise


INPUT сенсоры
Устройство может иметь выделенные входные линии. Они могут использоваться как аналоговые или цифровые входы. Устройство может передавать несколько типов сенсоров, связанных с этими линиями.
Как правило, линии нумеруются от 1 до N. Например, в TG8V есть 4 входа названных ADC1, ADC2, ADC3, ADC4. Для входной линии номер X есть 4 сенсора:

Название в /sens (SENS модуль)

Код сенсора и название

Desription

inXadc

-11 IN_ADC

Напряжение на входной линии X

 

 

 

inXdig

-12 IN_DIG

Двоичное состояние входной линии X (порог 1.0V): 0 – если напряжение меньше порога
1 – если напряжение больше порога

inXcount

-13 IN_COUNT

Счетчик положительных импульсов на inXdig, uint32_t. Добавляется по фронту, переполняется при 2^32, сохраняется при сбросах и отключении питания.

inXup

6 IN_UPTIME

Полное время inXdig=1, секунды, uint32_t, переполняется при 2^32, сохраняется при сбросах и отключении питания.


Передача этих сенсоров может управляться:
Вручную как описано в SENS модуль установкой параметра /sens <name>#Send в Off или Normal
Автоматически (в некоторых устройствах). В таком случае параметр /sens <name>#Send должен быть Auto и режим передачи будет выбираться в зависимости от конфигурации устройства.