LogicMachine Forum
Bacnet IP - Loytec LIP-ME201C - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Bacnet IP - Loytec LIP-ME201C (/showthread.php?tid=6298)



Bacnet IP - Loytec LIP-ME201C - gilles@domica.be - 09.02.2026

Hello,

We are experiencing issues with BACnet communication between a LogicMachine and BACnet gateways (LOYTEC LIP-ME201C). We are using resident scripts to communicate with the BACnet devices.
We have two resident scripts running every 15 seconds, each reading values from a different BACnet/IP gateway (two separate BACnet/IP networks). At the moment, not all values are updating reliably.
At the same time, a Johnson Controls system is also using these BACnet gateways. The gateways are being used as BACnet MS/TP to BACnet/IP routers.

What is the best approach to read the BACnet devices and store the values into LogicMachine group addresses reliably?

Below is our current script for one BACnet gateway. The other script is similar, but for another building.
Code:
require('bacnet')
Buitentemperatuur = bacnet.readvalue(189074, 'analog value', 13506)
grp.write('3/2/0', Buitentemperatuur)
--------------------------------------
----Masterbathroom
--------------------------------------
GemetenTemperatuurMasterBath = bacnet.readvalue(189072, 'analog value', 22043)
log('GemetenTemperatuurMasterBath ' .. tostring(GemetenTemperatuurMasterBath))
log (GemetenTemperatuurMasterBath)
grp.write('3/1/45', GemetenTemperatuurMasterBath)
GewensteTemperatuurMasterBath = bacnet.readvalue(189072, 'analog value', 19607)
grp.write('3/1/46', GewensteTemperatuurMasterBath)
GewVerwarmenMasterBath = bacnet.readvalue(189072, 'analog value', 18325)
grp.write('3/1/47', GewVerwarmenMasterBath)
GewensteTemperatuurKoelenMasterBath = bacnet.readvalue(189072, 'analog value', 18319)
grp.write('3/1/48', GewensteTemperatuurKoelenMasterBath)
MomenteelVerwarmenKoelenMasterBath = bacnet.readvalue(189072, 'analog value', 18275)
if (MomenteelVerwarmenKoelenMasterBath == 1) then
  MomenteelVerwarmenMasterBath = true
  MomenteelKoelenMasterBath =  false
  grp.write('3/1/49', false)
  KoelenVerwarmenMasterBath =  false
elseif( MomenteelVerwarmenKoelenMasterBath == 3) then
  MomenteelKoelenMasterBath =  true
  MomenteelVerwarmenMasterBath = false
  grp.write('3/1/49', true)
  KoelenVerwarmenMasterBath =  true
else
  MomenteelKoelenMasterBath =  false
  MomenteelVerwarmenMasterBath = false 
end
if KoelenVerwarmenMasterBath then
  grp.write('3/1/53', GewensteTemperatuurKoelenMasterBath)
else
  grp.write('3/1/53', GewVerwarmenMasterBath)
end
grp.write('3/1/50', MomenteelVerwarmenMasterBath)
grp.write('3/1/51', MomenteelKoelenMasterBath)
RelatieveVochtigheidMasterBath = bacnet.readvalue(189072, 'analog value', 22460)
grp.write('3/1/52', RelatieveVochtigheidMasterBath)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Masterbedroom
--------------------------------------
VloerkoelingMasterBed = bacnet.readvalue(189074, 'multi-state value', 22823, 'present value')
log (VloerkoelingMasterBed)
grp.write('3/1/102', VloerkoelingMasterBed)
GemetenTemperatuurMasterBed = bacnet.readvalue(189074, 'analog value', 22817)
grp.write('3/1/0', GemetenTemperatuurMasterBed)
GewensteTemperatuurMasterBed = bacnet.readvalue(189074, 'analog value', 18281)
grp.write('3/1/1', GewensteTemperatuurMasterBed)
GewVerwarmenMasterBed = bacnet.readvalue(189074, 'analog value', 18323)
grp.write('3/1/2', GewVerwarmenMasterBed)
GewensteTemperatuurKoelenMasterBed = bacnet.readvalue(189074, 'analog value', 18318)
grp.write('3/1/3', GewensteTemperatuurKoelenMasterBed)
MomenteelVerwarmenKoelenMasterBed = bacnet.readvalue(189074, 'analog value', 18279)
if (MomenteelVerwarmenKoelenMasterBed == 1) then
  MomenteelVerwarmenMasterBed = true
  MomenteelKoelenMasterBed =  false
  grp.write('3/1/4', false)
  KoelenVerwarmenMasterBed =  false
elseif( MomenteelVerwarmenKoelenMasterBed == 3) then
  MomenteelKoelenMasterBed =  true
  MomenteelVerwarmenMasterBed = false
  grp.write('3/1/4', true)
  KoelenVerwarmenMasterBed =  true
else
  MomenteelKoelenMasterBed =  false
  MomenteelVerwarmenMasterBed = false 
end
if KoelenVerwarmenMasterBed then
  grp.write('3/1/8', GewensteTemperatuurKoelenMasterBed)
else
  grp.write('3/1/8', GewVerwarmenMasterBed)
end
grp.write('3/1/5', MomenteelVerwarmenMasterBed)
grp.write('3/1/6', MomenteelKoelenMasterBed)
RelatieveVochtigheidMasterBed = bacnet.readvalue(189074, 'analog value', 22813)
grp.write('3/1/7', RelatieveVochtigheidMasterBed)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Inkom 1v
--------------------------------------
GemetenTemperatuurInkom1V = bacnet.readvalue(189072, 'analog value', 22811)
grp.write('3/1/36', GemetenTemperatuurInkom1V)
grp.write('3/0/0', GemetenTemperatuurInkom1V)
GewensteTemperatuurInkom1V = bacnet.readvalue(189072, 'analog value', 18281)
grp.write('3/1/37', GewensteTemperatuurInkom1V)
GewVerwarmenInkom1V = bacnet.readvalue(189072, 'analog value', 18323)
grp.write('3/1/38', GewVerwarmenInkom1V)
GewensteTemperatuurKoelenInkom1V = bacnet.readvalue(189072, 'analog value', 18318)
grp.write('3/1/39', GewensteTemperatuurKoeleInkom1Vn)
MomenteelVerwarmenKoelenInkom1V = bacnet.readvalue(189072, 'analog value', 18279)
if (MomenteelVerwarmenKoelenInkom1V == 1) then
  MomenteelVerwarmenInkom1V = true
  MomenteelKoelenInkom1V =  false
  grp.write('3/1/40', false)
  KoelenVerwarmenInkom1V =  false
elseif( MomenteelVerwarmenKoelenInkom1V == 3) then
  MomenteelKoelenInkom1V =  true
  MomenteelVerwarmenInkom1V = false
  grp.write('3/1/40', true)
  KoelenVerwarmenInkom1V =  true
else
  MomenteelKoelenInkom1V =  false
  MomenteelVerwarmenInkom1V = false 
end
if KoelenVerwarmenInkom1V then
  grp.write('3/1/44', GewensteTemperatuurKoelenInkom1V)
else
  grp.write('3/1/44', GewVerwarmenInkom1V)
end
grp.write('3/1/41', MomenteelVerwarmenInkom1V)
grp.write('3/1/42', MomenteelKoelenInkom1V)
RelatieveVochtigheidInkom1V = bacnet.readvalue(189072, 'analog value', 22812)
grp.write('3/1/43', RelatieveVochtigheidInkom1V)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Inkom GLV
--------------------------------------
--GemetenTemperatuurInkom = bacnet.readvalue( 189071, 'analog value', 22464)
--log('GemTemp InkomGLV ' .. tostring(GemetenTemperatuurInkom))
--log(GemetenTemperatuurInkom)
grp.write('3/0/0', GemetenTemperatuurInkom)
GewensteTemperatuurInkom = bacnet.readvalue(189071, 'analog value', 18281)
grp.write('3/0/1', GewensteTemperatuurInkom)
GewVerwarmenInkom = bacnet.readvalue(189071, 'analog value', 18323)
grp.write('3/0/2', GewVerwarmenInkom)
GewensteTemperatuurKoelenInkom = bacnet.readvalue(189071, 'analog value', 18318)
grp.write('3/0/3', GewensteTemperatuurKoelenInkom)
MomenteelVerwarmenKoelenInkom = bacnet.readvalue(189071, 'analog value', 18279)
if (MomenteelVerwarmenKoelenInkom == 1) then
  MomenteelVerwarmenInkom = true
  MomenteelKoelenInkom =  false
  grp.write('3/0/4', false)
  KoelenVerwarmenInkom =  false
elseif( MomenteelVerwarmenKoelenInkom == 3) then
  MomenteelKoelenInkom =  true
  MomenteelVerwarmenInkom = false
  grp.write('3/0/4', true)
  KoelenVerwarmenInkom =  true
else
  MomenteelKoelenInkom =  false
  MomenteelVerwarmenInkom = false 
end
if KoelenVerwarmenInkom then
  grp.write('3/0/8', GewensteTemperatuurKoelenInkom)
else
  grp.write('3/0/8', GewVerwarmenInkom)
end
grp.write('3/0/5', MomenteelVerwarmen)
grp.write('3/0/6', MomenteelKoelenInkom)
RelatieveVochtigheidInkom = bacnet.readvalue(189071, 'analog value', 22467)
grp.write('3/0/7', RelatieveVochtigheidInkom)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Zwembad
--------------------------------------
GemetenTemperatuurZwembad = bacnet.readvalue(189071, 'analog value', 22812) -- 09/02/2026 22043 => 22812
grp.write('3/0/9', GemetenTemperatuurZwembad)
GewensteTemperatuurZwembad = bacnet.readvalue(189071, 'analog value', 19607)
grp.write('3/0/10', GewensteTemperatuurZwembad)
GewVerwarmenZwembad = bacnet.readvalue(189071, 'analog value', 18325)
grp.write('3/0/11', GewVerwarmenZwembad)
GewensteTemperatuurKoelenZwembad = bacnet.readvalue(189071, 'analog value', 18319)
grp.write('3/0/12', GewensteTemperatuurKoelenZwembad)
MomenteelVerwarmenKoelenZwembad = bacnet.readvalue(189071, 'analog value', 18275)
if (MomenteelVerwarmenKoelenZwembad == 1) then
  MomenteelVerwarmenZwembad = true
  MomenteelKoelenZwembad =  false
  grp.write('3/0/13', false)
  KoelenVerwarmenZwembad =  false
elseif( MomenteelVerwarmenKoelenZwembad == 3) then
  MomenteelKoelenZwembad =  true
  MomenteelVerwarmenZwembad = false
  grp.write('3/0/13', true)
  KoelenVerwarmenZwembad =  true
else
  MomenteelKoelenZwembad =  false
  MomenteelVerwarmenZwembad = false 
end
if KoelenVerwarmenZwembad then
  grp.write('3/0/17', GewensteTemperatuurKoelenZwembad)
else
  grp.write('0/0/17', GewVerwarmenZwembad)
end
grp.write('3/0/14', MomenteelVerwarmenZwembad)
grp.write('3/0/15', MomenteelKoelenZwembad)
RelatieveVochtigheidZwembad = bacnet.readvalue(189071, 'analog value', 22811)-- 09/02/2026 22467 => 22811
grp.write('3/0/16', RelatieveVochtigheidZwembad)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Leefruimte
--------------------------------------
VloerkoelingLeefruimte = bacnet.readvalue(189073, 'multi-state value', 22829, 'present value')
log (VloerkoelingLeefruimte)
grp.write('3/1/100', VloerkoelingLeefruimte)
GemetenTemperatuurLeefruimte = bacnet.readvalue(189073, 'analog value', 22043)
grp.write('3/1/18', GemetenTemperatuurLeefruimte)
GewensteTemperatuurLeefruimte = bacnet.readvalue(189073, 'analog value', 18281)
grp.write('3/1/19', GewensteTemperatuurLeefruimte)
GewVerwarmenLeefruimte = bacnet.readvalue(189073, 'analog value', 18323)
grp.write('3/1/20', GewVerwarmenLeefruimte)
GewensteTemperatuurKoelenLeefruimte = bacnet.readvalue(189073, 'analog value', 18318)
grp.write('3/1/21', GewensteTemperatuurKoelenLeefruimte)
MomenteelVerwarmenKoelenLeefruimte = bacnet.readvalue(189073, 'analog value', 18279)
if (MomenteelVerwarmenKoelenLeefruimte == 1) then
  MomenteelVerwarmenLeefruimte = true
  MomenteelKoelenLeefruimte =  false
  grp.write('3/1/22', false)
  KoelenVerwarmenLeefruimte =  false
elseif( MomenteelVerwarmenKoelenLeefruimte == 3) then
  MomenteelKoelenLeefruimte =  true
  MomenteelVerwarmenLeefruimte = false
  grp.write('3/1/22', true)
  KoelenVerwarmenLeefruimte =  true
else
  MomenteelKoelenLeefruimte =  false
  MomenteelVerwarmenLeefruimte = false 
end
if KoelenVerwarmenLeefruimte then
  grp.write('3/1/26', GewensteTemperatuurKoelenLeefruimte)
else
  grp.write('3/1/26', GewVerwarmenLeefruimte)
end
grp.write('3/1/23', MomenteelVerwarmenLeefruimte)
grp.write('3/1/24', MomenteelKoelenLeefruimte)
RelatieveVochtigheidLeefruimte = bacnet.readvalue(189073, 'analog value', 22813)
grp.write('3/1/25', RelatieveVochtigheidLeefruimte)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Keuken
--------------------------------------
VloerkoelingKeuken = bacnet.readvalue(189073, 'multi-state value', 22830, 'present value')
log (VloerkoelingKeuken)
grp.write('3/1/101', VloerkoelingKeuken)
GemetenTemperatuurKeuken = bacnet.readvalue(189073, 'analog value', 22043)
grp.write('3/1/27', GemetenTemperatuurKeuken)
GewensteTemperatuurKeuken = bacnet.readvalue(189073, 'analog value', 19607)
grp.write('3/1/28', GewensteTemperatuurKeuken)
GewVerwarmenKeuken = bacnet.readvalue(189073, 'analog value', 18325)
grp.write('3/1/29', GewVerwarmenKeuken)
GewensteTemperatuurKoelenKeuken = bacnet.readvalue(189073, 'analog value', 18319)
grp.write('3/1/30', GewensteTemperatuurKoelenKeuken)
MomenteelVerwarmenKoelenKeuken = bacnet.readvalue(189073, 'analog value', 18275)
if (MomenteelVerwarmenKoelenKeuken == 1) then
  MomenteelVerwarmenKeuken = true
  MomenteelKoelenKeuken =  false
  grp.write('3/1/31', false)
  KoelenVerwarmenKeuken =  false
elseif( MomenteelVerwarmenKoelenKeuken == 3) then
  MomenteelKoelenKeuken =  true
  MomenteelVerwarmenKeuken = false
  grp.write('3/1/31', true)
  KoelenVerwarmenKeuken =  true
else
  MomenteelKoelenKeuken =  false
  MomenteelVerwarmeKeukenn = false 
end
if KoelenVerwarmenKeuken then
  grp.write('3/1/35', GewensteTemperatuurKoelenKeuken)
else
  grp.write('3/1/35', GewVerwarmenKeuken)
end
grp.write('3/1/32', MomenteelVerwarmenKeuken)
grp.write('3/1/33', MomenteelKoelenKeuken)
RelatieveVochtigheidKeuken = bacnet.readvalue(189073, 'analog value', 22460)
grp.write('3/1/34', RelatieveVochtigheidKeuken)
-- wait for 1 second
os.sleep(0.2)
--------------------------------------
----Dressing
--------------------------------------
Vloerkoeling = bacnet.readvalue(189074, 'multi-state value', 22824, 'present value')
log (Vloerkoeling)
grp.write('3/1/103', Vloerkoeling)
GemetenTemperatuur = bacnet.readvalue(189074, 'analog value', 22043)
grp.write('3/1/9', GemetenTemperatuur)
GewensteTemperatuur = bacnet.readvalue(189074, 'analog value', 19607)
grp.write('3/1/10', GewensteTemperatuur)
GewVerwarmen = bacnet.readvalue(189074, 'analog value', 18325)
grp.write('3/1/11', GewVerwarmen)
GewensteTemperatuurKoelen = bacnet.readvalue(189074, 'analog value', 18319)
grp.write('3/1/12', GewensteTemperatuurKoelen)
MomenteelVerwarmenKoelen = bacnet.readvalue(189074, 'analog value', 18275)
if (MomenteelVerwarmenKoelen == 1) then
  MomenteelVerwarmen = true
  MomenteelKoelen =  false
  grp.write('3/1/13', false)
  KoelenVerwarmen =  false
elseif( MomenteelVerwarmenKoelen == 3) then
  MomenteelKoelen =  true
  MomenteelVerwarmen = false
  grp.write('3/1/13', true)
  KoelenVerwarmen =  true
else
  MomenteelKoelen =  false
  MomenteelVerwarmen = false 
end
if KoelenVerwarmen then
  grp.write('3/1/17', GewensteTemperatuurKoelen)
else
  grp.write('3/1/17', GewVerwarmen)
end
grp.write('3/1/14', MomenteelVerwarmen)
grp.write('3/1/15', MomenteelKoelen)
RelatieveVochtigheid = bacnet.readvalue(189074, 'analog value', 22460)
grp.write('3/1/16', RelatieveVochtigheid)
log("Doorlopen bacnetscript nieuwbouw - volledig")

When we log the last line, in the logs we see that it takes aproximatly 3min when the log is printed.

Kind Regards,
Gilles Franck


RE: Bacnet IP - Loytec LIP-ME201C - admin - 09.02.2026

Either use a single script for reading or use direct connection mode: https://kb.logicmachine.net/libraries/bacnet-client/#read-using-direct-connection-mode


RE: Bacnet IP - Loytec LIP-ME201C - Daniel - 09.02.2026

Also use grp.checkwrite insted of grp.write to avoid unnecessary bus writes.