| Overview
Custom Control enables the combination of a SmartNode V2 and Connect Module to function as a programmable edge controller capable of executing custom automation logic locally. Using Sequencer for Edge, system integrators can create, deploy, and manage low-code sequences that run directly on the device, eliminating the need for additional PLCs or custom controllers for many building automation applications.
The SmartNode V2 provides field-level connectivity, including sensors, relays, analog outputs, and equipment interfaces, while the Connect Module serves as the runtime engine that executes custom sequences. Together, they allow users to implement application-specific control strategies such as HVAC equipment staging, pump lead-lag control, lighting automation, alarm generation, BACnet object creation, Modbus device integration, and other custom building automation workflows.
By running control logic locally at the edge, the solution enables faster response times, reduced dependency on cloud connectivity, simplified deployment, and greater flexibility for integrating third-party equipment and custom operational requirements.
| Low Code
Low Code is a software development approach that allows users to create applications and automation logic using visual building blocks, drag-and-drop components, and configurable workflows instead of writing large amounts of traditional programming code.
In Sequencer for Edge, Low Code enables users to build custom control sequences by connecting functional blocks such as inputs, relays, analog outputs, PI controllers, BACnet objects, and Modbus operations on a visual canvas. This allows system integrators and engineers to create custom automation logic without requiring advanced programming skills.
Benefits of Low Code:
- Faster development and deployment
- Reduced programming effort
- Easier maintenance and troubleshooting
- Greater flexibility for custom applications
- Rapid adaptation to changing project requirements
Using Low Code, users can quickly develop and deploy custom control applications such as HVAC equipment staging, pump lead-lag control, lighting automation, alarm generation, and third-party device integrations through a graphical interface rather than writing complex software code.
| Sequences for the Edge
As part of the low-code implementation initiative, Sequencer for Edge extends the Site Sequencer by enabling the creation and deployment of custom control logic. The introduction of Low Code mode in the Connect Module and SmartNode V2 allows devices to receive, store, and execute low-code sequences locally, supporting flexible and scalable edge-based automation and control solutions.
| Prerequisites
The following are a few prerequisites that are mandatory for enabling the sequences on the Edge
- The Connect module version must be V 1.3 and above.
- The Sequencer application in the internal portal needs to be accessed from a browser that supports the Chromium plug-in, which supports the web USB, to transfer sequences to the Connect module.
- A USB C-type cable for connecting the connect module to the Laptop.
| Accessing Sequencer for Device
To access Site Sequencer:
- Log in to the Internal Portal.
- Navigate to the top navigation bar and place the cursor over the three-dot (⋯) menu to access the list of available portal options.
- From the menu, select Site Sequencer.
- The Site Sequencer page opens.
- From the Select Site drop-down list, choose the site for which you want to create sequences.
- After selecting a site, the Site Sequencer page opens and displays the available sequence blocks and categories.
- Select the Device tab to view and create device-level sequences.
- Select the Device tab to view and create device-level sequences.
- The Device Sequences workspace opens with a default sequence displayed on the canvas. The workspace includes the block library on the left for selecting sequence blocks and the sequence canvas on the right for viewing and configuring device sequences.
| Creating Device Sequences
- Click the Add (+) icon next to Device Sequences to create a new device sequence page.
- Right-click the newly created sequence page and select Rename.
- Enter a name for the sequence and press Enter.
- The sequence page is renamed and saved successfully. A confirmation message is displayed indicating that the workspace has been saved.
- Drag and drop the required blocks from the block library onto the sequence canvas.
- Similar to the sequence holder blocks used in Cloud Sequencer, Device Sequencer includes two mandatory sequence holder blocks that define the execution flow of device-level logic, as shown below.
Device Sequencer includes two mandatory sequence holder blocks:
- On Startup: Executes the sequence once when the device starts up or reboots. Use this block for initialization tasks, such as configuring variables, setting default values, or initializing device parameters.
- Continuous Loop: Executes the sequence continuously at one-second intervals while the device is running. Use this block for recurring operations such as reading inputs, evaluating conditions, performing calculations, and updating outputs.
Note: All other sequence blocks used to build device logic must be placed within one of these mandatory sequence holder blocks. Blocks that are not contained within either the On Startup or Continuous Loop block will not be executed by the device.
| Generic Blockly Blocks
Similar to Cloud Sequencer, Device Sequencer includes a set of generic Blockly blocks that can be used to build custom device sequences. These blocks provide the core programming constructs required for creating sequence logic and are organized into categories such as:
- Logic: Conditional and comparison blocks for implementing decision-making logic.
- Loops: Blocks for performing repetitive operations.
- Math: Arithmetic and mathematical function blocks.
- Text: Blocks for creating and manipulating text values.
- Lists: Blocks for creating and managing lists of data.
- Variables: Blocks for defining, storing, and updating variables.
- Functions: Blocks for creating reusable logic within a sequence.
For more information on the Generic block, refer to Site Sequencer
| Predefined Connect Module Blocks
String to Print
Use this block to print a string,
You can combine this block with a Text block, as shown below, to achieve the desired result.
A Text block is used to display the label Relay Output 1 Register and the Modbus register number read for Relay Output 1.
Set Relay Output
Use this block to assign a state to a relay output and make it available for sequence execution.
You can combine the block, as shown above, with a Relay Output Number block and a Read Relay Output or Set Relay Output State blocks, to achieve the desired results.
Set Analog Output
Use this block to set an Analog Output Value to an Analog Output number to be used in the sequence.
You can combine this block with an Analog Output Number block and a Read Analog Output or Set Analog Output Value block, as shown below, to achieve the desired result.
Use this block to set a Universal Input Mode to a Universal input number to be used in the sequence.
You can combine the block, as shown below, with a Universal Input Number block and a Get Universal Input Mode & Read Universal Input Number blocks, to achieve the desired results.
Get Sensor Bus Value
Use this block to Get Sensor Bus Value from a sensor bus connection to be used in the sequence.
You can combine the block, as shown above, with a Sensor Number block and a Sensor Bus Type block, to achieve the desired results.
Get POR Bus Value
Use this block to Get POR Bus Value from a sensor connected over the PoR bus, addressed to a specific sensor number and sensor type.
Configure Home Screen Input
Use this block to configure a specific home screen input for home screen display.
You can combine the block, as shown above, with a numerical & text block to achieve the desired results.
Update Home Screen Input
Use this block to update a home screen input configured.
You can combine the block, as shown above, with a numerical & a variable to achieve the desired results.
PI Loop Block
Use this block to configure a PI Loop Output to be used in the sequence.
Conversion Scale Value
Use this block to configure a conversion scale value within a sequence.
You can combine the blocks, as shown above, to achieve the desired results.
| Blocks | Description/Usage |
| Use this block to set the output relay number and the corresponding relay state. | |
| Use this block to set the analog output number and the corresponding analog output value. | |
| Use this block to set the universal input mode, universal input number, and the corresponding universal input mode. | |
| Use this block to get the universal input value and the corresponding universal input value. | |
| Use this block to get the sensor bus value, sensor number, and the corresponding sensor type. | |
| Use this block to get the universal input mode number. | |
| Use this block to set the relay output number between 1 to 8. | |
| Use this block to set the relay output state to ON or OFF. | |
| Use this block to set the analog output number between 1 and 4. | |
| Use this block to set the analog out value. | |
| Use this block to set the universal input number between 1 to 8. | |
| Use this block to select the universal input mode as analog or through thermistor. | |
| Use this block to select the sensor bus type. | |
| Use this block to select the sensor number between 1 and 4. | |
| Use this block to run the sequence on startup. | |
| Use this block to run a sequence continuously for the allotted seconds. | |
| Use this block to select the standard sensor type among the given options. | |
| Use this block to get the universal input mode from the selected standard sensor type | |
| Use this block to convert the universal input value from the sensor type | |
| Use this block to write universal input value from the modbus register value | |
| Use this block to read the universal input number from the mapped modbus register | |
| Use this block to read the analog output from the modbus register | |
| Use this block to read the relay output from the modbus register. | |
| Use this block to configure the home screen input number, input name, input units, and the input value. | |
| Use this block to update home screen input number and corresponding input value. | |
| Use this block to get name from standard sensor type. | |
| Use this block to get units from standard sensor type | |
|
Use this block to imbibe PI controller process with: Controller Number Process Variable Setpoint Proportional Gain integral Gain Error Range integration Time (s) Sample Time (ms) |
|
| Use this block to set the PI Controller Number between 1 to 8. | |
| Use this block to set the modbus register type. Supported register types are Input, Holding, Coil (Discrete Coil) and Discrete (Discrete Input). | |
| Use this block to set the modbus register address. | |
| Use this block the read the modbus register type and the modbus register address. | |
| Use this block the write the modbus register type, address and the corresponding value | |
| Use this block to configure custom modbus register, type and address | |
| Use this block to set the input value, minimum input, maximum input, minimum output and maximum output for conversion scale. | |
| Use this block to enable the fail-safe for the sequence. |
These predefined connect module blocks can be used along with the generic blocky blocks to build the custom sequences for the connect module.
| BACnet Blocks
With the connect module capability to act as a server in an external BMS network, the sequencer for the edge now comes with BACnet objects and values configuration blocks, along with the read and write BACnet object blocks to read from and write to the configured objects.
| Blocks | Description |
| Use this block to configure a BACnet Analog Input Object Instance with an instance number, name, and units. | |
| Use this block to configure a BACnet Analog value Object Instance with an instance number, name, units, min, and max value. | |
| Use this block to configure a BACnet Binary Input Object Instance with an instance number, name, active, and inactive texts. | |
| Use this block to configure a BACnet Binary Value Object Instance with an instance number, name, active, and inactive texts. | |
| Use this block to configure a BACnet Multistate Input Object Instance with an instance number, name, and state text. | |
| Use this block to configure a BACnet Multistate Value Object Instance with an instance number, name, and state text. | |
| Use this block to write a value into the BACnet Analog Input Object Instance number. | |
| Use this block to write a value into the BACnet Analog value Instance number. | |
| Use this block to fetch the value from a BACnet Binary Value Object Instance number. | |
| Use this block to write a value into the BACnet Multistate Input Object Instance number. | |
| Use this block to write a value into the BACnet Multistate value Object Instance number. | |
| Use this block to fetch the value from a BACnet Multistate value Object Instance number. | |
| Use this block to define the units for the BACnet Analog Input object instance, during its configuration | |
| Use this block to define a BACnet instance number in all the configuration blocks that require an object instance initiation. |
Example Usage:
| Modbus Blocks
Read Modbus Register
Use this block to read a value from a specific Modbus register.
You can combine the blocks, as shown above, with a Modbus register type and address blocks to achieve the desired results.
Write Modbus Register
Use this block to write a value into a specific Modbus register.
You can combine the blocks, as shown above, with a Modbus register type, address, and numerical blocks to achieve the desired results.
Configure the datatype custom Modbus register
Use this block to configure a custom datatype modbus register.
You can combine the blocks, as shown above, with a Modbus register type, address, and datatype blocks to achieve the desired results.
Read datatype Modbus register
Use this block to read a value from a custom datatype Modbus register.
You can combine the blocks, as shown above, with a Modbus register type, address, and datatype blocks to achieve the desired results.
Write datatype Modbus register
Use this block to write a value into a custom datatype Modbus register.
You can combine the blocks, as shown above, with a Modbus register type, address, datatype, and numerical blocks to achieve the desired results.
Configure Custom Modbus register
Use this block to configure a custom Modbus register.
You can combine the blocks, as shown above, with a Modbus register type and address blocks to achieve the desired results.
| Blocks | Description |
|
Use this block to read the value from relay output. You can combine the blocks as shown below to achieve the desired results. |
|
|
Use this block to read an analogue output value You can combine the blocks as shown below to achieve the desired results. |
|
|
Use this block to read a universal input value. You can combine the blocks as shown below to achieve the desired results. |
|
|
Use this block to write to a universal input. You can combine the blocks as shown below to achieve the desired results. |
| Setting Low Code Mode on the Connect Module
To set the connect module to a mode that accepts the low-code custom sequence and run it.
From the Connect Module home screen UI
- Press the right arrow button to navigate to the Installer options screen.
- Press the down arrow button to navigate to the connect mode option.
- Press the right arrow button to access the mode setting screen.
By default, the connect module is set to the split mode to act as a Hyperstat split to provide the required control for the HyperStat Split CPU + Economizer profile.
- Press the down arrow to modify the comm option to Low code.
- Press the right arrow button to set the mode to low code.
The confirmation screen displays.
- Press the right arrow button to confirm the new mode configuration.
The device resets to the low-code mode, and the new home screen for the device in low-code mode displays as below.
| Connecting and Setting the Connect Module to Programmable mode.
- Connect the Connect Module to the laptop using a USB-C cable.
Setting the connect module to programmable mode:
- Power off the Connect Module.
- Press and hold the USB BTS button.
- While continuing to hold the button, power the device back on.
- The device enters Programming Mode.
| Connecting and Setting the Smat Node V2 to Programmable mode.
- Connect the Smart Node V2 to the laptop using a USB-C cable.
Setting the Smart Node V2 to programmable mode:
- Power off the Smart Node V2.
- Press and hold the USB DFU button.
- While continuing to hold the button, power the device back on.
- The device enters Programming Mode.
| Loading the Sequence to Connect Module
Once a sequence is created in the Site Sequencer application,
- Click Download on the sequencer for the device screen.
The compatible device available for loading the sequence displays in a pop-up window.
- Select the device and click Connect
The download/push successful message displays.
The sequence is pushed to the connect module and starts running on the device.
The counter and the information in the device's new home screen UI sign that the device accepted and ran the sequence successfully.
The number of runs can be tracked by a timer that starts in the connect module device home screen UI.
- Navigate further to the low-code status screen to visualize better details of the sequence running, as below.
The screen displays the following details
- Name of the sequence running on the device
- Sequence ID as signature
- Memory used by the sequence as size
- Number of times the sequence runs occurred as Run count.
| Errors
Errors
In case of a miss in the above-mentioned steps, the error message for the non-compatible device connected displays.
For laptops that do not support web USB, the device gets detected as shown below, which is not in the Device Firmware Update (DFU) mode or programmable mode.
When you face an error as shown above, this could be because the laptop used does not support web USB. For such scenarios, kindly follow the following steps to resolve the error.
- Download an appropriate WinUSB/libusb driver Zaidig using the following link
Zadig - USB driver installation made easy (akeo.ie)
- Launch the installer for the application.
- Click the Options menu in Zadig and select “List All Devices.”
- Select “DFU in FS mode” in the main drop-down.
- Select WinUSB in the target driver box & click Reinstall Driver.
The above steps would stop the error from reoccurring, and the web USB is enabled.
| Logs
For any failed scenario logs or if the user wants to visualize the logs for the connect module, it can be visualized in the Terra Term application.
To access tera term.
- Download the TeraTerm using the following link.
Tera Term Open Source Project (teratermproject.github.io)
- Install the Tera Term application.
- Launch the Tera Term application.
- Select the serial port and click OK.
The logs for the connect module start to display randomly
To organize the logs display
- Click Setup and select Terminal.
- Select the LF (line feed) from the receive drop-down in the pop-up window.
The connect module logs start to display in an orderly fashion.
| Video Introduction References
For more information or a quick guide, refer to the following videos.
- Configuring Home Screen Inputs Blocks in Sequencer on Edge
- PI Loop Blocks in Sequencer on Edge
- Modbus Register Configuration in Sequencer on Edge
- BACnet Object Configuration in Sequencer on Edge
Comments
0 comments
Please sign in to leave a comment.