⭐ Новые возможности
Обзор новых возможностей в прошивке Lavritech по работе с LoRa
Поддержка Class C
Это режим постоянного приёма пакетов. Устройство всегда открыто на приём, когда не передаёт. Устройство не уходит в режим пониженного энергопотребления между окнами приёма. Используется там где надо обеспечить более быструю реакцию. Подходит для устройств с постоянным питанием от сети.
Как включить Class C
- Обновить прошивку. Если у Вас старая прошивка, надо обновить ПО на двух контроллерах Lavritech Node и Gateway (Class C требует поддержки на обеих сторонах).
- Node на основе контроллеров и прошивки Lavritech теперь по умолчанию могут работать в class C (это контроллеры, питающиеся от сети)
- Для того чтобы включить поддержку "class C" на стороне Gateway - в файле шаблона, в секции
[main], нужно добавить строку: - Дополнительно: проверить корректность параметров LoRa (канал, SF, DR) и соответствие настроек между Node и Gateway.
Подтверждения передачи (ACK)
Опция: Enable ACK
Назначение: заставляет ноду ожидать подтверждения от шлюза для каждого uplink-пакета.
Включение: веб-интерфейс → LoRa → чекбокс Enable ACK.
Эффект: увеличивает задержку и нагрузку на эфир, но гарантирует доставку пакета.
Рекомендации: включать только при необходимости гарантированной передачи критичных метрик.
Оценка времени в эфире
Параметр Time — рассчитанное время нахождения узла в эфире для последнего пакета.
Расчёт: выполняется по формуле LoRa airtime, с учётом SF, BW, CR, Preamble и длины полезных данных.
Формула для расчета
Расчёт времени передачи LoRa-пакета
Формула (реализована в прошивке):
T_air = (Preamble + 4.25 + ceil((8*PL - 4*SF + 28 + 16*CRC - 20*IH) /
(4*(SF - 2*DE))) * CR) * (2^SF / BW)
- PL — payload (длина пакета, байт)
- SF — spreading factor
- BW — ширина канала (обычно 125 кГц)
- CR — coding rate
- DE — low data rate optimization
Оценка загруженности эфира (Контроль Duty Cycle)
Автоматический контроль Duty Cycle:
- Каждое устройство хранит суммарное время передачи за период.
- При превышении лимита (например Duty Cycle: = 10%) - передача откладывается.
- Используется временной буфер, ожидающий разрешённое окно.
Пример:
при SF12 и длине пакета 20 байт время передачи составит ≈ 1,8 с →
при Duty Cycle 10% минимальный интервал между пакетами ≈ 18 с.
Оценка загруженности:
Частые CRC и ACK Timeout — индикаторы перегрузки или помех.
Duty Cycle (%) вычисляется по формуле:
дляRU868 часто используется Duty Cycle не более 10%, т.е. это максимум 36 секунд эфира в час.
Механизм контроля и планирования отправки пакетов
На Node:
- Передача выполняется по таймеру / событию.
- Если эфир занят или Duty Cycle исчерпан — пакет ставится в очередь.
На Gateway:
- Группирует изменения, произошедшие одновременно (например, несколько команд на реле).
- Алгоритм «антидребезг»: ждёт 100–300 мс для объединения изменений.
- После этого формирует единый uplink-пакет.
- В Class C ответные пакеты отправляются сразу — без ожидания окна приёма.
Диагностические параметры в веб-интерфейсе
| Параметр | Пример | Значение |
|---|---|---|
| Length | 21 |
Длина полезной части пакета (байт). |
| Time | 1810 ms |
Время нахождения в эфире (LoRa airtime). |
| cnt | error CRC: 83 |
Количество ошибок CRC при приёме. |
| RSSI/SNR | -71 / 10 |
Уровень сигнала и отношение сигнал/шум. |
| ACK Status | OK / Timeout |
Результат последнего подтверждения. |
Назначение: позволяет оценить надёжность и загрузку канала.
Использование FPort
FPort применяется для разделения потоков данных в рамках одного канала LoRa (одной частоты).
Lavritech Node ↔ Lavritech Gateway: Здесь FPort используется для идентификации пакетов. Если Node собирает большое количество данных, то при авто-генерации шаблона будет сформирован шаблон с несколькими секциями [sensors]. Каждая такая секция имеет свой параметр fport, и передается по LoRa отдельным пакетом.
Рассмотрим на примере передачи данных от 4-х счетчиков WB-MAP12:
- Lavritech Node:
- подключаем 4 счётчика WB-MAP12 по Modbus
- активируем режим Node
- используем автозаполнение датчиков
- Lavritech Gateway:
- настраиваем связь с Node
- Lavritech Node:
- отправляем шаблон на Gateway по кнопке (шаблон будет сгенерирован автоматически)
- Lavritech Gateway:
- в EasyFS будет сгенерирован новый файл шаблона
Пояснения
В некоторых проектах (например, при работе с 4 счётчиками MAP12E одновременно) узел (нода) отправляет очень большой объём данных — десятки и сотни метрик. Чтобы уложиться в ограничение LoRaWAN по размеру кадра, нода автоматически дробит весь payload на несколько сообщений, каждое — на своём FPort. Gateway принимает такие пакеты, используя шаблон с несколькими секциями [sensors], где каждая секция привязана к своему fport.
Важно
Такие шаблоны не пишутся вручную — они генерируются самим устройством (нодой) и передаются на Gateway автоматически по LoRaWAN. (пример ниже приведён в качестве демострации: как выглядят изнутри реальные большие шаблоны)
[main]
type=1
[sensors]
fport=100
mask=e2d2t9,e2d2t9,e2d2t9,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e2d1t19,e2d1t19,e2d1t19,e2d2t9,e2d2t9,e2d2t9,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14
[sensors]
fport=101
mask=e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e2d1t19,e2d1t19,e2d1t19,e2d2t9,e2d2t9,e2d2t9,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12
[sensors]
fport=102
mask=e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e2d1t19,e2d1t19,e2d1t19,e2d2t9,e2d2t9,e2d2t9,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10
[sensors]
fport=103
mask=e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e4d3t12,e4d3t12,e4d3t12,e4d3t12,e4d3t14,e4d3t14,e4d3t14,e4d3t14,e4d3t10,e4d3t10,e4d3t10,e2d1t19,e2d1t19,e2d1t19
Краткое описание шаблона
Этот шаблон предназначен для приёма большого набора метрик (≈200 значений), которые нода передаёт на гейтвей по LoRaWAN в нескольких пакетах, разделённых по разным FPort.
1. Секция [main]
type=1 — авто-сгенерированный шаблон от контроллера Lavritech Node.
2. Несколько секций [sensors]
В шаблоне четыре секции [sensors], каждая соответствует отдельному LoRaWAN-пакету, поступающему на свой FPort:
- fport = 100
- fport = 101
- fport = 102
- fport = 103
Каждая секция — это часть общей телеметрии, которая не помещается в один пакет, поэтому нода дробит данные на несколько сообщений.
3. Маски (mask=...)
Каждая секция содержит длинный список элементов маски:
Каждый элемент маски описывает:
eX— количество байт для чтения значения (2 или 4 байта)dY— число знаков после запятой (делитель 10/100/1000)tZ— тип метрики (напряжение, ток, энергия, угол и т. д.)
Автоматическая генерация
Маску формирует сама нода автоматически, в зависимости от состава метрик (например, MAP12E).
4. Для чего используется
Этот шаблон — пример сложного случая, когда с ноды передаётся:
- множество энергопоказателей
- токи
- напряжения
- мощности
- углы
- дополнительные сервисные метрики
Использование filter в [sensors]
Используется для разделения потоков данных в рамках одного канала LoRa (одной частоты). Но в отличие от FPort - фильтрация осуществляется по значению первого байта данных пакета.
- фильтр настраивается по первому байту данных пакета
- в одном шаблоне можно описать несколько секций
[sensors]с разнымиfilter - при получении контроллером пакетов с разными значениями первого байта;
- данные пакета разбираются по-разному (в зависимости от маски в секции
[sensors]) - на главной страцице обновляется область значений соответсвующих этому пакету
- другие области при этом не обновляются
- данные пакета разбираются по-разному (в зависимости от маски в секции
Рассмотрим на примере шаблона для модема "Вега SH-2".
Согласно докуменации есть несколько типов пакетов, нас интересуют два из них - 0A и 0B (в десятиччной системе это будет 10 и 11)

Эти два типа имеют разную структуру.
Описываем эту структуру в шаблоне, создаём файл в EasyFS:
//в поле name= в комментариях перечислены названия полей для справки
[main]
ver = 1
[sensors]
filter=10
//name=Тип пакета,причина передачи,время формирования пакета,заряд батареи,температура,показания на входе 1,показания на входе 2,значение напряжения в мВ ADC1,значение напряжения в мВ ADC2
mask=e1t0,e1t0,s4,e1t17,e1t3,e4t6,e4t6,e2d3t9,e2t9
[sensors]
filter=11
//name=Тип пакета,причина передачи,время формирования пакета,rev.2 - резерв,rev.2 - резерв,датчик 1,датчик 2,датчик 3,датчик 4,датчик 5,датчик 6,датчик 7,датчик 8,датчик 9,датчик 10
mask=e1t0,e1t0,s4,s1,s1,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3,e2[&2047-600]d1t3
Результат на главной странице:
