Новый MQTT KNX

Материал из Wiren Board

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

Описание

KNX-устройства в веб-интерфейсе контроллера Wiren Board

Сервис предназначен для работы с KNX и MQTT в двух режимах.

  1. Как сетевой мост, который обрабатывает, передаёт и принимает KNX телеграммы в MQTT в специальном формате.
  2. Как набор виртуальных устройств для работы с групповыми объектами и предварительной обработкой типов данных.

Для работы сервиса необходима его установка и настройка.

Режимы работы

Сетевой мост MQTT <=> KNX

Чтобы отправить групповую телеграмму в KNX необходимо отправить подготовленное сообщение в MQTT топик:

mosquitto_pub -t '/devices/knx/controls/data/on' -m "g:${DstAddr} ${APCI} ${Data}"

Все сообщения из KNX будут доставлены в MQTT топик /devices/knx/controls/data в виде:

i:${SrcAddr} g:${DstAddr} ${APCI} ${Data}
  • SrcAddr - Индивидуальный адрес KNX устройства отправителя в формате "n/n/n" или "n/n".
  • DstAddr - Групповой адрес KNX в формате "n/n/n" или "n/n".
  • APCI - Тип сообщения: строка или 4х-битное число.
  • Data - Сообщение в виде байт, разделенных пробелами. Первый байт сообщения должен иметь длину не более 6 бит.

При отправке сообщений для полей Data допускаются форматы: 0xAA, 0XAA, 0b10101010, 0B10101010, 170

Поддерживаемые типы сообщений(APCI):

  • GroupValueRead
  • GroupValueResponse
  • GroupValueWrite

Контроллер групповых объектов

Для группового адреса KNX создаётся индивидуально настраиваемый MQTT контрол. Это означает, что можно работать с групповым адресом как с MQTT контролом: отправлять в него и принимать из него значения, например: битов, целых знаковых и беззнаковых чисел, чисел с плавающей точкой.

Тип контрола связан типом данных для группового адреса. Тип данных для конкретного группового адреса можно настроить в веб редакторе конфигурационных файлов.

Несколько групповых адресов группируются в одно или несколько произвольных логических MQTT устройств.

На данный момент поддерживаются пять типов данных групповых адресов и один с возможностью обработки сырых данных:

  • Raw_Value - обработка сырых данных: массив данных в виде строки (APDU payload);
  • 1.xxx_B1 - 1-битовое значение;
  • 2.xxx_B2 - 2-битовое значение;
  • 5.xxx_8-Bit_Unsigned_Value - 8-битовое целое без знака;
  • 6.xxx_V8 - 8-битовое целое со знаком;
  • 9.xxx_2-Octet_Float_Value - 2-байтовое значение с плавающей точкой.

Установка

Запустите консоль и введите команду

$ apt-get update && apt-get install wb-mqtt-knx

Настройка

Пример настройки KNX-устройства в веб-интерфейсе контроллера Wiren Board

Предварительные шаги для настройки сервиса:

  1. Зайдите в веб-интерфейс контроллера
  2. Если вы работаете под обычным пользователем, то смените уровень доступа
  3. Перейдите SettingsConfigsKNX Group Object Configuration

Включение отладки через веб-интерфейс (выключено по умолчанию):

  1. Установите флажок Enable debug logging
  2. Нажмите на кнопку Save, чтобы сохранить настройки.

Включение возможности обрабатывать телеграммы через контрол knx/data (включено по умолчанию):

  1. Установите флажок Enable the KNX Gateway Device: knx/data
  2. Нажмите на кнопку Save, чтобы сохранить настройки.

Создать виртуальное устройство для группирования групповых объектов:

  1. Нажмите на кнопку + Device
  2. В появившемся новом устройстве укажите Device ID и опционально название Title
  3. Нажмите на кнопку Save, чтобы сохранить настройки.

Добавить контрол для групповых объектов в устройство:

  1. Укажите устройство из List of Devices в котором хотите добавить контрол.
  2. Нажмите на кнопку + Control
  3. В появившемся новом контроле укажите Control ID и опционально название Title
  4. Укажите групповой адрес Group Address. Может быть в формате: "1/2/34", "1/234", "1234"
  5. Укажите тип точки данных группового объекта Data point type из выпадающего списка. Тип точки данных определяет какой тип контрола будет создан и как KNX данные будут интерпретироваться.
  6. Для задания периода чтения группового объекта задайте интервал в миллисекундах: READ poll interval for Devices (ms). Если интервал равен нулю, то опрос чтения для этого группового объекта не производится.
  7. Для задания максимального времени отклика на запрос чтения укажите время в миллисекундах: READ poll timeout for Devices (ms). Если время равно нулю, то эта функция отключена. При превышении максимального времени отклика на запрос чтения генерируется ошибка в топик meta/error
  8. Для настройки контрола только на чтение установите флажок Read only
  9. Нажмите на кнопку Save, чтобы сохранить настройки.

Преобразование KNX данных в значение контрола в зависимости от типа точки данных группового объекта

Если у в состав типа точки данных входит несколько полей, то на каждое поле создаётся свой контрол.

Топик для приёма и отправки DataPoint типов содержащих только одно поле данных:

/devices/<knx_device_id>/controls/<knx_device_control_id>

/devices/<knx_device_id>/controls/<knx_device_control_id>/on

Топик для приёма и отправки DataPoint типов содержащих несколько полей данных:

/devices/<knx_device_id>/controls/<knx_device_control_id>_<datapoint_field>

/devices/<knx_device_id>/controls/<knx_device_control_id>_<datapoint_field>/on

где:

  • knx_device_id - имя виртуальной группы групповых объектов;
  • knx_device_control_id - имя группового объекта;
  • datapoint_field - имя поля из DataPoint типа.

Список поддерживаемых типов точек данных

Смотрите: Список типов точек данных

Случаи использования

Структурная схема

Структурная схема взаимодействия KNX MQTT
  • KNX TP - KNX сеть, витая пара
  • KNX device #1, group object #n - Групповой объект n устройства 1, привязанный к групповому адресу GA1, с флагами на чтение и передачу, и типом датапоинта Dpt1. Пример: датчик.
  • KNX device #2, group object #m - Групповой объект m устройства 2, привязанный к групповому адресу GA1, с флагами на запись, и типом датапоинта Dpt1. Пример: исполнительное устройство.
  • knxd - knxd сервер в контроллере WB
  • wb-mqtt-knx - сервис для преобразования групповых объектов в MQTT устройства и контролы
  • representation in terms of MQTT - представление групповых объектов терминах MQTT
  • Web UI/ wb-rules - пользовательский интерфейс или движок правил
  • /Device1/control1 - контрол, связанный с групповым адресом и типом датапоита 1

Устройство 1 и 2 связаны одним групповым адресом и образуют предварительно заданный логический канал по которому передаются определённый тип данных.

Подробнее про KNX флаги групповых объектов можно почитать здесь.

Случай 1. Передача данных исполнительному устройству при изменении состояния датчика

Передача датчик -> исполнительное устройство
  1. Датчик при изменении своего состояния посылает исполнительному устройству KNX телеграмму с групповым адресом и APCI командой GroupValueWrite.
  2. knxd прослушивает телеграммы на шине и пересылает полученную телеграмму своим клиентам, в числе которых wb-mqtt-knx.
  3. wb-mqtt-knx по таблице соответствия, сформированной из файла конфигурации, находит MQTT контрол связанный с групповым адресом и конвертирует KNX данные в значение, публикуемое контролом. Преобразование данных зависит от типа датапоинта.
  4. Изменение значения в контроле публикуется в MQTT. Подписчиками в том числе являются движок правил и пользовательский интерфейс.

Случай 2. Управление исполнительным устройством через движок правил или пользовательский интерфейс

Передача интерфейс пользователя -> исполнительное устройство
  1. Изменяется значение контрола, посредством публикации значения в топик /devices/Device1/controls/control1/on, что приводит к публикации значения в топик /devices/Device1/controls/control1/.
  2. Значение из топика /on преобразуются в данные для KNX телеграммы в зависимости от типа датапоинта, связанного с контролом. # Формируется KNX телеграмма с KNX данными, адресом получателя GA1 и APCI командой GroupWalueWrite. Адрес получателя равен групповому адресу связанному с контролом.
  3. KNX телеграмма передаётся всем клиентам knxd и в KNX TP сеть.
  4. KNX телеграмму получают устройства 1 и 2. Обработка пакета c командой GroupValueWrite происходит только в групповом объекте m в устройстве 2, из-за того что в нём выставлен флаг W.

Управление сервисом и просмотр журнала

Обычно сервис запускается автоматически при загрузке контроллера и перезапускается при сохранении файла конфигурации в веб-интерфейсе.

Также можно управлять сервисом в ручном режиме. Для выполнения команд подключитесь к контроллеру по SSH. Доступны команды:

$ systemctl stop wb-mqtt-knx # остановить
$ systemctl start wb-mqtt-knx # запустить
$ systemctl restart wb-mqtt-knx # перезапустить

Для просмотра служебного журнала сервиса:

$ journalctl -u wb-mqtt-knx

Экспорт из ETS

Для импорта из инструмента ETS в файл конфигурации для работы с групповыми объектами wb-mqtt-knx.conf, можно воспользоваться консольной утилитой wb-knx-ets-tool. Утилита принимает на вход XML файлы экспорта из инструмента ETS версии 5 и 6.

Использование:

$ wb-knx-ets-tool ETS_CONFIG WB_MQTT_KNX_CONFIG
  • ETS_CONFIG - путь к XML файлу экспорта групповых объектов
  • WB_MQTT_KNX_CONFIG - путь к файлу конфигурации для работы с групповыми объектами wb-mqtt-knx.conf