0x01 Counter1 - Суточный архив (устаревший)
Пакет содержит показания счётчика за сутки с шагом 1 час.
Timestamp Initial value FLAGS DIFF DATA
4B 4B 2B bit array
| Поле | Размер, байт | Значение |
|---|---|---|
| Timestamp | 4 | uint32_t (значение + 946684800 = UNIX-время) |
| Init value | 4 | Значение в начале интервала |
| FLAGS | 2 | См. ниже |
| DIFF DATA | переменный | Дифференциальные данные |
FLAGS
| Бит | Флаг | Описание |
|---|---|---|
| 0 … 4 | N | Биты дифференциальных данных ([0 … 31] + 1) |
| 5 | DIV10 | / 10 DIFF |
| 6 | RLE | BIT RLE КОМПРЕССИЯ |
| 7 | SIGNED | DIFF ЗНАКОВЫЙ |
| 8 … 13 | REC_NUM | Количество записей (до 64) |
| 14 | RESOL | Индивидуальный бит |
| 15 | ALL_DIFF_ZERO | Счетчик не изменился, все DIFF=0. В этом случае блок DIFF_DATA отсутствует |
RESOL=1
В поле Differential data данные переменной длины как битовая карта с использованием кодирования длин серий (RLE). В этом случае — нули. В пакете может быть до четырех блоков данных. Индивидуально определяемый блок (если бит RESOL установлен во флагах) используется для изменения настроек устройства:
| Один блок | |||||
|---|---|---|---|---|---|
| Бит | Обозначение | Описание | DIFF BLOCK | DIFF BLOCK | ... |
| 0 | Флаг переменной длины | если 0: как в предыдущем блоке (если это первый блок, то N) если 1: задается в следующих 5 битах | |||
| 1…5 | Количество бит на дифференциальные данные | Присутствует, если бит 0 = 1 | |||
| ... | следует либо блок повторяющихся нулей, либо блок разности (см. ниже) | ||||
RLE=1
Блок повторяющихся нулей (установлен бит RLE во флагах), который служит для уменьшения/сжатия объема данных:
| Бит | Обозначение | Описание |
|---|---|---|
| 0 | RLE | всегда 1 |
| 1…5 | значение повтора | количество повторов с diff=0, ([0 … 31] + 1) |
После блока повторяющихся нулей флаг переменной длины НЕ добавляется, используется значение, которое было до блока переменной длины.
Блок разности, если установлен бит RLE во флагах:
| Бит | Обозначение | Описание |
|---|---|---|
| 0 | RLE | Всегда 0 |
| N бит | diff value | разность с предыдущим значением, со знаком если установлен флаг SIGNED; |
| нужно умножить на 10, если установлен флаг DIV10 |
RLE=0
Блок разности, если бит RLE во флагах НЕ установлен:
| Бит | Обозначение | Описание |
|---|---|---|
| N бит | diff value | разность с предыдущим значением, со знаком если установлен флаг SIGNED; |
| нужно умножить на 10, если установлен флаг DIV10 |
Playground
Результат появится здесь...