| Overview
Site Sequencer is a 75F internal application. It is another milestone in the journey towards platform play and greater interoperability, of a wide range of BMS devices. It is an enhanced application that could be an alternative to wire sheet programming, which has existed for decades.
Site Sequencer with Blockly aims to make custom programming of Building Automation Systems effortless. Users can visually assemble building blocks to create a custom control sequence, for any HVAC or building automation application.
The new approach aims to help sequence building, similar to coding but with a UI interface. It features a fresh look and feel that is easily accessible, really appealing, and will dramatically streamline the overall logic programming workflow.
| Disadvantages With Wire Sheet Programming
Wire sheet programming is widely used to program custom sequences for various devices in the BMS world. However, it had the following disadvantages, which made it difficult for the integrator to use in the field.
- The slow and laborious process of creation
- Specialized training for users
- Lesser intuitive UI-based usage
- Spread across the canvas and for large sites navigation across this is always challenging.
- Input and out mapping tracking difficulties when you have various systems under integration.
- Limited Options concerning how local views are seen.
- Workbench management also gets very difficult to manage.
- Template Stations can be built but takes time to reconfigure their input and output.
- Sharing is difficult considering how workstations have to be managed for individual needs and common global views.
- Only HVAC folks are familiar with this.
| Advantages With Site Sequencer
The Site Sequencer is the new programming interface that will allow for custom sequences to be built for controlling control systems in the building space, addressing all the disadvantages the wire sheet programming had in itself.
- Having a site sequencer allows us to have an additional custom calculating and sequencing capability into a Site, apart from the predefined sequences that are already running at the CCU system level.
- The sequencer can create custom calculations and runs using the points of various equips that can exist in a Site.
- Sequencer allows calculations and logic blocks to be created that allow users like a Commissioning team member, installers, and partners to custom-build specific rules that need to be run periodically to achieve an outcome.
- Sequencer allows for entire sites created by third-party integrated BAS systems within the 75F cloud to have custom calculations done for their datasets.
- 75F sequencer with its 75F equipment and non-75F equipment on the same site to allow logic blocks to be built across its data sets to derive various output parameters or alerts.
- There are 75f connect modules kind of input/output extenders that can also be used to have custom sequences running and control equipment in a building. Sequencer can also be used for relays/analog ins and analog outs of SmartNodes, SmartStat, HelioNode, and HyperStats even if predefined profiles are running on them.
- The sequencer will allow to setting up of IFTT rules, and Alerts, allowing all ports in the 75F stream of equipment to fully be put into use.
- Installers and System Integrators will be able to make optimal use of the 75f deployed equipment and use all unused ports of the system. Site sequencer can also work on any point variable that is available in the Site Manager.
| Site Sequencer Capabilities
The site sequencer is enormously capable and can be put to use for a wide range of use cases, but the most efficient ways it can be put to use are categorized into the following.
- Creating custom sequences across the platform
- Creating rules based on points in the system
- Creating alerts based on other points in the system
| Site Sequencer Components
The Site Sequencer is made of two parts
- The Site Sequencer UI provides the canvas and the block to build the custom sequences.
- The Runner that deploys the created custom sequences to the site
Site Sequencer and Runner Framework form a common software infrastructure that builds custom, web-enabled logic for accessing, automating, and controlling smart devices in real time over the cloud.
| Site Sequencer UI
- Access Site Sequencer UI from the internal portal, as shown below.
The site sequencer UI displays, as shown below, with the option to select a site and create sequences for the same.
- Select the site for which the sequences need to be built.
The operator type list displays.
Note: The Site Sequencer uses Blockly blocks as the base, the Blockly blocks help in building sequences for simple to complex Calculations, Analytics, and Condition-based Control Triggers.
- Click an operator type to visualize the blocky blocks under it.
Tabs can be created, renamed or deleted to add new sequences on the canvas
- Click the icon to add a new tab to the sequence canvas
- Right click the tab to delete or rename the tab from the sequence canvas
| Logic Operators
- Use the blocks under the logic operators to build parts of the sequences that require logical decisions.
The table below talks about blocks under Logic operators.
Blocks | Description/Usage |
use the block to build an action sequence based on an if condition. Example:
|
|
use the block to build sequence steps that use the following logic operators for decisions.
Example: |
|
use the block to build sequence steps that use the following logic operators for decisions.
Example:
|
|
use the block to build sequence steps that use a NOT logic operator for decision.
|
|
use the block to build sequence steps that use TRUE or FALSE logic operators for decisions. |
|
use the block to build sequence steps that use the null operator to not return a value. |
|
use the block to build sequence steps that could return steps based on whether the tested step is True or False. |
| Loop Operators
- Use the blocks under the loop operators to build parts of the sequences that require looping.
The table below talks about blocks under Loop operators.
Blocks | Description/ Usage |
use the block to build a sequence step that is to be looped for n number of times before it can proceed to another step. | |
use the block to build a sequence step that is to be looped based on a while/until condition, before it can proceed to another step. | |
use the block to build a sequence step that is to be looped for n number of times between a range, with a defined skip. | |
use the block to build a sequence step that is to be looped for every number in the list. | |
use the block to break out of a looped sequence step. |
| Math Operators
- Use the blocks under the math operators to build parts of the sequences that require simple to complex mathematical calculations.
The table below talks about blocks under Math operators.
Blocks | Description/ Usage |
use the block to input just any random number with any sequence step. |
|
use the block to input a simple calculation with any sequence step that uses the following mathematical operators
|
|
use the block to input a simple calculation with any sequence step that uses the following mathematical operators
|
|
use the block to input symbol-based value or formula with any sequence step that uses the following symbols & formulae
|
|
use the block to insert a simple check with any sequence step that uses the following checks
|
|
use the block to insert a simple round-up method with any sequence step that uses the following round up types
|
|
use the block to insert a simple calculation or simple check to locate items in a list, with any sequence step that uses the following
|
|
use the block to insert a simple calculation to find the remainder of a division calculation, with any sequence step. |
|
use the block to insert a constrained value within a range with any sequence step. |
| Text Operators
- Use the blocks under the text operators to build parts of the sequences that require simple to complex text manipulations and findings.
The table below talks about blocks under Text operators
Blocks | Description/ Usage |
use the block to insert a simple test in any sequence step. | |
use the block to concatenate two strings in any sequence step. | |
use the block to punctuate paragraphs in any sequence step. | |
use the block to append a text to any item in any sequence step. | |
use the block to find the length of a string in any sequence step. | |
use the block to check if a string placeholder is empty in any sequence step. | |
use the block to find the first/last occurrence of a letter in a string, in any sequence step. | |
use the block to find a letter's occurrences in the following positions in a string, in any sequence step.
|
|
use the block to find substring in the following positions in a string, in any sequence step.
|
|
use the block to convert a string to the following, in any sequence step.
|
|
use the block to reverse a string, in any sequence step. |
|
use the block to count an alphabet in a string, in any sequence step. | |
use the block to replace an alphabet with another alphabet in a string, in any sequence step. | |
use the block to trim the spaces on left/right/both sides of a string, in any sequence step. |
| List Operators
- Use the blocks under the list operators to build parts of the sequences that require simple to complex list manipulations and findings from a list.
The table below talks about blocks under list operators.
Blocks | Description/ Usage |
use the block to create an empty list, in any sequence step as below.
|
|
use the block to create a list with a defined list of items, in any sequence step as below. |
|
use the block to create a list by repeating a specified item a, in any sequence step. | |
use the block to find the length of a list, in any sequence step. | |
use the block to verify if a list is empty, in any sequence step. | |
use the block to verify if a list is empty, in any sequence step. | |
use the block to find the first/last item in a list, in any sequence step. | |
use the block to get/get and remove/ remove items at the following positions, in any sequence step.
|
|
use the block to set/insert items at the following positions as something, in any sequence step.
|
|
use the block to get the sub-list items at the following positions, in any sequence step.
|
|
use the block to create a list from a delimited text string/ a delimited text from a list, in any sequence step. | |
use the block to reverse a list, in any sequence step. | |
use the block to arrange list items in numeric/ alphabetic/ alphabetic, ignore case, ascending or descending order, in any sequence step. |
| Variables
- Use the blocks under the variables to create variables, set variables to parameters, and change variables by a value, to help build parts of the sequences.
| Functions
- Use the blocks under the functions to create an action step as parts of the sequence steps.
The table below talks about blocks under functions
Blocks | Description/ Usage |
use the block to create an action step in any sequence step, as below Use the block to create functions with more inputs, as below.
|
|
use the block to create an action step in any sequence step that can return something, as below. |
|
use the block to retrieve something based on an if condition in any sequence. Note: This can only be used with a sequence block, as below |
Note: To try, understand, and get a good hands-on with the blocky default blocks and usage visit self-try blockly tutorial.
| Custom Primitives/ 75F Predefined Blocks
The site sequencer is built for extraordinary control capabilities, robust calculations, and complex Analytics. It comes with a full suite of the Blockly, along with customized 75f haystack-based predefined blocks. This makes it even more powerful.
- Use the blocks to create haystack-based operations as parts of the sequence steps.
The blocks added under this type are out of the box just like the other 75F products, and they do not require further manipulations or enhancements.
The table below talks about blocks under 75F haystack-based operators.
Blocks | Description/ Usage |
use the block:
|
|
use the block to introduce a haystack database query step within a sequence to query for a Point or Point List, or Point with the current value Example: To query for a physical equip point analog out 2 Example for a Point
The query block with point returning only the first instance of the query in the logs, when enabled and run with logs. |
|
use the block to introduce a haystack database query step within a sequence to query for a Point, Point List or Point with the current value. With an input that maps another point from the zone with the corresponding point queried earlier Example: A Tags-based haystack query to locate the desired temperature for the zones, and map the queried points with corresponding current temperature using the roomRef. Example for a Point List:
The query block with point list returning all instances of the query in the logs, when enabled and run with logs. Example for a point with current value:
The query block with point with current value returning the current value of the first instance of the point 72.5F. |
|
use the block to query more than one haystack point using the AND /OR operator in any sequence steps. Example: To query for the current temperature and humidity points from a zone Example usage Query with input using AND/OR operators:
The logs displaying the query, trying to fetch the current temp values for the specified roomrefs using the AND/OR operator. |
|
use the block to query and compare more than one haystack point using the Equal to /Not equal to operators in any sequence steps. Example: To compare and if the current temperature of the two zones is equal or not equal
Example usage Query with input using =/! = operators:
The logs displaying the query, trying to fetch the current temp values for the specified roomrefs using the =/! = operator. |
|
use the block to query more than a few haystack points using the NOT operators in any sequence steps, combining it with the AND and OR operators blocks mentioned above. Example: To filter the CO2 threshold point and not the tuner points
Example usage Query with input using NOT operator:
The logs displaying the query, trying to fetch the current temp values for all room refs except for the specified one. |
|
use the block to get the current value of a variable set for a potential haystack point. | |
use the block to get the historized values of a variable set for a potential haystack point, for a specified duration. | |
use the block to get the historized values of a variable set for a potential haystack point, for a specified number of days. | |
use the block to get the historized values of a variable set for a potential haystack point, for a specified Date range. | |
use the block to get the historized values of a variable set for a potential haystack point, for a duration within a specified Date range. | |
|
|
|
|
|
|
use the block to get the current value of a variable set for a potential haystack point at a specified priority array level. | |
use the block to write a value, at a priority array level of a variable set for a potential haystack point. | |
use the block to write the historized value of a variable set for a potential haystack point. | |
use the block to get the value for a key name from a variable set for a potential haystack point. | |
use the block to get the value for a key name from a variable set for a potential haystack point and display the same, or display anything you want. | |
use the block to add a comment in a sequence alongside a 75F predefined block. | |
use this block to create and assign a default value to a variable. |
|
use this block to set a value to a variable, so the variable value persists for every sequence run. Example: |
|
use this block to get the persisted value from the specified variable. Example: |
|
The site sequencer also comes with 75F proprietary alerting block, which provides out-of-box subblocks to specify all the parts of an alert. You can use it alongside any sequence steps in a sequence.
Below is an example sequence step using an alerting block: |
| Custom Functions
- Custom Functions hold pre-defined 75F blocks that help with bulk action.
The table below talks about blocks under the Custom Function section in detail.
Blocks | Description/ Usage |
Use this block to get the current value for multiple points at the specified priority array level. | |
Use this block to write values of multiple writeable points at the specified priority array level.
|
|
Use this block to write values of multiple historized points. |
|
Use this block to write values for multiple writeable & historized points as specified |
| Unit Conversions
- Use the blocks under the functions to create unit conversion as an action step as parts of the sequence.
The table below talks about blocks under the Unit conversion section in detail.
Blocks | Description/ Usage | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a temperature unit conversion step in a sequence, to convert values from or to Fahrenheit or Celsius or Kelvin, as in the table below. The Table below
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a pressure unit conversion step in a sequence, to convert values from or to psi or bar or pascal or inH2O or inHg, as in the table below
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add an Angular velocity unit conversion step in a sequence, to convert values from or to Rad/sec (Radian per second) or RPM (Revolutions per minute), as in the table below.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a velocity unit conversion step in a sequence, to convert values from or to m/sec (meters per second) or m/Hr (meters per hour), as in the table below.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a conditioned area unit conversion step in a sequence, to convert values from or to m2 (meter square) or ft2 (Feet square), as in the table below.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a volume unit conversion step in a sequence, to convert values from or to m3 (meter cube) or liter or Gallons, as in the table below
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add an Enthalpy unit conversion step in a sequence, to convert values from or to kJ/kg (Kilo Joule per Kilogram) or BTU/lb (British Thermal Unit per pound), as in the table below.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a Power unit conversion step in a sequence, to convert values from or to Watt or kJ/Hr (Kilo Joule per hour), as in the table below.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add a Force unit conversion step in a sequence, to convert values from or to N(Newton) or Pounds, as in the table below.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add an Enregy unit conversion step in a sequence, to convert values from or to BTU(British Thermal Unit) or kWh (Kilo Watt Hour) or Joule or Watt Hour, as in the below table.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Use this block to add an Air flow unit conversion step in a sequence, to convert values from or to M3/hr(meter Cube per hour) or ft3/hr(Feet Cube per hour), or L/s(Liters per second) or M3/s(meter Cube per second) or GPM(Gallons per minute) or CFM(Cubic Feet per minute), as in the below table.
|
| Sequence Templates
Sequence templates hold pre-built sequences that can be readily used in any sequence for action. This eases the complexity of recreating the sequence combinations everytime.
- Use the blocks under the functions to reuse any such template block as parts of the sequence.
The table below talks about blocks under the Sequence template section in detail.
Blocks | Description/ Usage |
Use the block to scale a numeric input value for a min-max input and min-max output. Example: The block follows the below logic. |
|
Use the block to map a value to a boolean value based on the threshold value. Example: Co2 value sensed for the threshold breach
The block follows the below logic.
|
|
use the block to include a resistance to temperature lookup, for a 75F 10K type thermistor input value used in a sequence, as below.
|
|
use the block to include a resistance to temperature lookup, for an external 10k type-2 thermistor input used in a sequence, as below. |
|
use the block to include a resistance to temperature lookup, for an external 10k type-2 thermistor input used in a sequence, as below. |
|
use the block to include a resistance to temperature lookup, for an external 1k thermistor input used in a sequence, as below. |
| Creating a Sequence
To create a sequence
- Drag and drop the required blocks from different operator-type sections onto the canvas, as below.
- Right-click on the blocks to carry out the following manipulations on a block.
Option | Description/ Usage |
Duplicate |
To duplicate a block to use again in the sequence Note: You can copy paste the block for use in the sequences |
Add Comment |
Add a comment on the block brings a question mark icon on the blocks as below.
|
Inline Inputs |
To add an inputs placeholder in line, as below |
Collapse Block |
To collapse the block and display minimized view of the block, as below. |
Disable Block |
To simply disable or grey out the block, as below. |
Delete Block | To delete a block from the canvas. |
Help | To visit the Blockly help center for information. |
Create 'get w' | To create a variable right from the canvas. |
- Arrange the blocky sequentially based on the purpose and usage, as below.
You can create and view more than a few sequences in the same canvas, as below.
- Click on the sequence headers to focus on the particular sequence, as below.
- Click Save & Run once the sequence is complete.
Note: The Save & Run button will not be enabled until the sequence is complete.
| Sample use Case & Sequence
Example Use Case 1
Below is a sequence created for a sample use case.
The sequence is created to constantly monitor the VOC values in zones of a building, compute the average VOV values for every minute, and generate an alert when the computed average values in greater than 1000 ppb.
The Table below talks about the steps and the blocks used in the sequence to achieve the use case.
Step | Block | Actions |
Step 1 | Sequence Block (Mandatory) |
|
Step 2 |
Define Variable |
|
Step 3 | Define Variable |
|
Step 4 |
For Loop |
For each item in the VOCPointList:
|
Step 5 | Average calculation |
|
Step 6 | Write the average value to |
|
Step 7 | Log Name |
|
Step 8 | If condition |
|
Step 7 | Alerting |
VOC Value Issue VOC Value beyond limit And the following notification VOC Value beyond limit |
Example Use Case 2
Below is another sequence created for a sample use case.
The sequence is created to constantly monitor the current temperature values in Modbus zones in a building and compute the average current temperature for every minute.
The Table below talks about the steps and the blocks used in the sequence to achieve the use case.
Step | Block | Actions |
Step 1 | Sequence Block (Mandatory) |
|
Step 2 |
Define Variable |
|
Step 3 |
For Loop
|
For each item in the CurrentTempPoints list:
|
Step 4 | Average Calculation |
|
Step 5 | Write the average value to |
|
Step 6 | Log Name |
|
Example Use Case 3
Below is another sequence created for a sample use case.
The sequence is created to constantly monitor and report the occupancy sensed in zones in the building for 30 Mins.
The Table below talks about the steps and the blocks used in the sequence to achieve the use case.
Step | Block | Actions |
Step 1 | Sequence Block (Mandatory) |
|
Step 2 |
Define Variable |
|
Step 4 |
For Loop |
For each item in the Occupancy point List:
If the length of test is equal to 0 (meaning the device is switched OFF no occupancy is detected and just a "-" is as value against the key Val)
If the length of the test is not equal to 0 (meaning the device is switched ON and occupancy is detected and a "0/1" is as value against the key Val)
|
Step 5 | Logging the Values |
|
Step 6 | Write Historized Value |
|
Step 7 | If condition to Switching OFF the lights |
|
| Saved and Shared Custom Blocks
Just like the other aspects of the 75F system (Summary Tables, Custom Heatmap Filter), the sequencer also supports the concept of sharing a good sequence created by one user to another as a value ad.
The same can be accessed from the Custom Block option, as below.
Users can access the functions/sequences created and shared by others, that can be reused.
- Drag and drop the shared functions/sequences onto the canvas to be used in the sequence being built, as below.
- Click the eye icon next to the shared block or double-click the dropped custom block to visualize what is in the block.
Like in the other tools, the block shared by others can only be visualized and not edited.
To save functions/ sequences under a custom block to be used in other sequences, or to be shared with the other users as a value add, users need to create the functions/ sequences inside the Sequence Library, as below.
Like in other tools the users can like and bookmark a shared block/function/sequence, and the ones with the highest number of likes and bookmarks are moved to the top of the list for people to locate them easily.
- Build the required function /sequence inside the library builder as below.
- Drag and drop the sequence block with why and what to clearly define the usage, from the custom primitives.
Note: The sequence block in the library builder is slightly different from the one in the sequence builder to serve the purpose.
- Click Create New Sequence to confirm the function /sequence to the custom block list.
A success message pops up, as below.
The added custom block can be visualized as below under the custom block option, and the same can be edited for further changes.
Just like in all the other tools, checks are in place to safeguard a sequence that has used a shared custom block.
When the user tries to edit shared blocks/functions/sequences the following message pops up for the user to act.
Comments
0 comments
Please sign in to leave a comment.