Перейти к содержанию

⭐ Новые возможности

Обзор новых возможностей в прошивке Lavritech по работе с LoRa


Поддержка Class C

Это режим постоянного приёма пакетов. Устройство всегда открыто на приём, когда не передаёт. Устройство не уходит в режим пониженного энергопотребления между окнами приёма. Используется там где надо обеспечить более быструю реакцию. Подходит для устройств с постоянным питанием от сети.

Как включить Class C

  • Обновить прошивку. Если у Вас старая прошивка, надо обновить ПО на двух контроллерах Lavritech Node и Gateway (Class C требует поддержки на обеих сторонах).
  • Node на основе контроллеров и прошивки Lavritech теперь по умолчанию могут работать в class C (это контроллеры, питающиеся от сети)
  • Для того чтобы включить поддержку "class C" на стороне Gateway - в файле шаблона, в секции [main], нужно добавить строку:
    class=C
    
  • Дополнительно: проверить корректность параметров 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 (%) вычисляется по формуле:

DC = (Time_tx * N_tx_per_hour) / 3600000 * 100
для 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. (пример ниже приведён в качестве демострации: как выглядят изнутри реальные большие шаблоны)

Пример сложного автоматически-генерируемого шаблона для приёма ~200 метрик от 4x счётчиков WB-MAP12E
[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]

[main]
type=1

type=1 — авто-сгенерированный шаблон от контроллера Lavritech Node.

2. Несколько секций [sensors]

В шаблоне четыре секции [sensors], каждая соответствует отдельному LoRaWAN-пакету, поступающему на свой FPort:

  • fport = 100
  • fport = 101
  • fport = 102
  • fport = 103

Каждая секция — это часть общей телеметрии, которая не помещается в один пакет, поэтому нода дробит данные на несколько сообщений.

3. Маски (mask=...)

Каждая секция содержит длинный список элементов маски:

mask=e2d2t9,e4d3t12,e4d3t14,...

Каждый элемент маски описывает:

  • eX — количество байт для чтения значения (2 или 4 байта)
  • dY — число знаков после запятой (делитель 10/100/1000)
  • tZ — тип метрики (напряжение, ток, энергия, угол и т. д.)

Автоматическая генерация

Маску формирует сама нода автоматически, в зависимости от состава метрик (например, MAP12E).

4. Для чего используется

Этот шаблон — пример сложного случая, когда с ноды передаётся:

  • множество энергопоказателей
  • токи
  • напряжения
  • мощности
  • углы
  • дополнительные сервисные метрики

Использование filter в [sensors]

Используется для разделения потоков данных в рамках одного канала LoRa (одной частоты). Но в отличие от FPort - фильтрация осуществляется по значению первого байта данных пакета.

  • фильтр настраивается по первому байту данных пакета
Пример
//ловим пакеты, только где первый байт = 10. Остальные игнорируем
[sensors]
filter=10   
...
  • в одном шаблоне можно описать несколько секций [sensors] с разными filter
  • при получении контроллером пакетов с разными значениями первого байта;
    • данные пакета разбираются по-разному (в зависимости от маски в секции [sensors])
    • на главной страцице обновляется область значений соответсвующих этому пакету
    • другие области при этом не обновляются

Рассмотрим на примере шаблона для модема "Вега SH-2".
Согласно докуменации есть несколько типов пакетов, нас интересуют два из них - 0A и 0B (в десятиччной системе это будет 10 и 11)

Эти два типа имеют разную структуру.
Описываем эту структуру в шаблоне, создаём файл в EasyFS:

Пример шаблона для модема Вега SH-2
//в поле 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

Результат на главной странице: