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

Материал из Wiren Board
(→‎Описание: Исправлена опечатка)
Метки: правка с мобильного устройства правка из мобильной версии Расширенная мобильная правка
(не показаны 52 промежуточные версии 1 участника)
Строка 1: Строка 1:
{{DISPLAYTITLE: Описание сервиса wb-mqtt-knx}}
{{DISPLAYTITLE: Новый MQTT KNX}}
== Описание ==
== Описание ==
[[Image: WB KNX Devices.png.png |300px|thumb|right| KNX-устройства в веб-интерфейсе контроллера Wiren Board ]]
[[Image: WB KNX Devices.png.png |300px|thumb|right| KNX-устройства в веб-интерфейсе контроллера Wiren Board ]]
Здесь описан сервис версии 1.4.x и новее, [[MQTT KNX V.0.1.x | описание устаревшей версии 0.1.x]].
О том, что такое KNX и особенности адресации читайте в статье [[KNX]].


За работу с KNX-устройствами в контроллерах Wiren Board отвечает установленный с завода сервис [https://github.com/wirenboard/wb-mqtt-knx wb-mqtt-knx], который может работать в двух режимах:
За работу с KNX-устройствами в контроллерах Wiren Board отвечает установленный с завода сервис [https://github.com/wirenboard/wb-mqtt-knx wb-mqtt-knx], который может работать в двух режимах:
# ''Сетевой мост'', который обрабатывает, передаёт и принимает  KNX телеграммы в MQTT в специальном формате. Оставлен для обратной совместимости, новые функции в этот режим внедряться не будут.
# Сетевой мост, который обрабатывает, передаёт и принимает  KNX телеграммы в MQTT в специальном формате. Оставлен для обратной совместимости, новые функции в этот режим внедрятся не будут.
# ''Контроллер групповых объектов''. Это набор виртуальных устройств для работы с групповыми объектами KNX и предварительной обработкой типов данных.
# Контроллер групповых объектов. Это набор виртуальных устройств для работы с групповыми объектами KNX и предварительной обработкой типов данных.
 
Сервис хранит настройки в файле <code>wb-mqtt-knx.conf</code>, который редактируется из веб-интерфейса контроллера или генерируется на основе проекта из ETS.
 
Пример настройки KNX-устройств для работы с wb-mqtt-knx смотрите в статье [[KNX_Quick_start| Быстрый старт KNX]].


== Сетевой мост ==
== Сетевой мост ==
В режиме сетевого моста сервис пересылает телеграммы из [[MQTT]] в KNX и обратно.
В режиме сетевого моста сервис пересылает телеграммы из MQTT в KNX и обратно.
 
Перед началом работы, настройте knxd по [[Knxd#Настройка | инструкции]].


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


== Контроллер групповых объектов ==
== Контроллер групповых объектов ==
{{YouTube|link=https://youtu.be/VjpN_-8SA-Q|text=Вебинар про импорт проектов из ETS, типы групповых адресов и настройку FeedBack}}
=== Описание ===
=== Описание ===
Чтобы представить групповой адрес в веб-интерфейсе контроллера Wiren Board, нужно создать контрол виртуального [[MQTT]]-устройства с параметрами, заданными объекту в программе ETS: типом данных и групповым адресом. Несколько групповых адресов можно объединять в одно или несколько произвольных MQTT-устройств.


Далее вы можете работать с групповым адресом так же, как с обычным контролом: писать и читать из него текст, биты, целые знаковые и беззнаковые числа, числа с плавающей точкой.
В общем случае в KNX принята такая иерархия:
* Каждое KNX-устройство состоит из элементов, которые называются Точками данных (Data Point): реле переключателя, кнопка выключателя, сенсор в датчике и т.п.
* Эти точки данных называются Групповыми объектами (Group Object) и к ним привязаны групповые адреса.
* Каждый групповой адрес имеет определённый логический тип данных, который содержит как минимум одно поле данных.


Каждый контрол MQTT-устройства может работать в двух режимах:
Чтобы представить групповой адрес в веб-интерфейсе контроллера Wiren Board, нужно создать контрол MQTT-устройства с таким же типом, как и сам адрес. После этого вы сможете работать с групповым адресом как с обычным контролом виртуального устройства: писать и читать из него текст, биты, целые знаковые и беззнаковые числа, числа с плавающей точкой.
# ''MQTT'' — данные представляются в виде готовых к обработке значений и публикуются в контролы нужного типа: value, switch и т.п. Поддерживаются только типы данных, которые можно представить в виде контролов MQTT-устройства, список можно посмотреть по ссылке [https://github.com/wirenboard/wb-mqtt-knx/blob/master/datapointformat.md#%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-datapoint-%D1%82%D0%B8%D0%BF%D0%BE%D0%B2 Представление DataPoint типов].
# ''JSON'' — данные преобразовываются в JSON-сообщения, которые в виде текста помещаются в контрол и могут быть обработаны с помощью [[wb-rules]]. В этом режиме можно работать со специфичными для KNX типами, например, дата с днём недели. {{SupportedSinceRelease|release= wb-2204|nobanner= true}}


При настройке устройства в ETS старайтесь выбирать базовые типы, сервис поддерживает только их, например, <code>1.*1-bit</code> — это <code>1.xxx_B1</code> или <code>1.xxx_B1_JSON</code>, зависит от выбранного режима контрола MQTT-устройства.
Таким образом несколько групповых адресов можно объединять в одно или несколько произвольных MQTT-устройств.


Если нужного вам типа не оказалось, используйте в режиме MQTT специальный тип ''Raw_Value'' — это полученный массив байт, представленный в виде шестнадцатеричного числа, которое вы сможете самостоятельно преобразовать с помощью [[wb-rules]] и руководства [https://www.knx.org/wAssets/docs/downloads/Certification/Interworking-Datapoint-types/03_07_02-Datapoint-Types-v02.02.01-AS.pdf Datapoint-Types-v02.02.01-AS].
Каждый контрол MQTT-устройства может работать в двух режимах:
# ''MQTT'' — данные представляются в виде готовых к обработке значений и публикуются в контролы нужного типа: value, switch и т.п., доступные типы контролов смотрите в [https://github.com/wirenboard/conventions/blob/main/README.md Wiren Board MQTT Conventions].
# ''JSON'' — данные преобразовываются в JSON-сообщения, которые в виде текста помещаются в контрол.


<gallery mode="traditional" widths="260px" caption="Настройка и работа с KNX-устройством">
Мы рекомендуем использовать первый режим, но он пока не поддерживает некоторые специфичные типы групповых адресов, применяемых в KNX. Если вы столкнулись с типом, которого нет в списке режима MQTT — используйте режим JSON, так вы будете получать JSON-сообщения, которые можно с помощью [[wb-rules]] разбирать, обрабатывать и формировать ответ.
Image: ETS Group Object Config.png | Настройка группового объекта в программе ETS
Image: KNX MQTT Control Config.png | Настройка контрола MQTT-устройства в веб-интерфейсе контроллера Wiren Board
Image: KNX Switch WebUI.png  | Представление устройства в веб-интерфейсе контроллера Wiren Board
</gallery>


=== Настройка ===
=== Настройка ===
Для настройки Контроллера групповых адресов вы можете импортировать готовый проект из ETS, или настроить всё мышкой в [[Wiren Board Web Interface | веб-интерфейсе контроллера]] Wiren Board. Инструкцию по импорту смотрите ниже на этой странице, в разделе «Импорт из ETS».
Для настройки Контроллера групповых адресов вы можете импортировать готовый проект из ETS, или настроить всё мышкой в [[Wiren Board Web Interface | веб-интерфейсе контроллера]] Wiren Board.


{{Wbincludes:WebUI Change Access Level}}
{{Wbincludes:WebUI Change Access Level}}
[[Image: WB KNX Settings.png |300px|thumb|right| Пример настройки KNX-устройства в веб-интерфейсе контроллера Wiren Board ]]
[[Image: WB KNX Settings.png |300px|thumb|right| Пример настройки KNX-устройства в веб-интерфейсе контроллера Wiren Board ]]
 
Подготовка:
Первичная настройка:
# Перейдите '''Settings''' → '''Configs''' → '''KNX Group Object Configuration'''
# Настройте knxd по [[Knxd#Настройка | инструкции]].
# Перейдите '''Settings''' → '''Configs''' → '''KNX Group Object Configuration'''.
# Установите флажок '''Enable the KNX Gateway Device: knx/data'''
# Установите флажок '''Enable the KNX Gateway Device: knx/data'''
# Нажмите на кнопку '''Save''', чтобы сохранить настройки.
# Нажмите на кнопку '''Save''', чтобы сохранить настройки.


Создание MQTT-устройства для организации групповых объектов:
Создание MQTT-устройства для организации групповых объектов:
# Нажмите на кнопку ''' + Device'''.
# Нажмите на кнопку ''' + Device'''
# В появившемся новом устройстве укажите '''Device ID''' и опционально название '''Title'''.
# В появившемся новом устройстве укажите '''Device ID''' и опционально название '''Title'''
# Добавьте контролы и потом сохраните настройки нажатием на кнопку '''Save'''.
# Добавьте контролы устройства и потом сохраните настройки нажатием на кнопку '''Save'''.


Добавление контрола для группового объекта:
Добавление контрола для групповых объектов:
# Выберите в списке'''List of Devices''' нужное устройство.
# Выберите в списке'''List of Devices''' нужное устройство.
# Нажмите на кнопку ''' + Control'''.
# Нажмите на кнопку ''' + Control'''
# Укажите '''Control ID''' и опционально название '''Title'''.
# Укажите '''Control ID''' и опционально название '''Title'''
# Впишите групповой адрес объекта в поле '''Group Address''', используя один из форматов: <code>1/2/34</code>, <code>1/234</code>, <code>1234</code>.
# Впишите групповой адрес '''Group Address''' в одном из форматов: <code>1/2/34</code>, <code>1/234</code>, <code>1234</code>.
# Выберите из выпадающего списка '''Data point type''' тип точки данных группового объекта.
# Выберите из выпадающего списка '''Data point type''' тип точки данных группового объекта.
# Укажите интервал чтения группового объекта в поле '''READ poll interval for Devices (ms)'''. 0 — отключает опрос.
# Укажите интервал чтения группового объекта в '''READ poll interval for Devices (ms)'''. 0 — отключает опрос.
# Задайте максимальное время отклика от группового объекта в поле '''READ poll timeout for Devices (ms)'''. Если время ответа на запрос вышло, генерируется ошибка в топик '''meta/error'''. 0 — не генерировать ошибку.
# Задайте максимальное время отклика от группового объекта: '''READ poll timeout for Devices (ms)'''. Если время ответа на запрос вышло, генерируется ошибка в топик '''meta/error'''. 0 — не генерировать ошибку.
# Если групповой объект предназначен только для чтения, установите флажок '''Read only'''.
# Если групповой объект предназначен только для чтения, установите флажок '''Read only'''
# Повторите процедуру для всех групповых объектов и сохраните настройки кнопкой '''Save''' вверху страницы.
# Создайте нужные контролы, а в конце сохраните настройки нажатием на кнопку '''Save'''.


=== Работа с KNX-устройством ===
=== Преобразование  KNX данных в значение контрола ===


Сервис получает KNX-телеграмму, извлекает из неё данные и помещает их в контрол в соответствующий контрол MQTT-устройства. Если в состав группового объекта входит несколько полей, то на каждое поле создаётся свой контрол.
Преобразование учитывает тип точки данных группового объекта. Если в состав типа точки данных входит несколько полей, то на каждое поле создаётся свой контрол.


Если в групповом объекте одно поле, то топики будут выглядеть так:
Топики для приёма и отправки DataPoint типов содержащих только одно поле данных:
* Приём: <code>/devices/<knx_device_id>/controls/<knx_device_control_id></code>
* <code>/devices/<knx_device_id>/controls/<knx_device_control_id></code>
* Отправка: <code>/devices/<knx_device_id>/controls/<knx_device_control_id>/on</code>
* <code>/devices/<knx_device_id>/controls/<knx_device_control_id>/on</code>


Если в групповом объекте несколько полей, то топики будут выглядеть так:
Топики для приёма и отправки DataPoint типов содержащих несколько полей данных:
* Приём: <code>/devices/<knx_device_id>/controls/<knx_device_control_id>_<datapoint_field></code>
* <code>/devices/<knx_device_id>/controls/<knx_device_control_id>_<datapoint_field></code>
* Отправка: <code>/devices/<knx_device_id>/controls/<knx_device_control_id>_<datapoint_field>/on</code>
* <code>/devices/<knx_device_id>/controls/<knx_device_control_id>_<datapoint_field>/on</code>


где:
где:
Строка 134: Строка 119:


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


Подробнее про KNX флаги групповых объектов можно почитать в статье [https://support.knx.org/hc/en-us/articles/115003188089-Flags  Flags на сайте knx.org].
Подробнее про KNX флаги групповых объектов можно почитать в статье [https://support.knx.org/hc/en-us/articles/115003188089-Flags  Flags на сайте knx.org].
Строка 141: Строка 126:


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


=== Передача данных исполнительному устройству при изменении состояния датчика ===
=== Передача данных исполнительному устройству при изменении состояния датчика ===
Строка 154: Строка 139:
# Датчик при изменении своего состояния посылает исполнительному устройству KNX телеграмму с групповым адресом и APCI командой GroupValueWrite.
# Датчик при изменении своего состояния посылает исполнительному устройству KNX телеграмму с групповым адресом и APCI командой GroupValueWrite.
# knxd прослушивает телеграммы на шине и пересылает полученную телеграмму своим клиентам, в числе которых wb-mqtt-knx.
# knxd прослушивает телеграммы на шине и пересылает полученную телеграмму своим клиентам, в числе которых wb-mqtt-knx.
# wb-mqtt-knx по таблице соответствия, сформированной из файла конфигурации, находит MQTT контрол связанный с групповым адресом и  конвертирует KNX данные в значение, публикуемое контролом. Преобразование зависит от типа данных.
# wb-mqtt-knx по таблице соответствия, сформированной из файла конфигурации, находит MQTT контрол связанный с групповым адресом и  конвертирует KNX данные в значение, публикуемое контролом. Преобразование данных зависит от типа датапоинта.
# Изменение значения в контроле публикуется в MQTT. Подписчиками, в том числе являются движок правил и пользовательский интерфейс.
# Изменение значения в контроле публикуется в MQTT. Подписчиками, в том числе являются движок правил и пользовательский интерфейс.


Строка 165: Строка 150:
Как это работает:
Как это работает:
# Изменяется значение контрола, посредством публикации значения в топик <code>/devices/Device1/controls/control1/on</code>, что приводит к публикации значения в топик <code>/devices/Device1/controls/control1/</code>.
# Изменяется значение контрола, посредством публикации значения в топик <code>/devices/Device1/controls/control1/on</code>, что приводит к публикации значения в топик <code>/devices/Device1/controls/control1/</code>.
# Значение из топика <code>/on</code> преобразуются в данные для KNX телеграммы в зависимости от типа данных, связанного с контролом.  
# Значение из топика <code>/on</code> преобразуются в данные для KNX телеграммы в зависимости от типа датапоинта, связанного с контролом. # Формируется KNX телеграмма с KNX данными, адресом получателя GA1 и APCI командой ''GroupWalueWrite''. Адрес получателя равен групповому адресу связанному с контролом.
# Формируется KNX телеграмма с KNX данными, адресом получателя GA1 и APCI командой ''GroupWalueWrite''. Адрес получателя равен групповому адресу связанному с контролом.
# KNX телеграмма передаётся всем клиентам knxd и в KNX TP сеть.
# KNX телеграмма передаётся всем клиентам knxd и в KNX TP сеть.
# KNX телеграмму получают устройства 1 и 2. Обработка пакета c командой ''GroupValueWrite'' происходит только в групповом объекте m в устройстве 2, из-за того что в нём выставлен флаг W.
# KNX телеграмму получают устройства 1 и 2. Обработка пакета c командой ''GroupValueWrite'' происходит только в групповом объекте m в устройстве 2, из-за того что в нём выставлен флаг W.
Строка 208: Строка 192:
* '''ETS_CONFIG''' — путь к XML файлу экспорта групповых объектов
* '''ETS_CONFIG''' — путь к XML файлу экспорта групповых объектов
* '''WB_MQTT_KNX_CONFIG''' — путь к файлу конфигурации для работы с групповыми объектами <code>wb-mqtt-knx.conf</code>
* '''WB_MQTT_KNX_CONFIG''' — путь к файлу конфигурации для работы с групповыми объектами <code>wb-mqtt-knx.conf</code>
== Полезные ссылки ==
* [[KNX | О KNX]]
* [https://github.com/wirenboard/wb-mqtt-knx Описание сервиса wb-mqtt-knx на GitHub]
* [[KNX_Quick_start | Инструкция по настройке KNX-устройств]]
* [[knxd | Описание и настройка роутера Knxd]]
* [[WBE2-I-KNX_KNX_Extension_Module | Модуль расширения WBE2-I-KNX]]

Версия 10:54, 8 апреля 2022

Описание

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

За работу с KNX-устройствами в контроллерах Wiren Board отвечает установленный с завода сервис wb-mqtt-knx, который может работать в двух режимах:

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

Сетевой мост

В режиме сетевого моста сервис пересылает телеграммы из 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 принята такая иерархия:

  • Каждое KNX-устройство состоит из элементов, которые называются Точками данных (Data Point): реле переключателя, кнопка выключателя, сенсор в датчике и т.п.
  • Эти точки данных называются Групповыми объектами (Group Object) и к ним привязаны групповые адреса.
  • Каждый групповой адрес имеет определённый логический тип данных, который содержит как минимум одно поле данных.

Чтобы представить групповой адрес в веб-интерфейсе контроллера Wiren Board, нужно создать контрол MQTT-устройства с таким же типом, как и сам адрес. После этого вы сможете работать с групповым адресом как с обычным контролом виртуального устройства: писать и читать из него текст, биты, целые знаковые и беззнаковые числа, числа с плавающей точкой.

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

Каждый контрол MQTT-устройства может работать в двух режимах:

  1. MQTT — данные представляются в виде готовых к обработке значений и публикуются в контролы нужного типа: value, switch и т.п., доступные типы контролов смотрите в Wiren Board MQTT Conventions.
  2. JSON — данные преобразовываются в JSON-сообщения, которые в виде текста помещаются в контрол.

Мы рекомендуем использовать первый режим, но он пока не поддерживает некоторые специфичные типы групповых адресов, применяемых в KNX. Если вы столкнулись с типом, которого нет в списке режима MQTT — используйте режим JSON, так вы будете получать JSON-сообщения, которые можно с помощью wb-rules разбирать, обрабатывать и формировать ответ.

Настройка

Для настройки Контроллера групповых адресов вы можете импортировать готовый проект из ETS, или настроить всё мышкой в веб-интерфейсе контроллера Wiren Board.

Уровень «Администратор»

Для изменения настроек контроллера вам нужен уровень доступа Администратор, который можно выставить в разделе НастройкиПрава доступа.

После завершения настроек рекомендуем поставить уровень доступа Пользователь или Оператор — это поможет не совершить случайных ошибок при ежедневной работе с веб-интерфейсом.

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

Подготовка:

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

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

  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 тип точки данных группового объекта.
  6. Укажите интервал чтения группового объекта в READ poll interval for Devices (ms). 0 — отключает опрос.
  7. Задайте максимальное время отклика от группового объекта: READ poll timeout for Devices (ms). Если время ответа на запрос вышло, генерируется ошибка в топик meta/error. 0 — не генерировать ошибку.
  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 типа.

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


В случае, если у контрола MQTT-устройства выбран режим JSON, то в зависимости от выбранного типа контрола будут приходить сообщения вида:

  • 1.001:
    {"switch":true}
    
  • 10.001:
    {"Day":0,"Hour":22,"Minutes":1,"Seconds":2}
    
  • 21.002:
    {"UserStopped":true,"OwnIA":false,"VerifyMode":true}
    

Дальше вы можете обрабатывать их правилами wb-rules: читаете, обрабатываете, формируете ответное JSON-сообщение и отправляете. Прием и отправка JSON-сообщений не отличается от работы обычными 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