MQTT KNX V2: различия между версиями

Материал из Wiren Board
Строка 22: Строка 22:
<pre>i:${SrcAddr} g:${DstAddr} ${APCI} ${Data}</pre>
<pre>i:${SrcAddr} g:${DstAddr} ${APCI} ${Data}</pre>


* ''SrcAddr'' - Индивидуальный адрес KNX устройства отправителя в формате "n/n/n" или "n/n".
* ''SrcAddr'' - Индивидуальный адрес KNX устройства отправителя в формате <code>n/n/n</code> или <code>n/n</code>.
* ''DstAddr'' - Групповой адрес KNX в формате "n/n/n" или "n/n".
* ''DstAddr'' - Групповой адрес KNX в формате <code>n/n/n</code> или <code>n/n</code>.
* ''APCI'' - Тип сообщения: строка или 4х-битное число.
* ''APCI'' - Тип сообщения: строка или 4х-битное число.
* ''Data'' - Сообщение в виде байт, разделенных пробелами. Первый байт сообщения должен иметь длину не более 6 бит.
* ''Data'' - Сообщение в виде байт, разделенных пробелами. Первый байт сообщения должен иметь длину не более 6 бит.
Строка 29: Строка 29:
При отправке сообщений для полей ''Data'' допускаются форматы: <code>0xAA</code>, <code>0XAA</code>, <code>0b10101010</code>, <code>0B10101010</code>, <code>170</code>
При отправке сообщений для полей ''Data'' допускаются форматы: <code>0xAA</code>, <code>0XAA</code>, <code>0b10101010</code>, <code>0B10101010</code>, <code>170</code>


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


* <code>GroupValueRead</code>
* <code>GroupValueRead</code>

Версия 10:00, 7 апреля 2022

Описание

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

Сервис wb-mqtt-knx может работать с KNX и MQTT в двух режимах:

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

wb-mqtt-knx уже предустановлен на контроллерах Wiren Board.

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

Сетевой мост 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 устройств.

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

  • Raw_Value - обработка сырых данных: массив данных в виде строки (APDU payload);
  • 1.xxx_B1 - 1-битовое значение;
  • 2.xxx_B2 - 2-битовое значение;
  • 3.xxx_B1U3 - составное: 1-битовое значение + 3-битовое целое без знака;
  • 4.xxx_Character_Set - один ASCII символ
  • 5.xxx_8-Bit_Unsigned_Value - 8-битовое целое без знака;
  • 6.xxx_V8 - 8-битовое целое со знаком;
  • 7.xxx_2-Octet_Unsigned_Value - 16-битовое целое без знака;
  • 8.xxx_2-Octet_Signed_Value - 16-битовое целое со знаком;
  • 9.xxx_2-Octet_Float_Value - 2-байтовое значение с плавающей точкой.
  • 12.001_4-Octet_Unsigned_Value - 32-битовое целое без знака;
  • 13.xxx_4-Octet_Signed_Value - 16-битовое целое со знаком;
  • 14.xxx_4-Octet_Float_Value - 4-байтовое значение с плавающей точкой в формате IEEE 754
  • 20.xxx_N8 - 8-битовое целое без знака;

Настройка

Пример настройки 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 device #1 и KNX device #2 связаны одним групповым адресом и образуют предварительно заданный логический канал по которому передаются определённый тип данных.

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

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

Управление KNX-устройством через пользовательский интерфейс

Вы можете управлять исполнительным KNX-устройством через пользовательский интерфейс, или через wb-rules.

Как это работает:

  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.
Передача данных от интерфейса пользователя к исполнительному устройству

Периодическое чтение группового объекта

Как это работает:

  1. После начала работы сервиса и при заданном для контрола периоде опроса отличном от нуля сервис wb-mqtt-knx рассылает телеграммы с запросом на чтение с APCI командой GroupValueRead на соответствующие групповые адреса.
  2. Если групповой объект имеет флаг R и групповой адрес, равный запрашиваемому, он отсылает в KNX TP ответ с текущим своим значением и ACPI командой GroupValueResponse.
  3. Это телеграмму получает wb-mqtt-knx сервис и отправляет значение в контрол со связанным групповым адресом.
  4. Далее значение контрола публикуется в топике /devices/Device1/controls/control1/
Чтение группового объекта

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

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

Также можно управлять сервисом в ручном режиме. Для выполнения команд подключитесь к контроллеру по 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, которая идёт в комплекте с wb-mqtt-knx.

Утилита принимает на вход 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