Table of Contents
Описание работы модулей для счетчиков газа Elster, Metrix, Samgaz
LoRaWan sensor commands
Начало работы
Для корректной инсталляции модуля в NS, необходимо знать заводские параметры модуля (Уточнить в спецификации):
- Способ активации модуля в сети LoraWAN - ABP (Activation by personalisation) или OTAA (Over the Air Activation)
- Ключи (APPSKEY[16], NETSKEY[16] - ABP) или (APPKEY[16] - OTAA).
Индикация
Индикация с помощью светодиода:
- Короткая вспышка светодиода (20 мс) индицирует нажатие,отпускание кнопки.
- Увеличение счетчика импульсов также сопровождается короткой (20 мс) вспышкой светодиода.
- Активация модуля в сети LoraWAN подтверждается серией из 7 вспышек светодиода.
Время, дата
Время модуля и сервера необходимо синхронизировать. В процессе работы необходимо корректировать время модуля при его расхождении с сервером. Допустимое отклонение не более 30 секунд
Время модуля передается в виде 4-х байтного счетчика. Это время в секундах, начиная с 2000 года. Время модуля необходимо синхронизировать с временем сервера. Установка времени может происходить при помощи 2 команд: SET_TIME и CORRECT_TIME. Команда SET_TIME предназначена для начальной установки времени и в случае корректировки более +/-128 секунд. При выполнении этой команды могут быть потеряны почасовые данные, если коррекция производиться назад. В дальнейшем сервер должен корректировать время модуля при его расхождении с временем сервера. Рекомендуемое допустимое отклонение времени не более 30 секунд, при его превышении проводится корректировка времени командой CORRECT_TIME.
Режим Активации
Активация происходит после того, как кнопка находится в “зажатом” состоянии 20 секунд. Это происходит при установке модуля в счетчик газа. Опрос датчика происходит постоянно. Режим АКТИВАЦИИ подтверждается светодиодной индикацией - 7 вспышек светодиода с периодом 50 мс. Под АКТИВАЦИЕЙ подразумевается то что модуль начнет пересылать кадры данных по радиотракту. До активации радиотракт выключен. В режиме АКТИВАЦИИ происходят события INSERT и ACTIVATE, передаются кадры NEW_EVENT с событиями - INSERT и ACTIVATE, в данных этих событий передается время события. Также командой GET_CURRENT передаются текущие данные счетчика импульсов. Если модуль снять со счетчика газа (кнопка отжата), то через 30 секунд модуль будет деактивирован. На сервер будет отправлен кадр NEW_EVENT с событиями - REMOVE и DEACTIVATE (в данных этих событий передается время события) и командой GET_CURRENT передаются текущие данные счетчика импульсов.
Данные потребления
После активации модуль будет регулярно пересылать данные потребления. По умолчанию модуль передает данные почасового потребления с интервалом около 4 часов + псевдослучайная составляющая в пределах от 0 до 17 минут. Периодичность отправки данных может быть изменена, но период не может быть меньше 10 минут и больше 36 часов. Можно задать тип передаваемых данных. Возможно передача текущих данных, почасовых, посуточных. Также возможна передача по часовых и суточных одновременно (в одном кадре). Для выбора типа передаваемых данных следует воспользоваться параметром 5 (Тип выдаваемых данных). Почасовые данные сохраняются в архиве, максимальная глубина архива 6 месяцев. Данные суточного потребления также сохраняются в архиве, максимальная глубина 2 года. Глубина архивов конфигурационно не меняется.
Элемент питания (Аккумуляторная батарея)
Один раз в сутки модуль измеряет параметры элемента питания. Измеряется напряжение батареи без нагрузки и напряжение батареи под нагрузкой резистора (150 Ом для модулей на WLE). Эти данные и вычисленное значение внутреннего сопротивления будет передаваться один раз за сутки. По результатам проверки батарейки возможен запуск процесса депассивации батарейки. В этом случае в журнал будет записано событие DEPASS_DONE.
Датчики магнитного поля
В модуле установлены два датчика магнитного поля. Первый датчик фиксирует потребление газа. В счетчике газа в одно из колец механизма установлен магнит. Таким образом модуль фиксирует количество оборотов этого кольца. Счетчик импульсов в модуле только наращивается, нет механизма для сброса счетчика импульсов. Наращивание счетчика импульсов сигнализируется короткой вспышкой светодиода (20 мс). Счетчик импульсов это беззнаковое 4-х байтовое число. При переполнении счетчика он начинает отсчет с “0”. При этом будет сформировано событие COUNTER_OVER и отправлен кадр NEW_EVENT с этим событием. Второй датчик используется для фиксации вредоносного воздействия магнитом на счетчик газа. Если это воздействие было продолжительностью более 20 сек, то на сервер будет отправлен кадр NEW_EVENT с уведомлением о магнитном воздействии MAGNIT_ON. После снятия воздействия магнита на сервер будет отправлен кадр NEW_EVENT о прекращении воздействия магнитного поля MAGNIT_OFF. При кратком воздействии магнитного поля (2-20 сек), на сервер будут отправлены текущие данные счетчика импульсов GET_CURRENT для HARD_TYPE 1,2 и GET_CURRENT_MUL для HARD_TYPE 12.
Организация хранения данных в модуле
CURRENT DATA
CURRENT DATA - Текущие данные счетчика импульсов. Данные хранятся в нескольких местах. При рестарте микроконтроллера производится попытка восстановления данных счетчика импульсов. Проверяется сохраненное значение в BACKUP-регистрах микроконтроллера. Если данные корректны, то они принимаются как данные счетчика импульсов. В противном случае происходит поиск последних сохраненных данных в памяти микроконтроллера. Запись текущих данных в BACKUP-регистр происходит при каждом приращении счетчика импульсов, т.е. в BACKUP-регистре всегда находится актуальное значение счетчика импульсов. Рестарт микроконтроллера не приводит к потере данных в BACKUP-регистрах. Значения счетчика импульсов записывается в память не чаще 90 секунд. Под хранение CURRENT_DATA выделено 2 страницы флеш-памяти - 2048*2=4096 байт.
Формат хранения CURRENT_DATA | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
CNT[4] | RES]* | CRC16[2] | CNT[4] | RES* | CRC16[2] |
HOURS_DATA
HOURS_DATA - почасовые данные счетчика импульсов. Данные записываются во флэш память микроконтроллера при смене часа по времени микроконтроллера. Под хранение архива почасовых данных отведено 24 страницы флэш памяти 2048*24 = 49152 байт. Почасовые данные за сутки занимают 256 байт. Общая глубина архива не более 6 месяцев.
Формат хранения HOURS_DATA | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |||
0 | Y | M | D | Hour_0 | CNT[4] | LRC | Y | M | D | Hour_1 | CNT[4] | LRC | ||||||
10 | Y | M | D | Hour_2 | CNT[4] | LRC | Y | M | D | Hour_3 | CNT[4] | LRC | ||||||
20 | Y | M | D | Hour_4 | CNT[4] | LRC | Y | M | D | Hour_5 | CNT[4] | LRC | ||||||
30 | Y | M | D | Hour_6 | CNT[4] | LRC | Y | M | D | Hour_7 | CNT[4] | LRC | ||||||
.. | .. | .. | .. | .. | .. | .. | .. | .. | ||||||||||
A0 | Y | M | D | Hour_20 | CNT[4] | LRC | Y | M | D | Hour_21 | CNT[4] | LRC | ||||||
B0 | Y | M | D | Hour_22 | CNT[4] | LRC | Y | M | D | Hour_23 | CNT[4] | LRC |
DAYS_DATA
DAYS_DATA - Данные суточного потребления. Данные записываются во флэш-память в “учетный час” суток. Учетный час можно задать произвольно в пределах 24 часов суток. По умолчанию “учетный час” равен 0 часов. Для хранения архивов суточных данных во флэш-памяти отведено 3 страницы - 2048*3=6144 байта.
Формат хранения DAYS_DATA | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
0 | Y | M | D_1 | CNT[4] | LRC | Y | M | D_2 | CNT[4] | LRC | ||||||
10 | Y | M | D_3 | CNT[4] | LRC | Y | M | D_4 | CNT[4] | LRC | ||||||
20 | Y | M | D_5 | CNT[4] | LRC | Y | M | D_6 | CNT[4] | LRC | ||||||
30 | Y | M | D_7 | CNT[4] | LRC | Y | M | D_8 | CNT[4] | LRC | ||||||
E0 | Y | M | D_29 | CNT[4] | LRC | Y | M | D_30 | CNT[4] | LRC | ||||||
F0 | Y | M | D_31 | CNT[4] | LRC |
Абсолютные данные. Команды, настройки
Устройство поддерживает режим работы с абсолютными данными. Этот режим устанавливается для того, чтобы из переданных устройством данных можно было легко получить текущие показания прибора учета. В этом режиме устройство использует другой набор команд для передачи данных о потреблении. Для установки начальных показаний прибора учета, необходимо использовать импульсный коэффициент - IPK, который является параметром прибора учета и обозначает объем ресурса на один импульс.
Для установки режима передачи абсолютных данных в модуль, необходимо передать импульсный коэффициент IPK и начальные показания прибора учета, выраженные с учетом импульсного коэффициента INITIAL_METER_DATA= INITIAL_CONSUMPTION/IPK. А также текущее значение счетчика импульсов. Значение счетчиков импульса можно получить в момент активации или инициировать передачу текущих данных с помощью слайдера, магнита, нажатии кнопки, установки разъема (замыкание тампера). При необходимости эти операции можно повторить.
Например, для газового модуля:
- IPK (импульсный коэффициент) = 100 литров на 1 импульс;
- Начальные показания INITIAL_CONSUMPTION = 12.5 м3;
- Текущее значение счетчика импульсов START_COUNTER = 0x5033.
При таких исходных данных необходимо установить INITIAL_METER_DATA в значение 12.5/0.1 = 125.
Установка параметров
Для установки параметров режима абсолютных данных используется команда SET_PARAMETERS = 0x03 c TYPE_PARAMETERS = 23.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | CMD SET_PARAMETERS = 0x03 | ||||
CMD_LENGTH = 10 | |||||||
TYPE_PARAMETERS = 23 | |||||||
INITIAL_METER_DATA[4] | |||||||
IPK[1] | |||||||
START_COUNTER[4] |
Пример:
hex dump: 030A170000007D6400005033 030A - SET_PARAMETERS = 0x03, len = 10 dec 17 - TYPE_PARAMETERS = 23 0000007D - INITIAL_METER_DATA = 0x0000007D = 125 dec 64 - IPK = 0x64 = 100 dec 00005033 - START_COUNTER = 0x5033 = 20531 dec
Режим передачи
Для включения режима передачи абсолютных данных используется команда SET_PARAMETERS = 0x03 c TYPE_PARAMETERS = 24.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | CMD SET_PARAMETERS = 0x03 | ||||
CMD_LENGTH = 2 | |||||||
TYPE_PARAMETERS = 24 | |||||||
ABS_DATA_EN=1 |
Пример:
hex dump: 03021801
Параметры TYPE_PARAMETERS = 23 и TYPE_PARAMETERS = 24 можно установить одним сообщением.
Пример:
hex dump: 030A170000007D640000503303021801+LRC
Выполнение команды подтверждается ответом hex dump: 0302170103021801
, что подтверждает успешную установку параметров. Так же после этого устройство начнет выдавать абсолютные данные прибора учета. Это означает, что вместо команд DATA_DAY и DATA_HOUR_DIFF, передаваемых периодически без запроса, будут передаваться команды ABS_DATA_DAY и ABS_HOUR_DIFF для модулей HARD_TYPE=1,2 и вместо команд DATA_DAY_MUL и DATA_HOUR_MUL будут выдаваться команды EX_ABS_DAY_MUL и EX_ABS_HOUR_MUL для модулей HARD_TYPE=12.
В сообщениях мы будем получать показания прибора учета с учетом импульсного коэффициента.
Например:
если мы получим значение поля METER_DATA = 0x80 = 128 dec, то это соответствует показаниям прибора учета - METER_CONSUMPTION = METER_DATA*IPK = 128*100=12,8m3
Реализация в устройстве
- INITIAL_CONSUMPTION - начальные показания прибора учета, на момент активации.
- IPK - импульсный коэффициент устройства, определяющий соответствие потребленного ресурса на 1 импульс.
- INITIAL_METER_DATA = INITIAL_CONSUMPTION/IPK
- START_COUNTER - показания счетчика импульсов в момент активации, из сообщения об активации
- CURRENT_COUNTER - текущие показания счетчиков импульсов в устройстве
- METER_CONSUMPTION - текущие показания прибора учета METER_CONSUMPTION = METER_DATA*IPK
Устройство передает в сообщения данные METER_DATA = INITIAL_METER_DATA + (CURRENT_COUNTER-START_COUNTER).
Например:
Cтартовые показания прибора учета INITIAL_CONSUMPTION = 41.1 м3(41100 дм3, IPK=100 (100 дм3 на один импульс), текущие показания счетчика импульсов CURRENT_COUNTER = 4580, стартовые показания счетчика импульсов START_COUNTER=5. В результате: METER_DATA = 41100/100 + (4580-5)=4986. В результате получаем текущие показания прибора учета: METER_CONSUMPTION = 4986*100 = 498600 дм3 = 498.6 м3.
События
Все события в модуле записываются в архив событий. Емкость архива - не менее 256 событий и не более 512 событий. При этом в журнал событий записывается время события, код события и номер последовательности LAST_EVENT. Номер события инкрементируется с каждой записью. Этот номер передается на сервер командой LAST_EVENTS , которая добавляется к каждому UPLINK кадру, передаваемому без запроса. Приоритета сообщений в архиве нет. События записываются по циклу. Архивы можно запросить, как самые последние, так и самые старые и начиная с определенного времени.
Событие | Код | Описание |
---|---|---|
MAGNIT_ON | 0x01 | Фиксация воздействия магнитного поля на время более 20 секунд |
MAGNIT_OFF | 0x02 | Снятие воздействия магнитного поля |
ACTIVATE | 0x03 | Произошла активация модуля |
DEACTIVATE | 0x04 | Деактивация модуля. Прекращение передачи кадров в эфир |
INSERT | 0x07 | Фиксация установки модуля в счетчик газа |
REMOVE | 0x08 | Фиксация снятия модуля со счетчика газа |
COUNTER_OVER | 0x09 | Произошло переполнение счетчика импульсов. Количество импульсов превысило 4294967295 |
SET_TIME | 0x0A | Фиксация события установки времени модуля |
DEPASS_DONE | 0x0E | Фиксация депассивации батарейки модуля |
Команды
HARD_TYPE=1,2 | HARD_TYPE=12 | ||
---|---|---|---|
UPLINK без запроса | |||
DATA_DAY = 0x20 | Данные счетчика импульсов датчика на учетный час. | DATA_DAY_MUL=0x16 | Данные счетчиков импульсов многоканального датчика на учетный час. |
DATA_HOUR_DIF = 0x40 | Почасовые данные счетчика импульсов датчика с выдачей опорного счетчика и накопления счетчика в последовательных часах. | DATA_HOUR_DIF_MUL=0x17 | Данные счетчиков импульсов многоканального датчика на учетный час. |
LAST_EVENTS = 0x60 | Последнее непрочитанное событие. | LAST_EVENTS = 0x60 | Последнее непрочитанное событие. |
GET_CURRENT=0x07 | Команда выдачи текущих показаний счетчика импульсов датчика. | GET_CURRENT_MUL=0x18 | Команда выдачи текущих показаний счетчика импульсов ногоканального датчика. |
ABS_HOUR_DIFF = 0xA0 | Почасовые данные прибора учета с выдачей импульсного коэффициента и опорного значения потребленного ресурса и накопления счетчика в последовательных часах. | EX_ABS_HOUR_MUL=0x1F-0x0A | Команда получения абсолютных данных в формате многоканального счетчика импульсов. |
ABS_DATA_DAY = 0xC0 | Абсолютные данные прибора учета на учетный час. | EX_ABS_DAY_MUL=0x1F-0x0B | Команда получения абсолютных данных суточного потребления в формате многоканального счетчика импульсов. |
TIME2000 = 0x09 | Текущее время датчика | TIME2000 = 0x09 | Текущее время датчика |
NEW_STATUS=0x14 | Состояние датчика. | NEW_STATUS=0x14 | Состояние датчика. |
NEW_EVENT=0x15 | Произошло событие. | NEW_EVENT=0x15 | Произошло событие. |
Команды, поступающие с сервера NS в DOWNLINK кадрах. | |||
SET_TIME_2000 = 0x02 | Корректировка времени в датчике. Четыре байта в параметрах команды знаковое число определяющее величину коррекции времени Time2000. | SET_TIME_2000 = 0x02 | Корректировка времени в датчике. Четыре байта в параметрах команды знаковое число определяющее величину коррекции времени Time2000. |
CORRECT_TIME2000=0x0C | Аналогична команде SET_TIME_2000. В данных команды номер последовательности корректировки и один знаковый байт величины коррекции. Команда применяется только если номер последовательности отличается от текущего в датчике. | CORRECT_TIME2000=0x0C | Аналогична команде SET_TIME_2000. В данных команды номер последовательности корректировки и один знаковый байт величины коррекции. Команда применяется только если номер последовательности отличается от текущего в датчике. |
GET_CURRENT = 0x07 | Запрос на чтение текущего значения счетчика импульсов. | GET_CURRENT_MUL = 0x18 | Запрос на чтение текущих значений многоканального счетчика импульсов. |
SET_PARAMETERS = 0x03 | Установка параметров в датчик. | SET_PARAMETERS = 0x03 | Установка параметров в датчик. |
GET_PARAMETERS = 0x04 | Запрос установленных параметров в датчике. | GET_PARAMETERS = 0x04 | Запрос установленных параметров в датчике. |
GET_ARCHIVE_HOURS = 0x05 | Запрос на чтение архива часовых выборок счетчика импульсов. | GET_ARCHIVE_HOURS_MUL=0x1A | Запрос на чтение архива часовых выборок многоканального счетчика импульсов. |
GET_ARCHIVE_DAYS = 0x06 | Запрос на чтение архива суточных (на 0 часов) выборок счетчика импульсов. | GET_ARCHIVE_DAYS_MUL = 0x1B | Запрос на чтение архива суточных (на учетный час) выборок многоканального счетчика импульсов. |
GET_ARCHIVE_EVENTS=0x0B | Запрос на чтение архива событий | GET_ARCHIVE_EVENTS=0x0B | Запрос на чтение архива событий |
SOFT RESET = 0x19 | Команда программного сброса. | SOFT RESET = 0x19 | Команда программного сброса. |
GET_LMIC_VERSION=0x1F-0x02 | Команда запроса версии LMIC . | GET_LMIC_VERSION=0x1F-0x02 | Команда запроса версии LMIC . |
GET_ABS_ARCHIVE_HOURS=0x1F-0x03 | Команда запроса архива данных почасового потребления прибора учета. | EX_ABS_ARCH_HOUR_MUL=0x1F-0x0C | Команда получения архива абсолютных данных почасового потребления в формате многоканального счетчика импульсов. |
GET_ABS_ARCHIVE_DAYS=0x1F-0x04 | Команда запроса архива данных суточного потребления прибора учета. | EX_ABS_ARCH_DAY_MUL=0x1F-0x0D | Команда получения архива абсолютных данных суточного потребления в формате многоканального счетчика импульсов. |
Параметры
№ | Тип/Значение |
1 | Задание временных параметров работы. |
4 | Задание расчетного часа. |
5 | Тип выдаваемых данных. |
8 | Способ доставки приоритетных данных. |
9 | Способ активации устройства в сети LoraWAN. |
10 | Параметры депассивации батарейки модуля. |
11 | BATTERY_ACTIVE_TIME Минимально необходимое время нагрузки батарейки в сутки предохраняющее пассивации. |
18 | RX2_CFG. Для всех типов модулей. Позволяет настроить параметры работы второго окна приема. |
22 | DELTA_TIME_EN. |
23 | METER_BASE_DATA. |
24 | ABSOLUTE_DATA_EN. |
25 | SERIAL_NUMBER. |
26 | GEOLOCATION. |
28 | TimeExtraFrame. |