Logic Machine Forum
Bacnet Client app auto mapping - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Application Store (https://forum.logicmachine.net/forumdisplay.php?fid=11)
+--- Thread: Bacnet Client app auto mapping (/showthread.php?tid=3698)



Bacnet Client app auto mapping - AEK - 21.11.2021

Hi, I have Mitsubishi Electric ME-200 device. it control all AC devices in my project. it connectedd to LM via Bacnet app

I have abot 50 AC units and need to map about 10 variables for each.

every map takes about 5 to 30 seconds after pressing "save"

is there a way to make mapping automatic? or make "save" procedure faster?


RE: Bacnet Client app auto mapping - Erwin van der Zwart - 21.11.2021

I would never use 500 objects with the client, way to much…

The client is intended for limited amount of objects like a heatpump or some other device you need to add.

With your setup you should use a BMS as client and link it with BACnet server of the controller..


RE: Bacnet Client app auto mapping - AEK - 21.11.2021

(21.11.2021, 21:24)Erwin van der Zwart Wrote: I would never use 500 objects with the client, way to much…

I think sometime i could reduce amount of variables. at least I need 4 or 5 per AC unit (on/off, mode, fan, 1 or 2 setpoints).

but you dont answer. is there a way to make it faster?


RE: Bacnet Client app auto mapping - admin - 22.11.2021

You can use a script instead. But all communication (reading and writing) should be in a single resident script. Otherwise the communication can fail randomly if LM tries to read and write at the same time. If you need to read many objects at once you can use bacnet.scandevice():
https://forum.logicmachine.net/showthread.php?tid=3476&pid=22457#pid22457

Since instant reaction is not needed for AC units you can do it like this:
- Read current values from the AC unit, update status objects if needed
- Compare status values with current control values in LM objects, write back to BACnet if values are different
Keep in mind that setpoint values might have a slight difference due to how floating point numbers and handled so direct comparison might not work, use this:
Code:
if math.abs(control - status) > 0.1 then
  write()
end



RE: Bacnet Client app auto mapping - domotiqa - 26.11.2021

Hello,
I have a problem on customer Building.
I have setup communication with Air flow system Swegon with BAcnet Ip.

1/ My BIG PROBLEM is that when I try to map knx object to Bacnet Object, it's very long time to linked them (60sec).  Then if I try to link a second one it doesn't work anymore. I saw that the SL reboot. So I try again and see that the Memory usage go very high, so it(s very painful to link other objetc, I need to wait, re-scan... and doesn't work everytime.
2/ Is there a place where I can download the app for offline site ? The customer didn't give Internet access to Spacelynk in this building
3/ In the Bacnet app view, is there a way to display the current value (add column).
I used to deal with:
https://openrb.com/logicmachine-as-bacnet-client/
I installed the ipk, but looks like I can't anymore and can't use require bacnet library


RE: Bacnet Client app auto mapping - AEK - 20.08.2024

it took me a few years, but i made this:
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') 
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