Протокол Water5
Протокол предназначен для однонаправленной передачи данных от удаленных устройств - расходомеров, которые в общем виде выполняют измерение расхода какого-либо параметра(воды, электроэнергии, тепла) путем подсчета количества импульсов.
Различают одно- и двух- канальную версии протокола.
Также, в зависимости от максимальной частоты следования импульсов, для различных устройств, существуют различные версии протокола, в которых выполняется деление количества подсчитанных импульсов на константу (10, 100) перед отправкой регулярного сообщения.
Протокол подразумевает отправку нескольких видов сообщений длиной 8 байт. Информация о типе сообщения содержится в первом байте. Перечень всех типов сообщений указан в таблице.
Типы сообщений
1-й байт |
Тип сообщения |
0bxxxxxxx0 |
Регулярное (daily) |
0x73 |
Еженедельное (weekly) канал 1 |
0x7B |
Еженедельное (weekly) канал 2 |
0x61 |
Ежемесячное (info) канал 1 |
0x69 |
Ежемесячное (info) канал 2 |
0x81 |
Расширенное ежемесячное (extended info) канал 1 |
0x89 |
Расширенное ежемесячное (extended info) канал 2 |
0x51 |
Команда (Command) канал 1 |
0x59 |
Команда (Command) канал 2 |
0x41 |
"Холодный сброс" (Reset) канал 1 |
0x49 |
"Холодный сброс" (Reset) канал 2 |
0x71 |
Еженедельное (weekly) Ранняя версия |
0x91 |
Ежечасное (hourly) канал 1 |
0x99 |
Ежечасное (hourly) канал 2 |
0xA1 |
Парное (pair) канал 1 |
0xA9 |
Парное (pair) канал 2 |
0xB1, 0xB3 (0xB2 для ограниченной партии) |
Архив (archive) канал 1 |
0xB5, 0xB7 |
Архив (archive) канал 2 |
0xEE01 |
Отправка серийного номера прибора(serial) |
Регулярное сообщение (daily)
Cодержит младшие 15-бит счетчика импульсов а также значения почасового расхода за прошедший интервал времени 24 часа.
Модем выполняет подсчет импульсов выполняя инкремент специального регистра - "счетчика" (counter). Разрядность данного регистра - 32 бит. В регулярном сообщении отправляется младшие 15 бит счетчика. В зависимости от реализации модема, значение счетчика предварительно делится на константу (коэффициент деления числа импульсов), значение которой обычно выбирается из ряда 1, 10, 100. Величину данной константы можно определить из параметра DIV, передаваемого в пакетах "Reset" и "Extended Info".
1-й байт:
MSB |
1-й байт |
LSB |
|||||
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
0 |
Младшие 7 бит счетчика |
|||||||
|
|
|
|
|
|
|
|
2-й байт:
MSB |
|
|
|
|
|
|
LSB |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
Старшие 8 бит счетчика |
3-й - 8-й байты:
MSB |
8-й байт |
LSB |
MSB |
7-й байт |
LSB |
MSB |
6-й байт |
LSB |
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
||||||||||||||||||||||||||||||
b1 |
b0 |
b1 |
b0 |
b1 |
b0 |
||||||||||||||||||||||||||||||||||||||||||
Почасовка - 1 час |
Почасовка - 2 часа |
. . . |
Почасовка - 24 часа |
Почасовый расход представляется в виде 2-битного представления "вклада" расхода за каждый конкретный час в общий расход за 24 часа:
b1 |
b0 |
Часовой расход |
0 |
0 |
Отсутствие расхода |
0 |
1 |
0.1 - 33.3% макс. часового расхода |
1 |
0 |
33.4 - 66.6% макс. часового расхода |
1 |
1 |
66.7 - 100% макс. часового расхода |
Регулярное сообщение отправляется каждые 24 часа, начиная с момента калибровки модема. Для двухканальных устройств выполняется поочередная отправка регулярных сообщений для каждого канала. Номер канала определяется четностью итератора сообщения:
Нечетный итератор |
Четный итератор |
Канал 1 |
Канал 2 |
На устройстве "Тиффани" контакты имеют цветовое обозначение для удобства подключения счетчиков горячей и холодной воды. При этом контакты для подключения счетчика ГВС соответствуют каналу 1 (нечетный итератор), а контакты для подключения ХВС соответствуют каналу 2 (четный итератор).
Еженедельное сообщение (weekly)
Содержит младшие 27-бит счетчика импульсов, значения подневного расхода за прошедший интервал времени 7 суток а также напряжение батарейки. В модемах TIFFANY и DIN значение счетчика импульсов предварительно делится на параметр DIV.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
0 |
1 |
1 |
1 |
ch |
0 |
1(0) |
1 |
Код типа сообщения |
|||||||
0x73 |
Еженедельное (weekly) канал 1 |
0x7B |
Еженедельное (weekly) канал 2 |
0x71 |
Еженедельное (weekly) Ранняя версия |
2-й - 4-й байты:
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
|||||||||||||||
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Младшие 24 бит счетчика |
|||||||||||||||||||||||
5-й - 7-й байты:
MSB |
7-й байт |
LSB |
MSB |
6-й байт |
LSB |
MSB |
5-й байт |
LSB |
|||||||||||||||
b2 |
b1 |
b0 |
b2 |
b1 |
b0 |
b2 |
b1 |
b0 |
b26 |
b25 |
b24 |
||||||||||||
Подневка - 1 сутки |
Подневка - 2 суток |
... |
Подневка - 7 суток |
Старшие 3 бита счетчика |
|||||||||||||||||||
Подневный расход представляется в виде 3-битного представления "вклада" расхода за каждые конкретные сутки в общий расход за неделю:
b2 |
b1 |
b0 |
Суточный расход |
0 |
0 |
0 |
0.1 - 12.5% макс. суточного расхода |
0 |
0 |
1 |
12.6 - 25.0% макс. суточного расхода |
0 |
1 |
0 |
25.1 - 37.5% макс. суточного расхода |
0 |
1 |
1 |
37.6 - 50.0% макс. суточного расхода |
1 |
0 |
0 |
50.1 - 62.5% макс. суточного расхода |
1 |
0 |
1 |
62.3 - 75.0% макс. суточного расхода |
1 |
1 |
0 |
75.1 - 87.5% макс. суточного расхода |
1 |
1 |
1 |
87.6 - 100% макс. суточного расхода |
8-й байт:
MSB |
8-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Напряжение батарейки |
Напряжение батарейки представляется в следующем формате:
Старший бит = 1, если U ≥ 3В
Младшие 7 бит - десятые доли вольта
Формула перевода данного поля(D) в вольты: U = 2 + (D>>7) + (D&0x7F)/100
Измерение напряжения батарейки выполняется в момент отправки сообщения, когда наблюдается наибольшая "просадка" данного напряжения.
Еженедельное сообщение отправляется каждые 7 суток, начиная с момента калибровки модема. Для двухканальных устройств выполняется поочередная отправка сообщений для каждого канала.
В первых версиях водомеров Стриж Аква выполнялось деление счетчика на 10 перед отправкой еженедельного сообщения. Такие сообщения содержат в первом байте код 0x71.
Ежемесячное сообщение (info)
Содержит полное значение счетчика (32 бита), общее количество отправленных сообщений за все время работы модема, а также уровень передачи радиосигнала и максимально зафиксированный расход.
В модемах TIFFANY и DIN значение счетчика импульсов предварительно делится на параметр DIV.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
0 |
1 |
1 |
0 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0x61 |
Ежемесячное (info) канал 1 |
0x69 |
Ежемесячное (info) канал 2 |
2-й - 5-й байты:
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
||||||||||||||||||||
b31 |
b30 |
b29 |
b28 |
b27 |
b26 |
b25 |
b24 |
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
полное значение 32-битного счетчика импульсов |
6-й - 7-й байты:
MSB |
7-й байт |
LSB |
MSB |
6-й байт |
LSB |
||||||||||
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Кол-во отправленных сообщений |
8-й байт:
MSB |
8-й байт |
LSB |
|||||
b1 |
b0 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
PowLevel |
Макс. расход |
Максимальный расход - максимально зафиксированное с момента калибровки модема кол-во импульсов за одну минуту.
PowLevel - уровень мощности радиопередатчика модема, с которым отправляются сообщения.
b1 |
b0 |
Уровень сигнала |
0 |
0 |
-9dB |
0 |
1 |
-6dB |
1 |
0 |
-3dB |
1 |
1 |
Макс. мощность |
Ежемесячное сообщение отправляется каждые 30 суток, начиная с момента калибровки модема, а также 10 раз с интервалом 1 мин после ввода любой команды за исключением начальной калибровки модема. Для двухканальных устройств выполняется поочередная отправка сообщений для каждого канала.
Вместо каждого шестого сообщения(пары сообщений для двухканальных устройств) отправляется расширенное ежемесячное сообщение.
Расширенное ежемесячное сообщение (extended info)
Содержит информацию о версии аппаратного и программного обеспечения, температуру внутри устройства, напряжение батарейки, уровень выходного радиосигнала и максимальный зафиксированный расход.
Отправляется вместо каждого шестого ежемесячного сообщения.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
1 |
0 |
0 |
0 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0x81 |
Расширенное ежемесячное (extended info) канал 1 |
0x89 |
Расширенное ежемесячное (extended info) канал 2 |
2-й - 4-й байты:
MSB |
2-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
4-й байт |
LSB |
|||||||||||||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
HARDWARE_REV |
DIV |
SOFTWARE_REV |
CRC строки __TIME__(время компиляции) |
||||||||||||||||||||
5-й байт:
MSB |
5-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Температура модема |
|||||||
6-й байт:
MSB |
6-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Напряжение батарейки |
|||||||
7-й байт:
MSB |
7-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
PowLevel |
|||||||
8-й байт:
MSB |
8-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Макс. расход |
|||||||
DIV - Десятичный логарифм коэффициента деления числа импульсов.
"01" - коэффициент деления равен 1
"10" или "00" - коэффициент деления равен 10 ("00" - данное значение передается в счетчиках Аква и Нептун, при этом коэффициент деления в этих счетчиках равен 10)
"11" - коэффициент деления равен 100
Сообщение о вводе команды (command)
Содержит полное значение счетчика (32 бита), номер введенной команды, температуру и напряжение батарейки модема.
В модемах TIFFANY и DIN значение счетчика импульсов предварительно делится на параметр DIV.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
0 |
1 |
0 |
1 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0x51 |
Команда (Command) канал 1 |
0x59 |
Команда (Command) канал 2 |
2-й - 5-й байты:
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
||||||||||||||||||||
b31 |
b30 |
b29 |
b28 |
b27 |
b26 |
b25 |
b24 |
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
полное значение 32-битного счетчика импульсов |
|||||||||||||||||||||||||||||||
6-й байт:
MSB |
6-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Код команды |
|||||||
7-й байт:
MSB |
7-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Температура модема |
|||||||
8-й байт:
MSB |
8-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Напряжение батарейки |
|||||||
Данное сообщение отправляется 1 раз при вводе в модем команды, путем поднесения к модему магнита (нажатия на кнопку для модемов с кнопкой ). Номер команды определяется количеством миганий светодиода до момента удаления магнита от модема (отпускания кнопки).
Для двухканальных устройств выполняется поочередная отправка сообщений для каждого канала.
Первая введенная команда после прошивки модема идентифицируется как команда начальной калибровки и отправляется с кодом команды 33 (0x21).
Команды 40(0x28) и 41(0x29) - используются в версии BIGTIFFANY с дискретным контролем (версия ПО 48). Означают замыкание контактов и размыкание соответственно.
Ежечасное сообщение (Hourly)
Опциональные версии прошивок содержат ежечасную отправку показаний. В этом случае, помимо стандартного набора посылок отправляются также сообщения данного типа.
Данное сообщение отправляется 24 раза за сутки. Отправка ежедневного сообщения не выполняется для устройств отправляющих ежечасные пакеты..
В модемах TIFFANY и DIN значение счетчика импульсов предварительно делится на параметр DIV.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
1 |
0 |
0 |
1 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0x91 |
Ежечасное (hourly) канал 1 |
||||||
0x99 |
Ежечасное (hourly) канал 2 |
||||||
2-й - 5-й байты:
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
||||||||||||||||||||
b31 |
b30 |
b29 |
b28 |
b27 |
b26 |
b25 |
b24 |
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
полное значение 32-битного счетчика импульсов |
|||||||||||||||||||||||||||||||
6-й - 8-й байты: зарезервированы, содержат значение 0xAA
Парное сообщение (pair)
Данное сообщение отправляется каждые два часа и содержит показания на момент отправки, а также разницу между текущими показаниями и показаниями час назад.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
1 |
0 |
1 |
0 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0xA1 |
Парное(pair) канал 1 |
||||||
0xA9 |
Парное(pair) канал 2 |
||||||
2-й - 5-й байты:
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
||||||||||||||||||||
b31 |
b30 |
b29 |
b28 |
b27 |
b26 |
b25 |
b24 |
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
полное значение 32-битного счетчика импульсов |
|||||||||||||||||||||||||||||||
6-й - 7-й байты:
MSB |
6-й байт |
LSB |
MSB |
7-й байт |
LSB |
||||||||||
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
16-битное значение разницы между текущим значением счетчика импульсов и его значением час назад |
8-й байт:
MSB |
8-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Температура модема |
Архивное сообщение (Archive)
Данное сообщение отправляется каждые два часа и содержит показания на момент отправки, а также разницу между текущими показаниями и показаниями час назад.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
1 |
0 |
1 |
0 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0xB1, 0xB5(канал 2) |
Архив(Archive) 0-15 день |
||||||
0xB3 (0xB2), 0xB7(канал 2) |
Архив(Archive) 16-31 день |
2-й - 5-й байты:
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
||||||||||||||||||||
b31 |
b30 |
b29 |
b28 |
b27 |
b26 |
b25 |
b24 |
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
полное значение 32-битного счетчика импульсов на конец 2-часового интервала времени |
6-й - 7-й байты:
MSB |
6-й байт |
LSB |
MSB |
7-й байт |
LSB |
||||||||||
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
16-битное значение разницы между значением счетчика импульсов на конец интервала и его значением час назад |
8-й байт:
MSB |
8-й байт |
LSB |
|||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
Индекс архива(младшие 8 бит) |
Индекс архива имеет значения 0 - 383. Старший бит индекса равен 0 если номер команды 0xB1(0xB5 для второго канала) и 1, если 0xB3 (0xB2 для небольшой серии тиффани с версией hardware 3.0 и software 48.0) (0xB7 для второго канала).
Весь архив отсылается 9-й командой (поднесением магнита к модему до 9-ти морганий индикатора) и состоит из 384 archive-пакетов, отсылаемых друг за другом в течении 40 минут. Индекс архива означает смещение во времени архивной записи относительно момента начала отправки архива (можно принимать время приема пакета). Дискретность смещения - 2 часа. Например, индекс 0 означает, что в пакете содержится значение счетчика на текущий момент времени и разница, позволяющая определить показание на момент времени минус один час от текущего. Аналогично, индекс 383 означает, что в пакете содержится значение счетчика на момент времени минус 383*2 часов от текущего и разница, позволяющая определить показание на момент времени минус (383*2 + 1) часов от текущего. Двухканальная версия модема регистрирует и отсылает архив на вдвое меньшую глубину - 16 дней. Количество отправленных пакетов по каждому каналу равно 192.
Archive-пакеты отсылаются начиная с самых недавних данных, заканчивая самыми старыми.
Если модем не успел накопить данные за весь архивный период, то отправлена будет только та часть, которая накоплена.
Остановить отправку архива можно 7-й командой
Сообщение "Холодный сброс" (Reset)
Данное сообщение отправляется при первом включении модема либо сбросе программы. Для двухканальных устройств выполняется поочередная отправка сообщений для каждого канала.
1-й байт:
MSB |
1-й байт |
LSB |
|||||
0 |
1 |
0 |
0 |
ch |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0x41 |
"Холодный сброс" (Reset) канал 1 |
||||||
0x49 |
"Холодный сброс" (Reset) канал 2 |
2-й - 5-й байты:
MSB |
5-й байт |
LSB |
MSB |
4-й байт |
LSB |
MSB |
3-й байт |
LSB |
MSB |
2-й байт |
LSB |
||||||||||||||||||||
b31 |
b30 |
b29 |
b28 |
b27 |
b26 |
b25 |
b24 |
b23 |
b22 |
b21 |
b20 |
b19 |
b18 |
b17 |
b16 |
b15 |
b14 |
b13 |
b12 |
b11 |
b10 |
b9 |
b8 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
полное значение 32-битного счетчика импульсов |
|||||||||||||||||||||||||||||||
6-й - 8-й байты:
MSB |
6-й байт |
LSB |
MSB |
7-й байт |
LSB |
MSB |
8-й байт |
LSB |
|||||||||||||||
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
HARDWARE_REV |
DIV |
SOFTWARE_REV |
CRC строки __TIME__(время компиляции) |
||||||||||||||||||||
DIV - см. Extended Info сообщение
Сообщение с серийным номером прибора (Serial)
Данное сообщение предназначено для отправки серийного номера прибора с целью привязки данного номера к ID радиомодема на верхнем уровне.
Достаточно отправлять эту информацию один раз при производстве прибора либо при его конфигурировании если при этом происходит присвоение серийного номера. Однако для случаев потери пакетов с серийным номером при первоначальной отправке, необходимо периодически повторять отправку данного пакета(не реже 1 раза в месяц), а также выполнять отправку пакета при нажатии на кнопку или посредством какого-либо другого органа управления.
Особенность пакета данного типа - его длина(в отличие от всех других типов пакетов протокола) равна 7 байт.
1-й и 2-й байты:
MSB |
1-й байт |
LSB |
|||||
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
Код типа сообщения |
|||||||
MSB |
2-й байт |
LSB |
|||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Код типа сообщения |
|||||||
0xEE01 |
Отправка серийного номера |
3-й - 6-й байты:
Серийный номер прибора в двоично-десятичном формате.
Пример пакета "serial", содержащего серийный номер 1234567890: 0xEE011234567890