Haystack Niagara Network Actions

Points being discovered over the Niagara Network are unique points because they don't contain a normal write array. Therefore, they need custom actions to be commanded. This can also apply for other points that also don't have the write array inputs of 1-17. These unique points have to be commanded one for one. Meaning the action in FIN Stack has to match the one used in Niagara. Below is how to get this working.

What to do via browser

The user will login to their Niagara station via browser. Once logged in, run this query with your ip and port http://{IP Adress}/haystack/extended?function=makeDynamicWritable. Normally there is a check to see if the point is writable but from the Niagara Network, there is no way to tell because they are just (numeric point, boolean point exe.) What this does is goes through each point and checks to see if there is any 1 or more actions that isn't hidden in the slots. Of course the point also has to have the haystack slot as well (if not, It'll add it for you). Then it auto adds the writable tag. Then its recommended to rebuild cache after.

What to do in FIN Stack

First the user will upload the attached trio file through folio app. This will add a function that the actions will need in order to execute them with override status colors if you want, else it'll work without it.

Then they will add the appropriate actions for the point types.

Here is a few examples for boolean point actions (copy, paste, and clone):

ver:"2.0" expr,dis "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`emergencyActive`)); chWriteLev($self,1) end","Emergency Active" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`emergencyInactive`)); chWriteLev($self,1) end","Emergency Inactive" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`emergencyAuto`)); chWriteLev($self,17) end","Emergency Auto" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`active`), {duration: $duration}); chWriteLev($self,8) end","Active" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`inactive`), {duration: $duration}); chWriteLev($self,8) end","Inactive" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`auto`)); chWriteLev($self,17) end","Auto" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`set`), {value: $val}); chWriteLev($self,16) end","Set"

Here is an example for numeric point actions (copy, paste, and clone):

ver:"2.0" expr,dis "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`emergencyOverride`), {value: $val}); chWriteLev($self,1) end","Emergency Override" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`emergencyAuto`)); chWriteLev($self,17) end","Emergency Auto" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`override`), {value: $val, duration: $duration}); chWriteLev($self,8) end","Override" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`auto`)); chWriteLev($self,17) end","Auto" "do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`set`), {value: $val}); chWriteLev($self,16) end","Set"

Modifying Action Name, Write Level, and Duration

If a user wants to change the action name to be something else, or change write level, or change duration, they can change the below parts.

Action Name

This exists in the two spots. One in the action expression and the display name. Its important to make sure the name of the action in the expression is the same name of the action found in the slot sheet in Niagara under Name not Display Name. The display name can be whatever you want it to be. Below are the bold parts where the name exists in the corresponding order (expression and display).

"do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`override(niagaraName)`)); chWriteLev($self,8) end","Override(Display Name)"

Write Level

Here the user can determine what level they want that particular action to write to in FIN Stack. The bold is where to change this.

"do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`Active`)); chWriteLev($self,8) end","Active"

Duration

If the user wants to give their customers the option to use duration. They can do so by adding the bold part inside the action. If not, it can be removed. If adding it, don't forget to include a comma for separation.

"do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`Active`), {value: $val, duration: $duration}); chWriteLev($self,8) end","Active"

Exact Value

If the user wants to add an action with no value or duration option, then it would be set like below. It'll just be the action type and thats it, so once its selected, it commands the point to whatever the action is.

"do haystackInvokeAction($self->haystackConnRef, $self->haystackWrite.parseRef, toStr(`emergencyActive`)); chWriteLev($self,1) end","Emergency Active"