11 hours ago
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.
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
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