Подключение KNX к MajorDoMo

Оборудование Комментариев нет

Работа с шиной KNX обеспечивается следующими сервисами:

Mosquitto (MQTT-брокер)

Calimero Server (программный KNX IP/Server)

MQTT2KNX (сервис обмена данными междй MQTT-брокером и шиной KNX)

Всё используемое ПО является кросс-платформенным, но в данном случае было запущено на Windows-машине. Работа на Linux-машине не будет принципиально отличаться, но команды компиляции и запуска сервисов будут несколько другие. Также в нашем случае работа с KNX-сетью производится напрямую с помощью USB-адаптера, но всё ниже описанное может работать и через сетевой KNX/IP-шлюз, разница лишь в том, что в таком случае не будет необходимости устанавливать Calimero.

Процедура первоначально установки сервисов

(Для наглядности все скачиваемые пакеты мы будем складывать в папку c:\KNX2MQTT\)

Mosquitto

До установки брокера необходимо установить библиотеку OpenSSL с официального сайта (http://slproweb.com/products/Win32OpenSSL.html) -- для установки достаточно Light-версии.

Сам брокер Mosquitto устанавливается как любое другое windows-приложение через скачивание установочного пакета с официального сайта https://mosquitto.org/download/

JDK

В первую очередь, должна быть установлена среда разработки JAVA (JDK). Обратите внимание, что не сокращённая версия для запуска JAVA-программ (JRE), а именно полная JDK. Устанавливается она с официального сайта (https://www.oracle.com/technetwork/java/javase/downloads/index.html) , необходимо иметь в виду, что для 32-битных систем нужно использовать более старую версию JDK (jdk-8u201-windows-i586.exe), а не новую (jdk-11.0.2_windows-x64_bin.exe).

После установки JDK необходимо добавить путь JAVA_HOME и обновить PATH в переменных среды. Делается это через свойство компьютера -> Дополнительные параметры систмы -> пункт Переменные среды:

В нашем случае JAVA_HOME: C:\Program Files\Java\jdk1.8.0_201

в Path было добавлено: %JAVA_HOME%\bin

Проверить корректность установки JDK можно простым запуском из консоли команды java. При этом должен быть выведен текст помощи.

Calimero-Server

Сервер Calimero скачивается из проекта на GitHub: https://github.com/calimero-project/calimero-server/releases

Выбираем последнюю версию в ZIP файле и распаковываем её в папку C:\KNX2MQTT\calimero-server-2.4-rc2\

Из этой папки запускаем команду сборки gradlew.bat build

В результате компиляции будет создан файл  C:\KNX2MQTT\calimero-server-2.4-rc2\build\distributions\calimero-server-2.4-rc2-2.4-rc2.zip

Распаковываем его в папку

C:\KNX2MQTT\calimero-server-2.4-rc2-2.4-rc2\

Создаём файл конфигурации C:\KNX2MQTT\calimero-server-2.4-rc2-2.4-rc2\bin\server-config.xml

следующего содержания:

<knxServer name="knx-server" friendlyName="My KNXnet/IP Server">
<discovery listenNetIf="lo" outgoingNetIf="lo" activate="true"/>
<serviceContainer activate="true" routing="true" networkMonitoring="true" udpPort="3671" listenNetIf="lo">
<knxSubnet type="usb">145c:1330</knxSubnet>
<knxAddress type="individual">1.1.40</knxAddress>
<additionalAddresses>
<knxAddress type="individual">1.1.41</knxAddress>
<knxAddress type="individual">1.1.42</knxAddress>
<knxAddress type="individual">1.1.43</knxAddress>
<knxAddress type="individual">1.1.44</knxAddress>
</additionalAddresses>
</serviceContainer>
</knxServer>

Обратите внимание на опцию идентификатора USB-устройства (145c:1330) -- здесь необходимо будет прописать свой адаптер. Так же обратите внимание на адресацию гупп (в нашем случае это адреса вида 1.1.1, но у вас могут быть другие).

В этом же каталоге есть файл запуска сервера и для старта должно быть достаточно запустить его командой calimero-server-2.4-rc2.bat server-config.xml

(для удобства можно вынести на рабочий стол ярлык с командой C:\KNX2MQTT\calimero-server-2.4-rc2-2.4-rc2\bin\calimero-server-2.4-rc2.bat server-config.xml)

KNX2MQTT

Пакет KNX2MQTT можно скачать из проекта на GitHub: https://github.com/sergejey/knx2mqtt

(кнопка Clone or Download, далее Download Zip)

Распаковываем архив в папку C:\KNX2MQTT\knx2mqtt-master\

Копируем туда же из C:\KNX2MQTT\calimero-server-2.4-rc2\ папку gradle и файл gradlew.bat -- они нам понадобятся для компиляции.

Компиляция происходит так же через запуск gradlew.bat build

После компиляции исполнительный файл появится по пути: C:\KNX2MQTT\knx2mqtt-master\build\libs\ knx2mqtt.jar

Для запуска сервиса KNX2MQTT создаём файл C:\KNX2MQTT\knx2mqtt.bat следующего содержания:

java -jar .\knx2mqtt-master\build\libs\knx2mqtt.jar knx.ip=127.0.0.1 knx.localip=127.0.0.1

Альтернативный вариант:

java -jar .\knx2mqtt-master\build\libs\knx2mqtt.jar knx.ip=127.0.0.1 knx.localip=127.0.0.1 knx.ets5projectfile="C:\Users\dm\Desktop\ets5.knxproj"

В последнем случае будет использован файл ETS-проекта и данные будут приходить не в виде групповых адресов, а в виде реальных названий устройств из проекта. Особенность такого использования -- он более ресурсоемкий и мы столкнулись с тем, что через некоторое время KNX2MQTT “зависает” и вовсе перестает выполнять свои функции (возможно, из-за большого количества устройств в проекте).

Вспомогательное программное обеспечение

MQTTfx

Программа работы с MQTT-брокером. Через неё можно подключаться к брокеру Mosquitto, подписываться через функцию Subscribe на топики для мониторинга событий в шине MQTT и отправлять сообщения по необходимому пути через функцию Publish.

Calimero-GUI

Диагностическая программа для работы с шиной KNX.

Порядок запуска

Mosquitto

Запускается через

"C:\Program Files\mosquitto\mosquitto.exe"

Сервис должен быть запущен обязательно раньше, чем MQTT2KNX. Так же необходимо иметь в виду, что система MajorDoMo пытается запустить внутренний коннектор к Mosquitto и если сервис не был запущен, то и коннектор не запустится. Проверить запуск коннектора (и запустить если нужно) можно через Панель Управления MajorDoMo, раздел Система -> XRay -> Services и посмотреть там cycle_mqtt -- если он запущен, то будет указано время последнего обновления зелёным, если нет, то следует его там же запустить через кнопку запуска (на запуск уходит 10-15 секунд, так что следует немного подождать и не запускать его сразу повторно)

Calimero Server

Запускается через C:\KNX2MQTT\calimero-server-2.4-rc2-2.4-rc2\bin\calimero-server-2.4-rc2.bat server-config.xml

Сервис должен быть запущен обязательно раньше, чем MQTT2KNX. Этот сервис обеспечивает виртуальный KNX/IP-шлюз и через него могут работать все другие программы, общающиеся с шиной KNX. В первую очередь, MQTT2KNX. Кроме того, этот сервис обеспечивает интерфейс для ETS, т.е. ETS может спокойно работать уже не напрямую с USB-адаптером, а с CalimeroServer (при этом адаптер не будет эксклюзивно занят, как в случае прямого подключения к нему из ETS).

MQTT2KNX

Запускается через

C:\KNX2MQTT\knx2mqtt.bat

Сервис запускается в последнюю очередь и обеспечивает трансляцию данных между MQTT-брокером и шиной KNX.

Настройка MajorDoMo

Работа с устройствами из MajorDoMo происходит через плагин MQTT. Данный плагин отображает все входящие события, поступающие в MQTT-шину и может отправлять данные по указанным MQTT-топикам.

При включенном сервисе KNX2MQTT данные приходят в виде топиков с префиксом knx/status/<GROUP_ADDRESS> . Например, событие от группы 0/0/37 придёт в виде топика knx/status/0/0/37 -- внутри будет JSON-сообщение, которое автоматически будет разобрано на дочерние топики. Например, топик knx/status/0/0/37/val отвечает за текущее значение узла. Таким образом, создав привязку устройства к топику knx/status/0/0/37/val мы будем иметь актуальное показание. Для того, чтобы у нас была возможность записывать новое состояние из MajorDoMo, необходимо указать путь записи (write) вида knx/set/<GROUP_ADDRESS>/<FORMAT>, где <FORMAT> это формат записываемых данных (может быть: bit, byte, word). Если формат не указан, то по-умолчанию используется bit (его же следует использовать для всех устройств типа выключатель). Таким образом, пример полной конфигурации устройства представлен ниже:

Собственно, на этом всё -- можно создавать устройства в системе MajorDoMo и настраивать связи с сетью KNX для актуализации данных и управления.

Поделитесь в соц сетях

Теги: