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


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.


RE: Bacnet IP - Loytec LIP-ME201C - gilles@domica.be - 11.02.2026

Thank you for your answers.

When we try direct connection, we do not recieve any value.
Changed every grp.write to grp.checkwrite => what is the COV to adapt the change?

Using the Bacnet tap, it is mostly not possible to read out the bacnet gateways simultanious when our resident script are running.
When we stop the script, and scan the selected device we get a proper answer.

Bacnet resident scripts disabled:
   

Bacnet resident scripts enabled
   


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

This scanner is very basic, it is actually better to use YABE or similar tool.
Checkwrite - https://kb.logicmachine.net/libraries/lua/#grpcheckwritealias-value--delta--status


RE: Bacnet IP - Loytec LIP-ME201C - gilles@domica.be - 12.02.2026

The checkwrite helps to minimize the busload.

We have to deal with several bacnet.read that gives a nil value.
Next cycle(s) we are getting the correct information.

Is there a best practice that we not process the nil values?
Or schould we use on each read an if routine ~= nil.


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

This is ok, you could also try adding some os.dealy() to slow it down a bit.