KNX
Функционал поддерживается только для Pro версии.
Шлюз поддерживает работу по протоколу KNX начиная с версии 2022.01.07d10.
Шлюз работает в режиме монитора шины и все обнаруженные групповые объекты сохраняются во внутренней базе данных. На данный момент она рассчитана на 1000 адресов, возможно увеличение количества в дальнейшем.
Варианты подключения
- KNX TP (медная шина) - требует специализированного модуля сопряжения (в разработке)
- KNXnetIP/Tunneling (unicast) - подключение к KNX IP Interface / Router
- KNXnetIP Routing (multicast) - в данный момент не планируется, т.к. не гарантируется доставка пакетов
Просмотр базы
Просмотр базы групповых объектов производится в веб-интерфейсе на странице /knx.
Программирование через ETS
Планируется добавить функционал для программирования KNX через шлюз, т.е. использование шлюза как полноценного IP Interface.
При этом объекты находящиеся в базе будут отдаваться на запрос чтения без физического запроса в шину TP (кэширование), что значительно повышает скорость запуска визуализаций.
KNXnetIP/Tunneling
Когда выполнено подключение, шлюз отслеживает его состояния и переподключается если связь разрывается.
Подключиться можно из скриптов:
require("knx")
knx.beginIP()
knx.connect("172.16.1.88", 3671)
require("knx")
knx.beginIP()
knx.connect("172.16.1.88", 3671)
Отключение от IP Interface:
require("knx")
knx.disconnect()
require("knx")
knx.disconnect()
Возможно обнаружение в сети KNX IP Interface через функцию Discovery:
require("knx")
knx.beginIP()
knx.discovery()
require("knx")
knx.beginIP()
knx.discovery()
Информация об обнаруженных интерфейсах отображается в логе.
Типы данных
Стандарт KNX содержит несколько сотен типов данных, но используются в большинстве случаев их небольшое число.
Если тип для группового объекта не задан (Undefined), то используется его фактическое представление (Raw), если его длина 1-6 бит, то он содержится в первом байте значения, если длина 1 байт и больше, что первый байт значения должен быть 0x00.
Ознакомится с полным списком возможных типов данных можно в официальной документации KNX.
Поддерживаемые типы данных
- 1.001 DPT_Switch (Off / On)
- 1.008 DPT_UpDown (Up / Down)
- 1.017 DPT_Trigger
- 3.007 DPT_Control_Dimming
- 5.000 DPT_1ByteUInt (Базовый тип, целое число 0 .. 255)
- 5.001 DPT_Scaling (Диапазон 0 .. 100 %)
- 5.003 DPT_Angle (Диапазон 0 .. 360 °)
- 6.000 DPT_1ByteInt (Базовый тип, целое число -128 .. 127)
- 7.000 DPT_2ByteUInt (Базовый тип, целое число 0 .. 65 535)
- 8.000 DPT_2ByteInt (Базовый тип, число -32 768 ... 32 767)
- 9.001 DPT_Value_Temp
- 10.001 DPT_TimeOfDay
- 11.001 DPT_Date
- 17.001 DPT_SceneNumber
- 19.001 DPT_DateTime
Новые типы данных будут добавляться по мере необходимости.
MQTT
Для использования шлюза KNX-MQTT включите поддержку при инициализации knx.beginIP(true).
Шлюз публикует значение сконфигурированного группового объекта в топик вида:
knx/{GROUP_NAME}/{NAME}
Для изменения значения группового необходимо передать значение в топик вида:
knx/{GROUP_NAME}/{NAME}/set
Для отправки запроса на чтение значения группового необходимо отправить любое значение в топик:
knx/{GROUP_NAME}/{NAME}/get
HTTP
Прямое управление в разработке, на данный момент HTTP управление можно использовать через объекты.
Скрипты
Конфигурация группового объекта, задание типа и названия, а так же расположения:
require("knx")
knx.groupConf("1/2/200", "DPT_Value_Temp", "Actual temperature", "room_1")
require("knx")
knx.groupConf("1/2/200", "DPT_Value_Temp", "Actual temperature", "room_1")
Запрос на чтение группового объекта:
require("knx")
knx.groupRead("1/1/10")
require("knx")
knx.groupRead("1/1/10")
Полученные данные будут сохранены в БД.
Запрос на запись в групповой объект:
require("knx")
knx.groupWrite("1/1/10", 0x01)
require("knx")
knx.groupWrite("1/1/10", 0x01)
Получение значения группового объекта из базы:
require("knx")
local sw = knx.groupValue("1/1/10")
print(sw)
require("knx")
local sw = knx.groupValue("1/1/10")
print(sw)