Формат данных для MQTT: различия между версиями

Материал из EWiki
Перейти к навигации Перейти к поиску
Новая страница: « === Формат Payload === ==== Бинарный формат (например, struct) ==== '''Формат: Фиксированная структура байтов.''' * 2 байта - битовый описатель. 0-2 версия 3-5 - формат данных (00 - binary, 01 - json) для данного пакета 00 6 бит - наличие времени 7-10 бит – int/float/string (null/bool(byte)/float64/(u)int8/(u)int1...»
 
Нет описания правки
Строка 1: Строка 1:
=== Фиксированный заголовок (2 байта) ===
Биты:


=== Формат Payload ===
0-2 - версия


==== Бинарный формат (например, struct) ====
3-5 - формат данных (00 - binary, 01 - json)
'''Формат: Фиксированная структура байтов.'''


* 2 байта - битовый описатель.
6-9 - тип данных
{| class="wikitable"
|+
!ID
!Тип
!Реализация
|-
|0
|null
|
|-
|1
|bool
|byte
|-
|2
|float64
|
|-
|3
|int8
|
|-
|4
|uint8
|
|-
|5
|int16
|
|-
|6
|uint16
|
|-
|7
|int32
|
|-
|8
|uint32
|
|-
|9
|int64
|
|-
|10
|uint64
|
|-
|11
|string
|utf-8
|-
|12
|blob
|binary
|}


0-2 версия


3-5 - формат данных (00 - binary, 01 - json) для данного пакета 00
10 - массив (не поддерживается для типов данных null и string)


6 бит - наличие времени
11-12 - тип метрики  (00 - счетчик (только растет), 01 - замер (может увеличиваться и уменьшаться))


7-10 бит – int/float/string
13 - наличие метки времени


(null/bool(byte)/float64/(u)int8/(u)int16/(u)int32/(u)int64/string(utf-8)/blob ) LE
14-15 - резерв


11 - array true/false (нельзя null, string)
используется little endian
 
счетчик. замер
 
* Пример: 8 байт на время ms (uint64) - может отсутсвовать
*
* Переменная часть для значения (данные).


'''JSON формат'''
'''JSON формат'''

Версия от 07:47, 28 марта 2025

Фиксированный заголовок (2 байта)

Биты:

0-2 - версия

3-5 - формат данных (00 - binary, 01 - json)

6-9 - тип данных

ID Тип Реализация
0 null
1 bool byte
2 float64
3 int8
4 uint8
5 int16
6 uint16
7 int32
8 uint32
9 int64
10 uint64
11 string utf-8
12 blob binary


10 - массив (не поддерживается для типов данных null и string)

11-12 - тип метрики (00 - счетчик (только растет), 01 - замер (может увеличиваться и уменьшаться))

13 - наличие метки времени

14-15 - резерв

используется little endian

JSON формат

  • 2 байта - битовый описатель (01 - json)
  • данные Формат: {"t":<время>, "v":<значение>, "d":<описатель>}

Пример: {"t":"2025-03-28T05:29:24.413Z", "v":50.5, }

Для сложного значения: {"t":1617234567890, "v":[10,20,30], "d":"disk_iops"}