/wb-mqtt-noolite

Wirenboard service for MTRF-64 Noolite

Primary LanguageGoApache License 2.0Apache-2.0

wb-mqtt-noolite

Служба wb-mqtt-noolite позволяет интегрировать устройства Noolite (пульты, выключатели и датчики) в контроллер автоматизации Wiren Board.
Это достигается за счет соблюдения Wiren Board MQTT Conventions и использования адаптера MTRF-64, с помощью которого реализуется работа с устройствами Noolite(-F).
Работа службы протестирована с адаптером MTRF-64-USB-A.

Функциональные возможности:

  • Прием управляющих команд от Wiren Board и передача их на исполнение устройствам Noolite
  • Взаимодействие с адаптером NooLite MTRF-64, обработка ответов от устройств и публикация обновления статусов в MQTT.
  • Опрос устройств Noolite(-F) по расписанию и отправка результатов в Wiren Board

Сборка под Wirenboard

Wirenboard 3.5

# armv5tejl
export GOARCH=arm
export GOARM=5
go build -ldflags="-s -w" -o wb-mqtt-noolite-arm main.go

Wirenboard 6

#  Cortex A7
export GOARCH=arm
export GOARM=7
go build -ldflags="-s -w" -o wb-mqtt-noolite-armv7 main.go

Конфигурирование и запуск службы

Служба wb-mqtt-noolite конфигурируется с помощью конфигурационного файла в json формате. Основные параметры, которые необходимо передать: последовательный порт адаптера Noolite, реквизиты доступа к MQTT брокеру. Также в секции device_config необходимо описать пути до отдельных JSON файлов шаблонов, описывающих модели устройств и самих устройства. В каталоге templates находятся шаблоны. По мере развития проекта список будет пополняться. В директории example приведен пример конфигурационного файла и списка устройств.

Параметры командной строки: -- config или -c с указанием пути до файла конфигурации службы

Пример конфигурационного файла:

{
  "serial_port": "/dev/ttyUSB0",
  "timezone": "Europe/Moscow",
  "loglevel": "info",
  "mqtt": {
    "host": "127.0.0.1",
    "port": 1883,
    "username": "",
    "password": ""
  },
  "device_config": {
    "templates": "./templates/templates.json",
    "devices": "./example/devices.json"
  }
}

Список устройств (devices.json)

Для работы службы требуется информация об устройствах, которые присутствуют в системе и описание шаблона модели устройства.
Пример списка устройств:

[
  {
    "name": "Теплый пол",
    "noolite_type": "txf",
    "ch": 1,
    "template": "srf-1-3000-t"
  }
]

Здесь:

  • name: Наименование устройства, будет отображаться в интерфейсе
  • noolite_type: тип Noolite (TX, TX-F, RX, RX-F)
  • ch: Канал, 1-63
  • address: Может указываться адрес, но не обязательно
  • template: Шаблон устройства

Шаблоны устройств (templates.json)

Шаблон устройств предоставляет информацию о моделях поддерживаемых устройств, их элементов управления и информацию о командах Noolite, которые будут передаваться в устройство. Для выполнения определенных команд на регулярной основе реализована поддержка выполнения команд по расписанию. Расписание задается в формате crontab Таким образом, шаблон каждого из устройств описывается как наименование устройства и набор элементов управления. Элементы управления имеют:

  • name: имя топика
  • type: тип см. Wiren Board MQTT Conventions
  • order: порядок сортировки
  • readonly: определяет будет ли возможность со стороны UI возможность изменять его значение
  • get_command: команда, которая будет выполняться по расписанию, например: "ReadState 0"
  • set_command: при поступлении команды на установку данного контрола - будет отправляться соответствующая Noolite команда
  • polling: выполнять команду по расписанию?
  • polling_cron: расписание выполнения команды указанной в get_command
  • min, max: для типа range, минимальное и максимальное принимаемое значение
  • units: единицы измерения
  • precision: точность Пример:
{
  "templates": [
    {
      "name": "srf-1-3000-t",
      "controls": [
        {
          "name": "on",
          "type": "switch",
          "order": 1,
          "initial_value": "0",
          "readonly": false,
          "onstart_command": "",
          "get_command": "",
          "set_command": "SetSwitch"
        },
        {
          "name": "status",
          "type": "switch",
          "order": 6,
          "initial_value": "0",
          "readonly": true
        },
        {
          "name": "setting",
          "type": "range",
          "order": 2,
          "min": 5,
          "max": 30,
          "initial_value": "23",
          "onstart_command": "",
          "get_command": "",
          "set_command": "SetTemperature"
        },
        {
          "name": "value",
          "type": "temperature",
          "order": 3,
          "readonly": true,
          "initial_value": "",
          "onstart_command": "",
          "get_command": "ReadState 0",
          "set_command": "",
          "polling": true,
          "polling_cron": "*/1 * * * *"
        },
        {
          "name": "model",
          "type": "text",
          "order": 4,
          "readonly": true
        },
        {
          "name": "address",
          "type": "text",
          "order": 5,
          "readonly": true
        }
      ]
    }
  ]
}

Поддерживаемые команды

У каждого элемента управления указываются команды, которые преобразуют MQTT сообщение в Noolite команду и обратно.
Поддерживаемые команды описаны ниже:

Команда Описание и параметры Пример
SetOn Включить, не имеет параметров. SetOn
SetOff Выключить, не имеет параметров. SetOff
SetSwitch Включить или выключить, передается 1 или 0 соответственно. SetSwitch
SetTemperature Установить температуру (для srf-1-3000-t). SetTemperature
ReadState Запросить статус, параметр fmt (см.документацию на MTRF) ReadState 0

*Список команд будет расширяться.

mtrf_tools

В пакет программ входит утилита mtrf_tools, которая позволяет управлять устройством:

  • Осуществлять привязку устройства
  • Осуществлять отвязку устройства
  • Установка температуры термостата
  • Установка выбора датчика термостата
  • Управление включением и отключением
  • Чтение статуса устройства