MQTT KNX V2: различия между версиями
Строка 36: | Строка 36: | ||
=== Контроллер групповых объектов === | === Контроллер групповых объектов === | ||
Это рекомендуемый режим работы, так как он удобный и постоянно развивается. | |||
В этом режиме для группового KNX-адреса создаётся контрол MQTT-устройства, тип которого связан с типом группового адреса. Далее вы работаете контролом, как с групповым адресом: отправляете и принимаете данные, например: биты, целые знаковые и беззнаковые числа, числа с плавающей точкой. | |||
Несколько групповых адресов можно объединять в одно или несколько произвольных MQTT-устройств. | Несколько групповых адресов можно объединять в одно или несколько произвольных MQTT-устройств. | ||
Каждый контрол может работать в двух режимах: | |||
# ''MQTT'' — данные представляются в виде готовых к обработке значений согласно [https://github.com/wirenboard/conventions/blob/main/README.md Wiren Board MQTT Conventions]. | |||
# ''JSON'' — данные преобразовываются в JSON-сообщения, которые в виде текста помещаются в контрол. | |||
Мы рекомендуем использовать первый режим, но он не поддерживает некоторые специфичные типы групповых адресов, применяемых в KNX. Если вы столкнулись с такими типами, используйте режим JSON, так вы сможете разбирать сообщения с помощью [[wb-rules]], обрабатывать их и отправлять обратно групповому адресу. | |||
== Настройка == | == Настройка == |
Версия 16:01, 7 апреля 2022
Описание
Сервис wb-mqtt-knx может работать в двух режимах:
- Сетевой мост, который обрабатывает, передаёт и принимает KNX телеграммы в MQTT в специальном формате.
- Набор виртуальных устройств для работы с групповыми объектами KNX и предварительной обработкой типов данных.
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 — данные представляются в виде готовых к обработке значений согласно Wiren Board MQTT Conventions.
- JSON — данные преобразовываются в JSON-сообщения, которые в виде текста помещаются в контрол.
Мы рекомендуем использовать первый режим, но он не поддерживает некоторые специфичные типы групповых адресов, применяемых в KNX. Если вы столкнулись с такими типами, используйте режим JSON, так вы сможете разбирать сообщения с помощью wb-rules, обрабатывать их и отправлять обратно групповому адресу.
Настройка
Предварительные шаги для настройки сервиса:
- Зайдите в веб-интерфейс контроллера
- Если вы работаете под обычным пользователем, то смените уровень доступа
- Перейдите Settings → Configs → KNX Group Object Configuration
Включите отладку через веб-интерфейс (выключено по умолчанию):
- Установите флажок Enable debug logging
- Нажмите на кнопку Save, чтобы сохранить настройки.
Если выключено, то включите возможность обрабатывать телеграммы через контрол knx/data (включено по умолчанию):
- Установите флажок Enable the KNX Gateway Device: knx/data
- Нажмите на кнопку Save, чтобы сохранить настройки.
Создайте виртуальное устройство для группировки групповых объектов:
- Нажмите на кнопку + Device
- В появившемся новом устройстве укажите Device ID и опционально название Title
- Нажмите на кнопку Save, чтобы сохранить настройки.
Добавьте контрол для групповых объектов в устройство:
- Укажите устройство из List of Devices в котором хотите добавить контрол.
- Нажмите на кнопку + Control
- В появившемся новом контроле укажите Control ID и опционально название Title
- Укажите групповой адрес Group Address. Может быть в формате:
1/2/34
,1/234
,1234
- Укажите тип точки данных группового объекта Data point type из выпадающего списка. Тип точки данных определяет какой тип контрола будет создан и как KNX данные будут интерпретироваться.
- Для задания периода чтения группового объекта задайте интервал в миллисекундах: READ poll interval for Devices (ms). Если интервал равен нулю, то опрос чтения для этого группового объекта не производится.
- Для задания максимального времени отклика на запрос чтения укажите время в миллисекундах: READ poll timeout for Devices (ms). Если время равно нулю, то эта функция отключена. При превышении максимального времени отклика на запрос чтения генерируется ошибка в топик meta/error
- Для настройки контрола только на чтение установите флажок Read only
- Нажмите на кнопку 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 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
Передача данных исполнительному устройству при изменении состояния датчика
Как это работает:
- Датчик при изменении своего состояния посылает исполнительному устройству KNX телеграмму с групповым адресом и APCI командой GroupValueWrite.
- knxd прослушивает телеграммы на шине и пересылает полученную телеграмму своим клиентам, в числе которых wb-mqtt-knx.
- wb-mqtt-knx по таблице соответствия, сформированной из файла конфигурации, находит MQTT контрол связанный с групповым адресом и конвертирует KNX данные в значение, публикуемое контролом. Преобразование данных зависит от типа датапоинта.
- Изменение значения в контроле публикуется в MQTT. Подписчиками, в том числе являются движок правил и пользовательский интерфейс.
Управление KNX-устройством через пользовательский интерфейс
Вы можете управлять исполнительным KNX-устройством через пользовательский интерфейс, или через wb-rules.
Как это работает:
- Изменяется значение контрола, посредством публикации значения в топик
/devices/Device1/controls/control1/on
, что приводит к публикации значения в топик/devices/Device1/controls/control1/
. - Значение из топика
/on
преобразуются в данные для KNX телеграммы в зависимости от типа датапоинта, связанного с контролом. # Формируется KNX телеграмма с KNX данными, адресом получателя GA1 и APCI командой GroupWalueWrite. Адрес получателя равен групповому адресу связанному с контролом. - KNX телеграмма передаётся всем клиентам knxd и в KNX TP сеть.
- KNX телеграмму получают устройства 1 и 2. Обработка пакета c командой GroupValueWrite происходит только в групповом объекте m в устройстве 2, из-за того что в нём выставлен флаг W.
Периодическое чтение группового объекта
Как это работает:
- После начала работы сервиса и при заданном для контрола периоде опроса отличном от нуля сервис wb-mqtt-knx рассылает телеграммы с запросом на чтение с APCI командой GroupValueRead на соответствующие групповые адреса.
- Если групповой объект имеет флаг R и групповой адрес, равный запрашиваемому, он отсылает в KNX TP ответ с текущим своим значением и ACPI командой GroupValueResponse.
- Это телеграмму получает wb-mqtt-knx сервис и отправляет значение в контрол со связанным групповым адресом.
- Далее значение контрола публикуется в топике
/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