KNX
Зависимости проекта
- библиотека knx
dpkg -i libknx-1.2.6-debian_bullseye_amd64.deb
В зависимостях от этой библиотеки есть библиотека boost версии не ниже 1.74
sudo apt-get install libboost-dev
- библиотека mosquitto
sudo apt-get install libmosquitto-dev
- библиотека jsoncpp
sudo apt-get install libjsoncpp-dev
- библиотека vlib
- библиотека pthread
Предварительные условия
Логирование
Логирование по умолчанию выполняется в файл
/var/log/knx_driver/knx_driver.log
Пользователь, запускающий программу, должен обладать правами на запись в этот файл.
Параметром запуска -l
можно изменить имя файла. Каталог записи логов изменить нельзя.
Файл конфигурации
Драйвер читает конфигурацию из файла по умолчанию
/etc/driver.json
либо из файла, указанного параметром запуска -c
.
Описание конфигурации см. ниже.
Пример конфигурационного файла расположен в каталоге config
./config/driver.json
./config/driver_test.json
Параметры запуска
- -c - используется указанный файл конфигурации (полный путь) вместо файла по умолчанию
- -d - выводить в журнал отладочную информацию
- -l - выводить логи в указанный файл вместо файла по умолчанию
- -v - выводить логирование в указанный файл вместо файла по умолчанию
Пример запуска с параметрами
./_bin/knx_driver -d -v -c /etc/knx_driver/config/knx_driver.json
Описание конфигурации
Файл driver.json соответствует требованиям к файлам конфигурации драйверов нового поколения. Ниже приведены требования к
каждой из секций со стороны драйвера.
mqtt
Обязательна. Авторизация пока не реализована.
Пример:
"mqtt": {
"port": 1883,
"url": "localhost"
}
port.connection
Обязательна.
type: "knx.ip200". Другие типы игнорируются.
tcp: обязательна. Авторизация пока не реализована
enabled: по умолчанию true. Если false, порт игнорируется.
poll_interval: по умолчанию 60. Интервал опроса в миллисекундах.
Пример:
"connection": {
"enabled": true,
"poll_interval": 60000,
"rto": 2000,
"sto": 2000,
"type": "knx.ip200",
"tcp": {
"url": "opc.tcp://10.4.2.115",
"port": 54000
}
}
port.devices
Обязательна. Содержит описания устройств KNX.
name: обязательна. Используется в топике сообщений.
cname: обязательна. По ней ищется набор параметров.
sid: не обязательна. В настоящей реализации не используется.
enabled: по умолчанию true. Если false, игнорируется.
Пример:
{
"name": "dali1",
"sid": 1,
"cname": "dali1"
}
port.parameters.config
Обязательна. Содержит описания параметров KNX и связь с устройствами.
cname: обязательна. По ней ищется связь с устройствами.
channels: обязательна. Содержит описания параметров.
port.parameters.channels
Массив параметров. Каждый параметр описывается следующими атрибутами.
name: обязательно. Используется в топике сообщений.
address: обязательно. Групповой адрес. Три неотицательных числа, разделенных /.
DPTs: обязательно. Тип данных параметра. Строка вида DPST-N-N, где N - неотрицательное число.
Read: по умолчанию true. Возможность чтения значения параметра.
Write: по умолчанию true. Возможность записи значения параметра.
enabled: по умолчанию true. Если false, игнорируется.
Пример:
{
"name": "[group1]on_off",
"address": "1/2/1",
"DPTs": "DPST-1-1",
"Read": false,
"Write": true
}
Пример конфигурационного файла
{
"mqtt": {
"name": "KNX_9asud1_1",
"url": "localhost",
"port": 1883
},
"log": {
"max_size": 2,
"is_debug": false
},
"ports": [
{
"connection": {
"type": "knx.ip200",
"poll_interval": 60,
"tcp": {
"url": "10.51.12.2",
"port": 3671
},
"control": {
"port": 3674
},
"data": {
"port": 3675
}
},
"devices": [
{
"cname": "True_presence_multisensor_9_3",
"name": "ТВОУ 58 пом.б/н",
"sid": "1.1.58",
"type": null
},
{
"cname": "True_presence_multisensor_9_2",
"name": "ТВОУ 57 пом.б/н",
"sid": "1.1.57",
"type": null
}
],
"parameters": [
{
"cname": "True_presence_multisensor_9_3",
"config": {
"channels": [
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/1",
"name": "Absence"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/2",
"name": "Presence"
},
{
"DPTs": "DPST-9-4",
"Read": true,
"Write": true,
"address": "9/3/3",
"name": "Brightness_measured"
},
{
"DPTs": "DPST-9-4",
"Read": true,
"Write": true,
"address": "9/3/4",
"name": "Brightness_threshold"
},
{
"DPTs": "DPST-9-4",
"Read": true,
"Write": true,
"address": "9/3/5",
"name": "CL_Brightness_setpoint"
},
{
"DPTs": "DPST-7-5",
"Read": true,
"Write": true,
"address": "9/3/6",
"name": "Presence_stay_on_time"
},
{
"DPTs": "DPST-7-5",
"Read": true,
"Write": true,
"address": "9/3/7",
"name": "Absence_stay_on_time"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/8",
"name": "Logic_gate_disable"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/9",
"name": "Logic_gate_disable(status)"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/10",
"name": "Logic_gate_in1"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/11",
"name": "Logic_gate_in2"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/12",
"name": "Logic_gate_out"
},
{
"DPTs": "DPST-3-7",
"Read": true,
"Write": true,
"address": "9/3/13",
"name": "CL_dim_out"
},
{
"DPTs": "DPST-5-1",
"Read": true,
"Write": true,
"address": "9/3/14",
"name": "CL_brightness_value_out"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/15",
"name": "CL_switch_out"
},
{
"DPTs": "DPST-9-1",
"Read": true,
"Write": true,
"address": "9/3/16",
"name": "Temperature_measured"
},
{
"DPTs": "DPST-9-7",
"Read": true,
"Write": true,
"address": "9/3/17",
"name": "Humidity_measured"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/18",
"name": "TruePresence"
},
{
"DPTs": "DPST-14-58",
"Read": true,
"Write": true,
"address": "9/3/19",
"name": "Air_Pressure"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/3/20",
"name": "CO2_measured"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/3/21",
"name": "CO2_threshold"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/22",
"name": "CO2_output"
},
{
"DPTs": "DPST-14-58",
"Read": true,
"Write": true,
"address": "9/3/23",
"name": "Relative_Air_Pressure"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/3/24",
"name": "VOC_measured"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/3/25",
"name": "VOC_threshold"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/26",
"name": "VOC_output"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/27",
"name": "CL_teach"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/28",
"name": "CL_disable"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/3/29",
"name": "CL_Disable_status"
}
]
}
},
{
"cname": "True_presence_multisensor_9_2",
"config": {
"channels": [
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/1",
"name": "Absence"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/2",
"name": "Presence"
},
{
"DPTs": "DPST-9-4",
"Read": true,
"Write": true,
"address": "9/2/3",
"name": "Brightness_measured"
},
{
"DPTs": "DPST-9-4",
"Read": true,
"Write": true,
"address": "9/2/4",
"name": "Brightness_threshold"
},
{
"DPTs": "DPST-9-4",
"Read": true,
"Write": true,
"address": "9/2/5",
"name": "CL_Brightness_setpoint"
},
{
"DPTs": "DPST-7-5",
"Read": true,
"Write": true,
"address": "9/2/6",
"name": "Presence_stay_on_time"
},
{
"DPTs": "DPST-7-5",
"Read": true,
"Write": true,
"address": "9/2/7",
"name": "Absence_stay_on_time"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/8",
"name": "Logic_gate_disable"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/9",
"name": "Logic_gate_disable(status)"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/10",
"name": "Logic_gate_in1"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/11",
"name": "Logic_gate_in2"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/12",
"name": "Logic_gate_out"
},
{
"DPTs": "DPST-3-7",
"Read": true,
"Write": true,
"address": "9/2/13",
"name": "CL_dim_out"
},
{
"DPTs": "DPST-5-1",
"Read": true,
"Write": true,
"address": "9/2/14",
"name": "CL_brightness_value_out"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/15",
"name": "CL_switch_out"
},
{
"DPTs": "DPST-9-1",
"Read": true,
"Write": true,
"address": "9/2/16",
"name": "Temperature_measured"
},
{
"DPTs": "DPST-9-7",
"Read": true,
"Write": true,
"address": "9/2/17",
"name": "Humidity_measured"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/18",
"name": "TruePresence"
},
{
"DPTs": "DPST-14-58",
"Read": true,
"Write": true,
"address": "9/2/19",
"name": "Air_Pressure"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/2/20",
"name": "CO2_measured"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/2/21",
"name": "CO2_threshold"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/22",
"name": "CO2_output"
},
{
"DPTs": "DPST-14-58",
"Read": true,
"Write": true,
"address": "9/2/23",
"name": "Relative_Air_Pressure"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/2/24",
"name": "VOC_measured"
},
{
"DPTs": "DPST-9-8",
"Read": true,
"Write": true,
"address": "9/2/25",
"name": "VOC_threshold"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/26",
"name": "VOC_output"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/27",
"name": "CL_teach"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/28",
"name": "CL_disable"
},
{
"DPTs": "DPST-1-1",
"Read": true,
"Write": true,
"address": "9/2/29",
"name": "CL_Disable_status"
}
]
}
}
]
}