CoderTools

Кодек Matter Protocol

Декодирование и кодирование данных Matter TLV для разработки умного дома

🔒 100% Локальная обработкаВведенные вами данные обрабатываются полностью в браузере и не отправляются на сервер.

Вставьте данные TLV, захваченные с устройств Matter или анализаторов протоколов

Нажмите для загрузки примера

Результат декодирования

Введите данные TLV и нажмите Декодировать

Типы элементов TLV

Имя типа Код типа Размер значения
Знаковое целое0x00-0x031, 2, 4, 8 bytes
Беззнаковое целое0x04-0x071, 2, 4, 8 bytes
Булево0x08-0x090 bytes
Float0x0A4 bytes
Double0x0B8 bytes
Строка UTF-80x0C-0x0F1/2/4/8-byte length + data
Байтовая строка0x10-0x131/2/4/8-byte length + data
Null0x140 bytes
Структура0x15End-of-Container (0x18)
Массив0x16End-of-Container (0x18)
Список0x17End-of-Container (0x18)
Конец контейнера0x180 bytes

Техническая справка Matter Protocol

Руководство по использованию схемы C Struct

Режим схемы C Struct позволяет определять структуры данных, используя знакомый синтаксис C/C++. Анализатор извлекает имена полей, типы и TLV-теги из ваших определений структур, а затем генерирует визуальную форму для ввода данных и кодирования TLV.

Поддерживаемый синтаксис

// Supported syntax forms:
typedef struct { ... } StructName;
typedef struct Tag { ... } StructName;
struct StructName { ... };

Поддерживаемые типы данных

Категория Типы C/C++ Тип TLV
Знаковое целое int8_t, int16_t, int32_t, int64_t, char, short, int, long int (1-8B)
Беззнаковое целое uint8_t, uint16_t, uint32_t, uint64_t, unsigned char/short/int/long, size_t uint (1-8B)
Булево bool, _Bool bool
С плавающей точкой float, double float/double
Строка char[], char[N], char* UTF-8 string
Массив байтов uint8_t[], uint8_t[N], uint8_t* byte string

Методы аннотации тегов

Используйте комментарии для указания контекстных TLV-тегов для каждого поля. Если тег не указан, теги автоматически назначаются начиная с 0.

uint8_t field1;     // tag 0
uint16_t field2;    // tag: 1
uint32_t field3;    /* tag 2 */
@tag(3) uint64_t field4;

Поддержка массивов

Поддерживаются массивы фиксированного размера (например, uint32_t data[4]) и массивы переменного размера (например, uint8_t data[]). Форма предоставит кнопку «Добавить элемент» для динамического управления элементами массива.

uint32_t subjects[4];  // Fixed-size array (max 4 items)
uint8_t data[];        // Variable-size array

Текущие ограничения

  • Директивы препроцессора (#define, #ifdef) не поддерживаются
  • Псевдонимы typedef (например, typedef uint8_t BYTE) не поддерживаются
  • Перечисления, объединения и битовые поля не поддерживаются
  • Редактирование вложенных структур ограничено одним уровнем
  • Анонимные структуры не поддерживаются

Что такое Matter

Matter — это единый стандарт подключения устройств умного дома, разработанный Connectivity Standards Alliance (CSA), первоначально известный как Project CHIP. Стандарт обеспечивает совместимость между экосистемами Apple HomeKit, Google Home, Amazon Alexa и Samsung SmartThings. Устройства Matter взаимодействуют по Wi-Fi, Thread и Ethernet с использованием транспортных протоколов на основе IPv6. Matter 1.0 был выпущен в октябре 2022 года.

Формат кодирования Matter TLV

Matter использует компактную схему двоичного кодирования TLV (Tag-Length-Value) для сериализации структурированных данных. Формат широко применяется в стеке протоколов, включая сообщения модели взаимодействия, данные аттестации устройств и payload-данные ввода в эксплуатацию.

Структура управляющего байта

Управляющий байт — первый байт каждого элемента TLV. Нижние 5 бит определяют тип элемента, верхние 3 бита указывают форму тега.

Битовое поле Описание
Bits [4:0]Тип элемента (знаковое/беззнаковое целое, булево, число с плавающей точкой, строка UTF-8, байтовая строка, null, структура, массив, список, конец контейнера)
Bits [7:5]Форма тега: 000=Анонимный, 001=Контекстно-специфичный (1-байтовый тег), 010-110=Профильные теги, 111=Полностью квалифицированный

Типы элементов TLV

Поле типа элемента определяет кодирование части значения. Целочисленные типы используют 1, 2, 4 или 8 байтов. Булевы значения кодируются непосредственно в поле типа. Строки и байтовые массивы содержат префикс длины, за которым следуют данные.

Формат payload подключения

При вводе устройства Matter в эксплуатацию информация настройки кодируется в компактный payload, встроенный в QR-код или представленный в виде числового кода ручного сопряжения. Payload QR-кода начинается с префикса «MT:», за которым следует двоичная строка в кодировке Base38.

Кодирование Base38

Payload-данные QR-кодов Matter используют набор символов Base38 (0-9, A-Z, -.) для эффективного буквенно-цифрового представления. Каждые 3 байта кодируются в 5 символов Base38.

Код ручного сопряжения

11-значный код ручного сопряжения предоставляет альтернативный способ при отсутствии возможности сканирования QR-кода. Он кодирует дискриминатор, код настройки и контрольную цифру Verhoeff. 21-значная версия дополнительно включает ID производителя и ID продукта.

Контрольная цифра Verhoeff

Код ручного сопряжения использует алгоритм Verhoeff для обнаружения ошибок. Этот алгоритм обнаруживает все однозначные ошибки и большинство ошибок смежной транспозиции.

Сценарии использования в разработке

  • Отладка payload-данных TLV Matter, захваченных при взаимодействии устройств
  • Проверка сообщений запросов и ответов модели взаимодействия
  • Верификация payload-данных ввода в эксплуатацию, встроенных в QR-коды
  • Валидация структур TLV сертификатов аттестации устройств
  • Создание тестовых payload-данных для тестирования соответствия протоколу Matter

Ссылки на спецификации

Спецификация Matter поддерживается Connectivity Standards Alliance (CSA). Формат кодирования TLV определён в Приложении A основной спецификации. Кодирование полезной нагрузки onboarding описано в Разделе 5.1.

Быстрое меню

Нет недавних инструментов