20.08.2024, 16:30
it took me a few years, but i made this:
this is for Mitsubishy AE-200.
All you need to know is bacnet id of gateway an fill rooms. works few seconds instead of hours in GUI
Code:
--таблица номеров пемещений, названий, id бакнета
log('start bac mapping create')
rooms = {
{'CL.201_Лифтовый холл', 101},
{'CL.204_Мастер спальня', 102},
{'CL.205_Кабинет', 103},
{'CL.206_Игровая', 104},
{'CL.208_Коридор', 105},
{'CL.210_Спальня девочек', 106},
{'CL.213_Спальня мальчиков', 107},
{'CL.216_Спальня ЕГ', 108},
{'CL.111_Спальня мальчиков', 109},
{'CL.110_Гостиная 1', 110},
{'CL.110_Гостиная 2', 111},
{'CL.102_Мастер кухня', 112},
{'CL.108_Массажная', 113},
{'CL.105_Холл', 114},
{'CL.101_Тамбур', 115},
{'CL.0.18_Сигарная', 117},
{'CL.0.19_Кинозал', 118},
{'CL.0.11_Гостевая 1', 119},
{'CL.0.14_Гостевая 2', 120},
{'CL.04_Кухня персонала', 121},
{'CL.05.2_Спальня персонала 2', 122},
{'CL.05.1_Спальня персонала 1', 123},
{'CL.0.17_Постирочная', 124},
{'CL.01_Коридор и комната отдыха', 125}
}
--таблица KNX переменных для панелей и актуаторов отопления
KNX_t = {
{'current temp', 'temperature', {'clim'}},
{'setpoint', 'temperature', {'clim'}},
{'setpoint', 'temperature', {'clim'}},
{'room mode', 'switch',{'clim'}},
{'fan speed', dt.uint8},
{'heating value', 'scale'},
{'heating manual', 'switch'}
}
-- 1: 'id ending'_'datatype number'
bacnet_t ={
{'01_4', 'binary output', 'switch', 'OnOffSetup'},
{'02_3', 'binary input', 'switch', 'OnOffState'},
{'03_3', 'binary input', 'switch', 'AlarmSignal'},
{'04_13', 'multi-state input', dt.uint32, 'ErrorCode'},
{'05_14', 'multi-state output', dt.uint32, 'OperationModeSetup'},
{'06_13', 'multi-state input', dt.uint32, 'OperationModeState'},
{'07_14', 'multi-state output', dt.uint32, 'FanSpeedSetup'},
{'08_13', 'multi-state input', dt.uint32, 'FanSpeedState'},
{'09_0', 'analog input', dt.float32, 'RoomTemp'},
{'10_2', 'analog value', dt.float32, 'SetTemp'},
{'24_2', 'analog value', dt.float32, 'SetTempCool'},
{'25_2', 'analog value', dt.float32, 'SetTempHeat'},
{'26_2', 'analog value', dt.float32, 'SetTempAuto'}
}
-- создаем все адреса и готовим таблицу маппинга
start_knx_adr = knxlib.encodega('10/0/1')
start_bac_adr = knxlib.encodega('33/0/1')
mapping = {}
for i = 1, #rooms do
base_name = rooms[i][1]
bac_id = rooms[i][2]
--создаем чистый KNX, кроме Гостиной 2 - это для второго когдиционера
if base_name ~= 'CL.110_Гостиная 2' then
for j = 1, #KNX_t do
grp.create({
datatype = KNX_t[j][2],
address = knxlib.decodega(start_knx_adr +(i-1)*256 + j - 1),
name = rooms[i][1]..'_'..KNX_t[j][1],
tags = KNX_t[j][3]
})
end
end
--создаем виртуальные адреса для бакнета и заполняем таблицу маппинга
for k = 1, #bacnet_t do
bac_adr = knxlib.decodega(start_bac_adr +(i-1)*256 + k - 1)
grp.create({
datatype = bacnet_t[k][3],
address = bac_adr,
name = rooms[i][1]..'_'..bacnet_t[k][4]
})
bac_key = rooms[i][2]..bacnet_t[k][1]
mapping[bac_key] = {
['addr'] = bac_adr,
['type'] = bacnet_t[k][2],
['priority'] = 16,
['writeToBus'] = false
}
end
end
storage.set('app:se-bnc:DeviceObjects:3', mapping)
log('end bac mapping create')
All you need to know is bacnet id of gateway an fill rooms. works few seconds instead of hours in GUI