Кодек Matter Protocol
Декодирование и кодирование данных Matter TLV для разработки умного дома
Вставьте данные TLV, захваченные с устройств Matter или анализаторов протоколов
Нажмите для загрузки примера
Результат декодирования
Введите данные TLV и нажмите Декодировать
Просмотр байтов
Определите элементы TLV в нотации JSON с аннотациями типов
Нажмите для загрузки примера кодирования
Определите структуру данных с помощью синтаксиса C/C++. Используйте комментарии // tag N для указания TLV-тегов.
Результат анализа
Заполните значения полей
Результат кодирования
Введите JSON и нажмите Кодировать
Просмотр байтов
Статистика кодирования
Введите строку QR-кода Matter (MT:...) или код ручного сопряжения (11/21 цифр)
Нажмите для загрузки примера
Результат анализа информации подключения
Введите строку QR-кода или код сопряжения для анализа
Основная информация
Диапазон: 1-99999998. Недопустимые: 0, 11111111, 22222222 и т.д.
Поток ввода в эксплуатацию
Способы обнаружения
Формат вывода
Результат генерации
Заполните параметры и нажмите Сгенерировать
Типы элементов TLV
| Имя типа | Код типа | Размер значения |
|---|---|---|
| Знаковое целое | 0x00-0x03 | 1, 2, 4, 8 bytes |
| Беззнаковое целое | 0x04-0x07 | 1, 2, 4, 8 bytes |
| Булево | 0x08-0x09 | 0 bytes |
| Float | 0x0A | 4 bytes |
| Double | 0x0B | 8 bytes |
| Строка UTF-8 | 0x0C-0x0F | 1/2/4/8-byte length + data |
| Байтовая строка | 0x10-0x13 | 1/2/4/8-byte length + data |
| Null | 0x14 | 0 bytes |
| Структура | 0x15 | End-of-Container (0x18) |
| Массив | 0x16 | End-of-Container (0x18) |
| Список | 0x17 | End-of-Container (0x18) |
| Конец контейнера | 0x18 | 0 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.
- Основная спецификация Matter - Скачать с CSA
- Репозиторий с открытым кодом - github.com/project-chip/connectedhomeip
- Документация SDK - project-chip.github.io/connectedhomeip-doc
- Руководство разработчика Matter - handbook.buildwithmatter.com
Связанные инструменты
CBOR Кодек
Кодирование и декодирование бинарного формата CBOR с конвертацией JSON, hex-просмотром и семантическими тегами для IoT разработки
Protocol Buffers Инструмент
Онлайн-кодировщик/декодер Protocol Buffers. Парсинг .proto схем, кодирование JSON в бинарный формат или декодирование бинарного в JSON
MQTT Кодек
Кодирование и декодирование пакетов протокола MQTT с детальным анализом полей, Hex-просмотрщиком и конструктором пакетов
Инструмент подписи ECDSA
Создание пар ключей ECDSA, подпись сообщений и проверка подписей с кривыми secp256k1, P-256, P-384, P-521