Меню Закрыть

Структура данных TKL-Log

Устройства 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 байт, может содержать следующие биты:
bit76543210
nameSavedDataFlagMemoryInfoFlagDeviceStateFlagLogConfigFlagTimeStampFlag
    • 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. Уровень заряда батареи передается в значениях от 1 до 127, где 127 – максимальный уровень. Значение 0 сообщает об ошибке или при отключенной батарее. Старший бит (0x80) устанавливается, если производится зарядка аккумуляторной батареи.
    2. rssi последней удачной передачи передается, если возможно определить уровень сигнала.
    3. результат выполнения измерения может иметь следующие значения: 0 – успешное выполнение измерения; 1 – измерение выполнено, однако имеются ошибки по некоторым данным; Ошибки: 253 – ошибка подачи питания на датчики (короткое замыкание); 254 – датчики не обнаружены (не подключены); 255 – не удалось определить подключенные датчики.
    4. температура процессора устройства – значение в целых градусах.
  • memoryInfo – состояние памяти устройства. Содержит 4 байта: первые два байта – общий объем памяти (в килобайтах); вторые два байта – объем памяти, занятый сохраненными измерениями (в килобайтах, с округлением в большую сторону).

Пример данных от устройства: