Использование контроллера Lavritech L1 Lite в качестве LoRaWan Gateway с контроллером Wiren Board

Материал из Wiren Board
Версия от 18:22, 29 мая 2024; A.Ksenofontov (обсуждение | вклад) (Основные пункты написаны, требуют корректировки)

Это черновик страницы. Последняя правка сделана 29.05.2024 пользователем A.Ksenofontov.

Общая информация

LoRaWAN - это беспроводной протокол для домашней и коммерческой автоматизации. Это беспроводная технология, которая используется для передачи данных на дальние расстояния от 1 до 15 км.

На физическом уровне основана на методе модуляции LoRa (ЛоРа) и разработана специально для использования в интернете вещей (IoT).

Описание

Для использования LoRaWan устройств с контроллером Wiren Board понадобится:

  1. Контроллер Lavritech L1 Lite
  1. Дополнительное ПО:
    • Шаблон wb-mqtt-serial ???

Инструкции по установке смотрите ниже на этой странице.

Настройка контроллера Lavritech L1 Lite в качестве LoRaWAN шлюза

  1. Подключится к web интерфейсу контроллера Lavritech L1 Lite согласно инструкции производителя
  2. Настроить котроллер Lavritech L1 Lite в режим шлюза LoRaWAN согласно инструкции производителя

Подключение оконечных устройств в LoRaWAN шлюз по ABP

ABP(Activation by Personalization) — поддержка шифрования со статическими ключами. Работа в режиме ABP — это наилучший компромисс между безопасностью передачи данных и удобством (простотой) работы.


  1. В web интерфейсе Lavritech L1 Lite перейти Lora-Nodes option, выбрать из номеров Node (каждый номер соответствует подключенному оконечному устройству)
  2. Заполнить графы
    DevAddr - адрес устройства
    TimeOut - оставить по умолчанию 65535 сек
    AppSkey - сессионный ключ
    NwkSkey - сетевой сессионный ключ
    Data structure - здесь нужно описать структуру получаемого сообщения, можно найти в документации на оконечного устройства

Пример: Подключаемо оконечное устройство - датчик температуры Вега ТД-11, находим таблицу "Пакет с текущими показаниями"

Vega td11 register map.png

из документации на Lavritech L1 Lite Типы бинарных данных

Ниже представлена расшифровка основные типов бинарных данных:

  • T — Температура, 2 байта int, значение умножено на 10 (1 знак после запятой).
  • H — Влажность, 2 байта uint, значение умножено на 10 (1 знак после запятой).
  • L — Long данные, 4 байта, например, счетчики импульсов.
  • С — Аналогично L.
  • А — АЦП или другие 16 битные данные, 2 байта.
  • B — Однобайтовое значение.
  • G — состояние GPIO.
  • 1..9 — количество пропускаемых байт, эти данные не будут использоваться. Также данные не используются, если названия переменных указать в нижнем регистре.

Дополнительные флаги (дописываются перед основными):

  • R — обратный порядок байтов (старший байт первый), т. е. если принимаем температуру то пишем не просто T, а RT, если старший байт передаётся первым.
  • S — значение с 2 знаками после запятой.

Соответственно наша запись в поле Data structure будет такая : "BBBLTBBBB" Где

  1. B - Тип пакета
  2. B - Заряд батареи в %
  3. B - Превышение лимитов ("0" - нет превышения, "1" - есть превышение)
  4. L - Время снятия показаний, передаваемых в данном пакете (unixtime UTC)
  5. T - Температура в °C, умноженная на 10
  6. B - Нижний температурный лимит
  7. B - Верхний температурный лимит
  8. B - Причина передачи пакета
  9. B - Состояние входов (битовое поле)


OTAA(Over-The-Air Activation) — поддержка шифрования с обменом ключей (обычно не используется)

Передача показаний от шлюза в контроллер WB по ModBus

Настройка ModBus_slave на контроллера Lavritech L1 Lite

Открыть Config: ModBus_slave-Config RTU

  1. Address - ModBus адрес контроллера Lavritech L1 Lite
  2. Speed RS485 - Скорость обмена на шине

Привязка данных полученных от шлюзом к регистрам ModBus

В настойках шлюза выбираем ModBus_slave, здесь происходит привязка полученных данных к регистрам ModBus, которые будут доступны для чтения.

  1. Регистр - по этому адресу будет доступны данные при запросе ModBus командой чтения Input registrer(0x04)
  2. Далее выбор источника данных - Lora
  3. Привязка регистров Num: A-B, где A - номер ноды, B - регистр ноды

В соответствии с нашим примером установим:

  • 1 Registr : 0 Lora Num: 1-2 (Заряд батареи в %)
  • 2 Registr : 2 Lora Num: 1-5 (Температура в °C, умноженная на 10)

Подключение контроллера Lavritech L1 Lite к контроллеру WB по шине RS-485 ModBus

  1. Подключите устройство к шине RS-485 с соблюдением распиновки, указанной на Lavritech L1 Lite. A-A, B-B.

Считать данный со шлюза можно создав устройство Веб интерфейс или создав шаблон

Пример без шаблона

  1. Открыть web интерфейс контроллера WB-Настройки-Конфигурационные файлы-Настройка драйвера serial-устройств(необходимы права Администратора) - Добавить устройство
  2. Порт - RS485-1 или RS485-2, в соответствии к какой шине подключен шлюз, тип устройства - Произвольные устройства -Устройство с протоколом Modbus. Нажать "добавить устройство".
  3. Адрес устройства - адрес контроллера Lavritech L1 Lite
  4. Свойства - название устройства, ввести название устройства "Температура на улице"
  5. Нажатием "+канал" создаём канал устройства
  6. Заполняем поля
    • Имя-Заряд батареи
    • Тип - value(range??? проверить работу)
    • Тип регистра - input
    • Адрес(десятичное значение) - 0
  7. Нажатием "+канал" создаём ещё один канал устройства
  8. Заполняем поля
    • Имя-Температура
    • Тип - temperature
    • тип регистра - input
    • адрес(десятичное значение) - 2
    • множитель - 10
  9. Нажать - Сохранить настройки
  10. В web интерфейсе WB выбрать Устройства, увидеть устройство "Температура на улице" с полями "Заряд батареи" и "Температура"
  11. Готово!

Пример с созданием шаблона

Для удобства использования и редактирования можно создать шаблон по инструкции. Пример шаблона:

{
    "device_type": "lora_temperature_sensor",
    "title": "LoRa Temperature Sensor",
    "group": " g-climate-sensor",
    "device": {
        "name": "LoRa temperature sensor",
        "id": "lora_temperature_sensor",
        "channels": [
            {
                "name": "Battery Charge",
                "reg_type": "input",
                "address": 0,
                "type": "range",
                "units": "%",
                "format": "u16"
            },
            {
                "name": "Temperature",
                "reg_type": "input",
                "address": 2,
                "type": "value",
                "units": "deg C",
                "format": "u16",
                "scale": 10
            }
        ],
        "translations": {
            "ru": {
                "LoRa Temperature Sensor": "LoRa датчик температуры",
                "Battery Charge": "Заряд батареи",
                "Temperature1": "Температура"
            }
        }
    }
}