1-for-1 Writes

1-for-1 Writes

This feature allows the ability for writes to be executed 1 for 1 for BACnet and Haystack. The standard FIN write logic only allows to write to a specific priority level that the user specifies in the “bacnetWriteLevel”/”haystackWriteLevel” tags. Now, the user can have the emergency actions write to priority level 1, manual to priority level 8, and set to priority 17, which is Relinquish default for BACnet (if available) or Fallback for Niagara and so on for the reset of the priority levels.

To switch from using the FIN write logic to the 1 for 1 write logic, the user needs to remove the “bacnetWriteLevel”/”haystackWriteLevel” tag from the point record. To mass remove this tag at any time, the user can run either query below in folio:

BACnet: readAll(point and bacnetWriteLevel).map x => diff(x, {-bacnetWriteLevel}).commit
Haystack: readAll(point and haystackWriteLevel).map x => diff(x, {-haystackWriteLevel}).commit
Both BACnet and Haystack: readAll(point and (bacnetWriteLevel or haystackWriteLevel)).map x => diff(x, {-bacnetWriteLevel, -haystackWriteLevel}).commit

BACnet 1 for 1 Writes

There will be scenarios where the point actions will need to be modified depending on the point configuration when it comes to BACnet. For example, some BACnet points may or may not have a Priority Array and/or the user may want to write to a unique proprietary property found on the point object etc. In these cases, some actions may not work and will need to be modified. Below are the recommendations per example types.

Has Priority Array

This means direct writes to the Present Value property. Emergency action will write to level 1, manual action will write to level 8, and set default action will write to the Relinquish Default property. The Set Null action will not write Null to the Relinquish Default property as BACnet does not accept null as a value for that property. Set Null action in general will not be used on any BACnet point, therefore should be removed across the database using the Action Category Permission tool. Action types for this type of point should look something like this but with whatever naming scheme chosen:

No Priority Array

This means direct writes to the Present Value property. The last write wins. The actions for this type of point should look something like this but with whatever naming scheme chosen:

Emergency action is kept and renamed to “Set”.

Relinquish Default property not writable

If a point does not have the Relinquish Default property configurable to write to it, then it would be best to remove the set default action as well to avoid any confusion and errors. Action types for this type of point should look something like this but with whatever naming scheme chosen:

Boolean/Real data type proprietary properties

This means direct writes to the proprietary property. The last write wins. For these, it would be best to keep one of the actions to write to it to avoid confusion. And null is not a valid value for these properties either. It would be best keep the emergency set action and just rename it to “Set” or whatever is preferred. Action for this type of point should look something like this but with whatever naming scheme chosen:

Enum Integer data type proprietary properties

This type of proprietary property needs a special action to write to it. Also null is not a valid value for these properties. For these types, it is recommended to command it via the actions only and cannot be controlled with a schedule, program etc because the action uses the bacnetWriteObjectProperty func to write directly to it. The expr for this type of action would be this:

bacnetWriteObjectProperty($self->bacnetConnRef, $self->bacnetWrite, $self->bacnetWrite.split(`:`.toStr)[2].parseNumber(), bacnetEnum(pointConvert($self, $self->writeConvert, $val)), 1)

In the actions editor, it would look something like this:

End result would still be a “Set” action or whatever name is preferred.

Another thing to keep in mind if renaming the emergency actions, be sure to change the hvac_finCat value as well that determines what level actions the user has access to. Most users have access to level 3 (set) or 6 (manual). They won’t be able to see level 9 if not changed (unless they have access to level 9) so when renaming also consider what level you would like to set that as.

Note

We are not supporting all proprietary properties, but for other unknown proprietary properties the bacnetWriteObjectProperty func can be used instead. The expr for the action for these will be something like below. Can only command them via the action not schedules, programs etc.

bacnetWriteObjectProperty($self->bacnetConnRef, $self->bacnetWrite, $self->bacnetWrite.split(`:`.toStr)[2].parseNumber(), bacnetUnsigned($val), 1)

Haystack 1 for 1 Writes

Haystack actions are more straight forward and simple than BACnet. An emergency command will write to priority level 1, manual to priority 8, and set to 17 (Fallback).