Logic Machine Forum
Rekuperator Nordic S4 BACnet communication - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: General (https://forum.logicmachine.net/forumdisplay.php?fid=2)
+--- Thread: Rekuperator Nordic S4 BACnet communication (/showthread.php?tid=5764)



Rekuperator Nordic S4 BACnet communication - AlexLV - 26.11.2024

Hi,

I need help with BACnet. I created 10 sec resident script, and I can read all values I need from recuperator over LAN (resident script every 10 sec).

But I need also remotely change some parameters (working modes).

Advices needed:

1. How better build communication with recuperator if I need constantly read info from recuperator and periodically write some parameters to it?
2. What to write (type) for multistate value? Itried different variants, not working..
3. Do I need to stop my bacnet reading script to write to device?
4. Do I need to show Bacnet device IP or enough just show device ID?
 I used such variant to change instance 50 to 1, tot work:
Code:
require('bacnet')
res, err = bacnet.write(2, 'binary value', 50, true, 16)
log(res, err)
In manual 0 or 1 mentioned
And what to wrire for multistate value??

5. I can't change status of these parameters:

       Name:  Comfort button
Description: 
0 = Ventilation mode Away after Away delay timer duration [Pintval,318]. Also overrides Room operating mode [Mval,42].
1 = Ventilation mode according to Room operating mode [Mval,42].


Object type: Binary Value
Instance number 50
Priority 13
Access: RW
Range (present value): 
[0 : Inactive | 1 : Active]


Name: Heat recovery ventilation state
Description: Present Ventilation mode
Object type: Multistate Value
Instance number 361
Access: R
Range (present value): 
[ 1 : Off | 2 : Away | 3 : Home | 4 : High | 5 : Fume hood | 6 : Fireplace | 7 : Temporary high] | ]


Name: Room operating mode
Description: Select Ventilation mode.
Only works if Comfort button [Bval,50] = 1
If Comfort button [Bval,50] = 0, this register is Away.
(If ventilation mode control is active on a digital input,
the digital input overrides this register.)

Object type: Multistate Value
Instance number 42
Priority 13
Access: RW
Range (present value): 
[ 1 : Stop | 2 : Away | 3 : Home | 4 : High] | ]

My reading script (every 10 sec):
Code:
require('bacnet')
OutsideTemp = bacnet.readvalue(2, 'analog input', 1)
SupplyAirTemp = bacnet.readvalue(2, 'analog input', 4)
ExhaustTemp = bacnet.readvalue(2, 'analog input', 11)
ExtractTemp = bacnet.readvalue(2, 'analog input', 59)

S4OpMode = bacnet.readvalue(2, 'multi-state value', 42)
S4VentMode = bacnet.readvalue(2, 'multi-state value', 361)

OpTimeFilter = bacnet.readvalue(2, 'analog value', 285)
OpTimeFilterForReplacement = bacnet.readvalue(2, 'analog value', 286)

ComfortButton = bacnet.readvalue(2, 'binary value', 50)

SetPointT_Away_Sup = bacnet.readvalue(2, 'analog value', 1985)
SetPointT_Away_Exthaust = bacnet.readvalue(2, 'analog value', 1988)
SetPointT_Home_Sup = bacnet.readvalue(2, 'analog value', 1994)
SetPointT_Home_Exthaust = bacnet.readvalue(2, 'analog value', 2070)

CO2_Sensor = bacnet.readvalue(2, 'analog value', 2096)

FaultCounter = bacnet.readvalue(2, 'analog value', 2026)

Exhaustairfanspeedfeedback = bacnet.readvalue(2, 'analog input', 12)
Supplyairfanspeedfeedback = bacnet.readvalue(2, 'analog input', 5)

Exhaustairfanspeed = bacnet.readvalue(2, 'analog output', 4)
Supplyairfanspeed = bacnet.readvalue(2, 'analog output', 3)


Heatingcoilelectricposition = bacnet.readvalue(2, 'analog output', 29)
Heatingcoilvalveposition = bacnet.readvalue(2, 'analog output', 12)
Rotaryheatexchangerspeed = bacnet.readvalue(2, 'analog output', 0)

grp.update ('56/1/0', OutsideTemp)
grp.update ('56/1/1', SupplyAirTemp)
grp.update ('56/1/2', ExhaustTemp)
grp.update ('56/1/3', ExtractTemp)
grp.update ('56/1/4', S4OpMode)
grp.update ('56/1/5', S4VentMode)

grp.update ('56/1/6', OpTimeFilter)
grp.update ('56/1/7', OpTimeFilterForReplacement)

grp.update ('56/1/8', ComfortButton)

grp.update ('56/1/9', SetPointT_Away_Sup)
grp.update ('56/1/10', SetPointT_Away_Exthaust)
grp.update ('56/1/11', SetPointT_Home_Sup)
grp.update ('56/1/12', SetPointT_Home_Exthaust)

grp.update ('56/1/13', CO2_Sensor)

grp.update ('56/1/14', FaultCounter)

grp.update ('56/1/15', Exhaustairfanspeedfeedback)
grp.update ('56/1/16', Supplyairfanspeedfeedback)

grp.update ('56/1/17', Exhaustairfanspeed)
grp.update ('56/1/18', Supplyairfanspeed)

grp.update ('56/1/19', Heatingcoilelectricposition)
grp.update ('56/1/20', Heatingcoilvalveposition)
grp.update ('56/1/21', Rotaryheatexchangerspeed)

BR, Alexander


RE: Rekuperator Nordic S4 BACnet communication - Daniel - 26.11.2024

Use YABE and check what type of objects they are and what value do they accept.
PS. If you use direct connection mode (see our examples) then you can use event script for writing. Also use grp.checkupdate instead of grp.update


RE: Rekuperator Nordic S4 BACnet communication - admin - 26.11.2024

What do you get in Logs when writing? You might need to use a lower priority value.


RE: Rekuperator Nordic S4 BACnet communication - AlexLV - 28.11.2024

Hi,

Now I am a bit forward with controlling of recuperator, but some questions:

1. Does BACnet library has FORCED mode?
2. If I sent command with max priority - 1 can I reset somehow it through library? Problem now - I can switch modes though LM over BACnet, but recuperator's display not working correctly - always stay mode sent from LM. (As I understand, It has 13 priority) and how now disable priority 1 command I from LM don't know..

BR, Alex


RE: Rekuperator Nordic S4 BACnet communication - admin - 29.11.2024

1. What do you mean by forced mode?

2. Try using the same priority as the BACnet device uses. You can clear a value at a certain priority by writing nil:
https://kb.logicmachine.net/libraries/bacnet-client/#clear-device-binary-object-value-at-priority-12