Работа с шиной 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 для актуализации данных и управления.