wirenboard / wb-mqtt-knx

KNX to MQTT gateway
https://wirenboard.com/wiki/MQTT_KNX
Other
2 stars 0 forks source link
knx mqtt

KNX to MQTT gateway (C++)

KNX gateway

Пересылает телеграммы из 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}

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

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

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

Пример MQTT лога:

$ mosquitto_pub -t '/devices/knx/controls/data/on' -m "g:9/7/55 GroupValueRead"

/devices/knx/controls/data/on g:9/7/55 GroupValueRead
/devices/knx/controls/data i:0/0/0 g:9/7/55 GroupValueRead 0x00

$ mosquitto_pub -t '/devices/knx/controls/data/on' -m "g:9/7/55 GroupValueWrite 0x04"

/devices/knx/controls/data/on g:9/7/55 GroupValueWrite 0x04
/devices/knx/controls/data i:1/1/22 g:9/7/55 GroupValueWrite 0x04

$ mosquitto_pub -t '/devices/knx/controls/data/on' -m "g:9/7/55 GroupValueWrite 0x00 0xAA 0xBB"

/devices/knx/controls/data/on g:9/7/55 GroupValueWrite 0x00 0xAA 0xBB
/devices/knx/controls/data i:1/1/23 g:9/7/55 GroupValueWrite 0xaa 0xbb

Работа с Групповыми объектами KNX

Точкой данных в KNX называется "Групповой объект" (Group Object) или сокращенно "Объект". Каждое устройство KNX содержит как минимум одну точку данных (Data Point). Групповой объект представляет собой, например, реле исполнительного механизма переключателя. [1]

К групповому объекту привязан групповой адрес. Каждый групповой объект имеет определённый логический тип точки данных. Каждый логический тип точки данных содержит как минимум одно поле данных.

Групповые объекты могут быть двух типов:

Групповые адреса группируются в логические устройства MQTT согласно конфигу.

Структура файла конфигурации

Файл конфигурации находится по пути /etc/wb-mqtt-knx.conf. Редактируется вручную или через web интерфейс Настройки -> Конфигурационные файлы.

Имеет структуру:

{
    // Версия конфигурации. На данный момент используется версия 1
    "configVersion": 1,

    // Опция debug включает или выключает отладочную печать.
    // Опция -v командной строки wb-mqtt-knx также
    // включает отладочную печать
    "debug": true,

    // Опция включает KNX gateway. Отображается как отдельное устройство в топике /devices/knx
    "enableLegacyKnxDevice": true,

    // Список wb-mqtt устройств
    // Устройства предназначены для группирования объектов
    "devices": [
        {
            // Уникальный идентификатор устройства в MQTT.
            // Каждое устройство должено иметь уникальный ID
            // topic'и, относящиеся в MQTT к данному устройству,
            // имеют префикс /devices/<идентификатор топика>/...
            "deviceId": "ABB_UT22",

            // отображаемое имя устройства. Публикуется как
            // /devices/<идентификатор топика>/meta/name в MQTT
            "deviceTitle": "Universal interface",

            // Список групповых объектов которым соответствуют wb-mqtt контролы устройства
            "controls": [
                { ... },
                {
                    // ID MQTT контрола группового объекта. topic'и, соответствующие каналу,
                    // публикуются как /devices/<идентификатор устройства>/controls/<ID группового объекта>
                    "controlId": "Led1WithFeedback",

                    // Имя группового объекта
                    "controlTitle": "Led 1 with feedback",

                    // Тип данных группового объекта
                    // Может быть двух видов:
                    // - wb-mqtt - групповой объект представлен в виде контрола в wb-mqtt конвенции
                    // - json    - групповой объект представлен текстовым полем в котором передаётся json объект.
                    //             Название типа имеет постфикс "_JSON"
                    "dataPointType": "1.xxx_B1",

                    // Групповой адрес группового объекта.
                    // Определяет групповой адрес приёма телеграмм, или групповой адрес на который передаются телеграммы
                    "groupAddress": "1/1/2",

                    // Групповой адрес сообщения статуса. Необязательная опция.
                    // Опция задействуется, если исполнительное KNX устроство имеет функцию отправки статуса.
                    // В этой опции указывается адрес, на который отправится статусное сообщение.
                    // Полученное статусное сообщение изменяет значение контрола
                    "feedbackGroupAddress": "1/1/3",

                    // Включение режима "только для чтения"
                    "readOnly": false,

                    // Период опроса группового объекта в миллисекундах.
                    // В момент опроса групповому объекту посылается KNX телеграмма с запросом на чтение,
                    // и ожидается ответ.
                    // Если значение 0, то опрос не проводится
                    "readPollInterval": 0,

                    // Максимальное время ожидания ответа от группового объекта KNX устройства при опросе.
                    // Если время ожидангия превышено, выдаётся ошибка для этого контрола в .../meta/error
                    // Если значение 0, то опция не применяется.
                    "readPollTimeout": 0
                }
            ]
        },
        { ... }
    ]
}

Экспорт из ETS

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

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

$ wb-knx-ets-tool ETS_CONFIG WB_MQTT_KNX_CONFIG

, где