Устройства TKL-Log с беспроводными модулями LoraWan, NB-IoT, GSM передают данные в бинарном формате, описанном далее.
Если существует ограничение по объему передаваемых данных за одну транзакцию – в таком случае данные будут разбиты на пакеты и переданы частями. Подробнее о структуре пакетов описано здесь.
Данные, передаваемые от конечных устройств, могут содержать следующие поля:
Блок | Название | Размер (тип) | Описание |
---|---|---|---|
Заголовок | flag | 1 байт (uint8_t) | Постоянная. По умолчанию 0x34. |
version | 1 байт (uint8_t) | Версия блока данных. По умолчанию 0x02. | |
deviceType | 1 байт (DeviceTypeEnum) | Тип конечного устройства. | |
FW_H | 1 байт (uint8_t) | Версия прошивки. Старшее число. | |
FW_L | 1 байт (uint8_t) | Версия прошивки. Младшее число. | |
deviceID | 2 байта (uint16_t) | ID конечного устройства. | |
dataFlag | 1 байт | Флаги передачи дополнительных данных (см. описание далее) | |
Результаты измерений | sensorType | 1 байт (SensorTypeEnum) | Тип сенсора. |
sensorID | 4 байта (uint32_t) | ID сенсора. | |
dataSize | 2 байта (uint16_t) | Размер поля с данными (в байтах). | |
data | array[dataSize] | Данные – массив | |
Дополнительные данные (передаются, если установлен соответствующий флаг в dataFlag) |
timestamp | 4 байта (int32) | Дата и время замера |
logConfig | 2 байта (LogInterval_t) | Интервал измерения | |
deviceState | 4 байта | Состояние устройства. | |
memoryInfo | 4 байта (uint16_t + uint16_t) | Состояние памяти устройства. |
Заголовок
Блок Заголовок передается всегда. Имеет фиксированный размер 8 байт, содержит следующие элементы:
flag
– первый байт описываемого формата данных всегда содержит0x34
.version
– версия формата данных. В данном документе описывается формат данных версии 2, т.о. всегда содержит0x02
.deviceType
– тип устройства, отправляющего данные:
enum DeviceType_t { Device_TKLLog_SAT = 0x14, Device_TKLLog_NBIOT = 0x15, Device_TKLLog_LORAWAN = 0x16, Device_TKL_MB_hub = 0x18 };
FW_H
,FW_L
– версия прошивки устройства. Если устройство не поддерживает передачу этой информации, то будет передано0x00
для обоих значений.deviceID
– ID (серийный номер) устройства. Размер 2 байта.dataFlag
– флаги передачи дополнительных данных. Битовое поле размером 1 байт, может содержать следующие биты:
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
name | SavedDataFlag | – | – | – | MemoryInfoFlag | DeviceStateFlag | LogConfigFlag | TimeStampFlag |
TimeStampFlag
– (маска 0x01) – если бит установлен, то в дополнительных данных передается метка времениtimestamp
.
LogConfigFlag
– (маска 0x02) – если бит установлен, то в дополнительных данных передается информация об установленном интервале опросаlogConfig
DeviceStateFlag
– (маска 0x04) – если бит установлен, то в дополнительных данных передаетсяdeviceState
MemoryInfoFlag
– (маска 0x08) – если бит установлен, то в дополнительных данных передаетсяmemoryInfo
– информация о состоянии памяти устройстваSavedDataFlag
– (маска 0x80) – если бит установлен, то данный пакет содержит данные, сохраненные в памяти – данные, которые не удалось передать в установленное время ранее. Внимание: флагSavedDataFlag
влияет на содержание поляtimestamp
!
Результаты измерений
Блок Результаты измерений передается всегда. Размер не фиксирован, минимальный размер 5 байт, после которых располагается массив размером dataSize
. Блок содержит следующие элементы:
sensorType
– Тип сенсора, подключенного к устройству. Может содержать следующие значения:
enum SensorType_t { NoSensors = 0, //сенсор не подключен KosaSensorType = 1, //Подключена термокоса UndefSensorType = 0xFF //Подключен неизвестный сенсор };
sensorID
– Серийный номер сенсора. Размер 4 байта.dataSize
– Размер поляdata
в байтах. Размер 2 байта. Для типа устройства “термокоса” (sensorType == KosaSensorType
) одно значение температуры занимает 2 байта (тип данных int16_t). Таким образом размер массива (dataSize
) будет составлятьn*2
, гдеn
– количество датчиков на термокосе.data
– Данные (массив) с измерениями сенсора. Размер поля указан вdataSize
.
Дополнительные данные
Блок Дополнительные данные не обязателен, состоит из элементов, каждый из которых передается только при установке соответствующего бита в dataFlag
, иначе элемент пропускается. Блок может содержать следующие элементы:
timestamp
– данные с временной меткой. Размер 4 байта. Временная метка передается как в формате Unix Timestamp с разрядностью 1 сек, однако за начало исчисления принята дата01-01-2000 00:00:00
. Для перевода в Unix Timestamp к полученному значению необходимо прибавить946684800
. ЕслиdataFlag
содержит флагSavedDataFlag
(пакет содержит данные, сохраненные в памяти), то данный фрагмент будет содержать относительное время (отрицательное значение, в секундах): разница между временем замера и текущем временем, т.е. сколько секунд назад было произведено данное измерение. Например, если сохраненный замер был произведен 10 минут назад, то значение будет0xFFFFFDA8
(-600
сек). Для получения времени замера необходимо к текущему времени прибавить значение timestamp.logConfig
– интервал измерения, установленный в настройках устройства. Размер 2 байта. Первый – значение интервала; второй – единица измерения. Единицы измерения соответствуют следующим значениям:0
– секунды;1
– минуты;2
– часы;3
– дни;4
– месяца. Например, полученное значение{10,1}
соответствует интервалу 10 минут.deviceState
– состояние устройства. Размер 4 байта, содержит: уровень заряда батареи; rssi последней удачной передачи; результат выполнения измерения; температура процессора устройства.- Уровень заряда батареи передается в значениях от
1
до127
, где127
– максимальный уровень. Значение 0 сообщает об ошибке или при отключенной батарее. Старший бит (0x80
) устанавливается, если производится зарядка аккумуляторной батареи. - rssi последней удачной передачи передается, если возможно определить уровень сигнала.
- результат выполнения измерения может иметь следующие значения:
0
– успешное выполнение измерения;1
– измерение выполнено, однако имеются ошибки по некоторым данным; Ошибки:253
– ошибка подачи питания на датчики (короткое замыкание);254
– датчики не обнаружены (не подключены);255
– не удалось определить подключенные датчики. - температура процессора устройства – значение в целых градусах.
- Уровень заряда батареи передается в значениях от
memoryInfo
– состояние памяти устройства. Содержит 4 байта: первые два байта – общий объем памяти (в килобайтах); вторые два байта – объем памяти, занятый сохраненными измерениями (в килобайтах, с округлением в большую сторону).
Пример данных от устройства:
