This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Rekuperator Nordic S4 BACnet communication
#1
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
Reply
#2
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
------------------------------
Ctrl+F5
Reply
#3
What do you get in Logs when writing? You might need to use a lower priority value.
Reply
#4
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
Reply
#5
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/ba...riority-12
Reply


Forum Jump: