Rubix Wires is Nube-iOs browser based logical programming environment. It is a function block flow editor, so there is no coding required to make advanced control and monitoring programs. This type of visual programming tool is very useful when monitoring and debugging the operation of live programming. By dropping nodes onto a wiresheet, and linking them together, you can create real time automation systems to monitor and control your equipment and data.
Before you can use Rubix Wires, it must be installed, enabled, and configured using Rubix Platform.Rubix Platform is the central platform and user interface for Nube-iOs ecosystem. Rubix Platform is the main management tool for configuring Local/Remote Device Settings, Sensor Gateway Connectivity, Data Management, System Monitoring, and in this case Application Management.For more information on how to use Rubix Platform, see Rubix Platform: Getting Started Guide.For specific steps to install and update applications (including Rubix Wires) see Rubix Platform: Managing Apps/Services
Enter the URL AddressRubix Wires is a browser-based user interface. It can be accessed on any supported web browser (Chrome, Firefox, Safari, Internet Explorer, ...) by entering the IP Address, and Port Number [1313] in the browser's URL address bar.To open Rubix Wires first type in the IP address where Rubix Wires is running: this could be on a controller, a PC, or a web server. Next type a Colon [ : ]. Finally type the Port Number; the default port number for Rubix Wires is 1313. The URL Address should take the following form <IP Address>:<Port Number>For example: 192.168.15.10:1313Note: The IP Address or Port Number may be different if Rubix Wires is being accessed through a router or networking service with port forwarding enabled.If the device's IP address is unknown try the following:
- If you are accessing Rubix Wires on a Nube-iO Rubix Compute controller try IP Address 192.168.15.10 with the ETH-2 ethernet port connected to your PC. OR connect the ETH-1 ethernet port to your router and check your router DHCP devices for the IP Address. For further information see Rubix Platform: Access and Login.
- Try to use an IP scanning tool such as Angry IP Scanner or Advanced IP Scanner to find the device's IP address.
- Contact a network administrator to check the networking details for the device running Rubix Wires.
Login with User CredentialsOnce you have navigated to Rubix Wires, if you have not signed-in recently, a login screen will appear, prompting for a username and password.Note: If the username and password have not been changed, they will be the default values. The default username is admin and the default password is N00BWires (note there are 2 Zeros in N00B).
Rubix Wires is designed to be user friendly and intuitive, there are a few important features and naming conventions that you should become familiar with so that more advanced articles will be easier to follow.
Overview
There are two main views that are visible upon opening up the Rubix Wires programming tool; the Dashboard and Editor Panes. The Dashboard Pane is an interface for the user to monitor and control the workflow, whilst the Editor Pane is where the nodes and links are added to create the programming logic.
Dashboard Pane
To toggle the Dashboard Pane visibility ON or OFF, click on the ‘DASHBOARD’ button on the top right hand corner. The ‘DASHBOARD’ text will change from white to blue when toggled.The Dashboard Pane can be resized by dragging the divider between the Dashboard Pane and the Node Palette, left and right.
Editor Pane
To toggle the Editor Pane visibility ON or OFF, click on the ‘EDITOR’ button on the top right hand corner. The ‘EDITOR’ text will change from white to blue when toggled.
Menu Sidebar
To toggle the Menu Sidebar visibility ON or OFF, click on the ≡ button in the top left hand corner.
Node Palette
To toggle the Node Palette visibility ON or OFF, click on the ^ button in the top left hand corner of the Node Palette.
Context Menu
Right clicking on the Editor Pane will display the Context Menu. Different objects on the Editor Pane will have different Context Menu selections.
Editor Pane Mini Map
The Editor Pane Mini Map can be displayed by selecting ‘Toggle Map’ from the Context Menu. When the Editor Pane Map is toggled ON, it will be displayed in the top right corner of the Editor Pane. It shows an overview of the nodes on the Editor Pane.
Keyboard Shortcuts
Wires has Keyboard (and Mouse) shortcuts which can be used to quickly perform common Wires actions without opening the context menu.
Adding Nodes
Adding Nodes from the Context Menu
Right clicking on the Editor Pane opens the Context Menu. By clicking ‘Add’ you will see a list of all the available node groups. Clicking a group will show the nodes available in that group. Clicking a node will add it to the Editor Pane.
Adding Nodes from the Node Palette
The Node Palette shows the node groups. Clicking a node group will expand that group, showing the available nodes. Dragging a node from the Node Palette to the Editor Pane will add it to the Editor Pane.
Node Palette Search
To find nodes more easily in the Node Palette, a search feature is located at the top of the Node Palette. Typing in the ‘search’ bar will filter the nodes shown in the Node Palette to only those which match the search terms.
Cloning nodes
Nodes can be cloned (duplicated) by selecting ‘Clone’ from the nodes context menu. To clone multiple nodes, hold the shift key and select(click) the desired nodes to be cloned; An outline will appear around the selected nodes. Once the nodes are selected, pick ‘Clone’ from the context menu of any of the selected nodes.
Removing Nodes
To remove a node from the Editor Pane, select ‘Remove’ from the context menu of the node to be deleted. Alternatively you can select (click) the node to be removed and press the ‘Delete’ key on your keyboard.
To remove multiple nodes, hold the shift key and select(click) the desired nodes to be removed; An outline will appear around the selected nodes. Once selected either press the delete key on the keyboard or select ‘Remove’ from the context menu of any of the selected nodes.
Node Settings
Each node on the Editor Pane has settings that are used to configure its function or labelling. Settings are configured and saved for each individual node.
Node Settings Sidebar
To view a node’s settings, select ‘Settings’ from the context menu of the desired node. This will show the Settings Sidebar on the right of the Editor Pane. Settings values can be changed and will take effect once the ‘save’ button is clicked.
Locking the Node Settings Sidebar View
By default the Settings Sidebar will only be shown when required. However by clicking the padlock button (at the top of the Settings Sidebar), the Settings Sidebar can be locked in place. Selecting(clicking) a new node in the Editor Pane will change the Settings Sidebar to display the settings for the selected node. PLEASE NOTE: settings will not be saved unless the ‘save’ button is clicked before clicking on a different node.
Importing/Exporting Settings
Settings can be copied from one node, and imported to another. To do this, click the ⋮ button (at the top right of the Settings Sidebar); then click ‘Copy Settings’. Once the node settings configuration is copied it can be imported into another node of the same type.
Node Descriptions
Links to node descriptions can be found within Wires, by right clicking the node and selecting ‘Help’ from the context menu;
For a complete list of all nodes, including node categories, node descriptions and node functions, see Rubix Wires: Node Reference Guide
Node Inputs and Outputs
Nodes have different inputs and outputs based on the specific function they perform. Many nodes have settings which will change the available inputs and outputs.
Node Inputs
Node inputs provide values to be used in computing the node’s outputs. Wire links can be connected to the left hand side of node input slots. The image below shows the 4 inputs of a ‘min-on-off’ node.
Node Inputs from Settings
Some nodes have inputs with values that can be set from the Settings Sidebar. These inputs, which are shown in square brackets [ ], will use the value from settings when there is no value wired into the input slot. For example, [minOn] or [minOff] in the images above and below).When a value is wired into the input slot, the value from Settings will be overridden.
Variable Input Counts
Many nodes have a setting which will create/remove node inputs.
Node Outputs
Node outputs are the results of a nodes specific function. Wire links can be connected from the right hand side of node output slots. The image below shows the 1 output of a ‘min-on-off’ node.
Formatting Nodes
Node Names
Each node can have its name set from settings. This can help to identify each node to the user.
Node Width
A node’s width can be adjusted by dragging the bottom right corner left or right.
Node Collapse
Nodes can be collapsed by selecting ‘Collapse’ from the context menu, or by clicking the dot in the top left corner of the node. If a node has wire links, they will still be shown from the collapsed node, but inputs and outputs will not be shown.
Collapsed nodes:
Dashboard Nodes
Dashboard nodes are specialised types of nodes. When Dashboard nodes are added to the Editor Pane, the corresponding Dashboard Widget will be displayed on the Dashboard Pane. Likewise, removing a Dashboard node from the Editor Pane will remove the corresponding Dashboard Widget from the Dashboard Pane.
Creating Multiple Dashboards
By default, Dashboard Widgets are added to the Dashboard Panel of the Folder that the Dashboard Node is located. However this can be modified in the settings of each Dashboard Node. Changing the ‘UI Panel Name’ setting of a Dashboard Node will move the corresponding Dashboard widget to the named Dashboard Panel. Dashboard Panels can be selected in the Menu Sidebar.
For information on the functions of specific dashboard nodes, see: Rubix Wires: Dashboard Nodes
Linking Nodes to Create Logic Flows
The outputs of nodes can be wired/linked to the inputs of other nodes to create logic flows. Once an output is linked to an input, the value of the output is passed to the input of the linked node. For most nodes, the value is passed continuously; however, some nodes will pass their values asynchronously as messages.Example: The nodes below form a logic flow which increases the ‘count’ output every second (1000 millis).
Importing/Exporting Nodes and Logic Flows
Individual nodes, or groups of nodes and their links (logic flows) can be exported to the users clipboard. These exported flows can be saved (pasted into a text file). They can also be imported back into Rubix Wires.
The exported flow from above will result in the following text when pasted:[{"cid":0,"id":19,"type":"boolean/ticker","pos":[-85,-1750],"size":[178,51],"settings":{"interval":{"description":"Interval (millis)","value":1000,"type":"number"},"enable":{"description":"Enable","value":true,"type":"boolean"},"false":{"description":"Generate False","value":true,"type":"boolean"}},"properties":{},"flags":{},"inputs":{"0":{"hasSettings":false,"name":"[interval]","type":"number"},"1":{"hasSettings":false,"name":"[enable]","type":"boolean"}},"outputs":{"0":{"name":"output","type":"boolean","links":[{"target_node_id":20,"target_slot":1}]}},"_id":"c0n19"},{"cid":0,"id":20,"type":"count/counter","pos":[156,-1747],"size":[194.79999999999998,81],"settings":{"":{"description":""},"set value":{"description":"Set Value","value":0,"type":"number"}},"properties":{},"flags":{},"inputs":{"0":{"hasSettings":false,"name":"[set value]","type":"number"},"1":{"hasSettings":false,"name":"count up","type":"boolean","link":{"target_node_id":19,"target_slot":0}},"2":{"hasSettings":false,"name":"count down","type":"boolean"},"3":{"hasSettings":false,"name":"reset","type":"boolean"}},"outputs":{"0":{"name":"count","type":"number","links":null}},"_id":"c0n20"}]The exported flow can be imported by selecting ‘Import’ from the context menu.
Viewing Live Values
Live values, which are displayed on the right side of each input/output slot, can be toggled ON and OFF by clicking on Play button at the bottom right of Rubix Wires.
Runtime Logic
Pausing Runtime Logic
The runtime logic can be paused by clicking on the Pause button at the bottom right of Rubix Wires. This will stop the values being passed between nodes, and stop the node functions from being processed. When runtime is paused, the button will change to the Play button. Clicking the Play button will start the runtime logic.
Stepping Through Runtime Logic
The runtime logic can be paused by clicking on the Play button at the bottom right of Rubix Wires. Once paused the Step button can be used to step forward through the runtime logic. This allows the user to debug/examine the logic step by step to identify issues and confirm it is working as intended.
Hiding Wire Links
Wire links can be hidden so that the flows can be more easily understood. Clicking the Crossed Link (Hide Wire Links) button, at the bottom right of Rubix Wires. This will hide all wire links, except for the ones connected to selected nodes. Once clicked, the Hide Wire Links button will change to a Link (Show Wire Links) button. Clicking the Show Wire Links button will show all the wire links again. See the below image as an example.All links visible:
No links visible (no nodes selected):
Only links connected to ‘Counter’ are visible (‘Counter’ node selected):
Nodes can be grouped and organised by using folder nodes located in the `Container` category. Using folders to break large flows into groups of smaller sub-flows will help organize Rubix Wires flow programs so that they are easier to understand. Data can be passed in to and out of folders nodes to create advanced custom logic contained within your own node.
Creating Folders
Folders can be created like other nodes by adding them to the Editor Pane. Folders are located in the `Container` node category. Folders can also be created by selecting one or more nodes, and then selecting ‘Move To Container’ from the context menu; this will move all selected nodes and wire links to the new Folder.Folder Navigation
When a Folder node is created, it will appear in the Menu Sidebar under ‘Editor’. To go into a Folder, you can click on the entry in the Menu Sidebar, or select ‘Mode to Container’ from the Folder node’s context menu.
Once within the selected Folder, the Menu Sidebar will display any other Folders contained within the original Folder. To move 1 Folder level up click the entry on the Menu Sidebar.
Linking Folders
In order to pass values in and out of a folder, ‘Folder Input’ and ‘Folder Output’ nodes can be added within a Folder.
In the example below, ‘Container 3’ contains an ‘AND’ node. Which has its inputs linked to ‘Folder Input’ nodes and its output linked to a ‘Folder Output’ node. When viewed from outside of the Folder it has 2 input slots, and 1 output slot. This folder now has the same function as an ‘AND’ node; as inputs and outputs are passed into and out of the ‘AND’ block within the Folder. More complex logic can be contained within a folder, in this way, in order to make packaged custom functions.2 x ‘Folder Input’ and 1 x ‘Folder Output’ added to ‘Container 3’ Folder:
Looking at ‘Container 3’ Folder from ‘Main’ wiresheet:
For information on the functions of folder, folder-input, and folder-output nodes, see Rubix Wires: Container Nodes
Rubix Wires nodes have inputs and outputs that accept and produce data of specific types, such as strings, numerics, booleans, and JSON. Nodes automatically convert between compatible data types. it is important to understand how data types will be converted so that flow programming operates predictably.Rubix Wires has data types: Null, Boolean, Numeric, JSON, and String. Node input and output values have data types which dictate how they are interpreted. Although there is built in type checking and type conversion, it is always best to ensure that values being passed between linked nodes are of the intended data type.Boolean
Booleans are two state (digital) values. In Rubix Wires Boolean values are passed as ‘true’ or ‘false’. These could be equivalent to ON/OFF, START/STOP, RUNNING/STOPPED, YES/NO, ….
Numeric
Numerics are number values. They can be integers, or have decimal values.
String
Strings are text values made of characters. Strings can contain numbers but those numbers will be interpreted as text characters.
JSON
JSON is an open standard file format and data interchange format that uses human-readable text to store and transmit data objects consisting of attribute–value pairs and arrays. It is a common data format with diverse uses in electronic data interchange.
Null
Null is a valid value within Rubix Wires. Null can be used when passing a message where no Boolean, Numeric, or String value is appropriate. For most nodes, when Null is passed into it that input will be ignored, or Null will be passed on. However, if an input value is required for the node to operate, the node will not function. Null values can be generated by any ‘constant’ type node in the ‘Points’ category; It can also be entered directly into many node settings fields.For Boolean settings fields, null will be selectable from a drop-down option when applicable:For Numeric and String settings fields null will be passed when the settings field is left blank:
Data Type Intercompatibility
Boolean to Numeric
If a Boolean value is passed to a Numeric input:
- Boolean `true` will be interpreted as Numeric 1.
- Boolean `false` will be interpreted as Numeric 0.
Boolean to String
If a Boolean value is passed to a String input:
- Boolean `true` will be interpreted as String `true`.
- Boolean `false` will be interpreted as String `false`.
Numeric to Boolean
If a Numeric value is passed to a Boolean input:
- Numeric 0 will be interpreted as Boolean `false`.
- Numeric 1 will be interpreted Boolean `true`.
- All other Numeric values will be interpreted as Boolean `false`.
Numeric to String
If a Numeric value is passed to a String input it will be interpreted as the String value of the Numeric. For example Numeric 1234 passed to a String input will be interpreted as String `1234` (a string of text.)
String to Boolean
If a String value is passed to a Boolean input:
- String `true` or String 1 will be interpreted as Boolean `true`.
- All other String values will be interpreted as Boolean `false`.
String to Numeric
If a String value is passed to a Numeric input:
- If the leading portion of the String value is a number (eg. ‘123hello’), then it will be interpreted as a Numeric with the value of the leading numeric portion (eg. String ‘123hello’ will be interpreted as Numeric 123). This can include decimal values (eg. String ‘123.45hello’ will be interpreted as Numeric 123.45).
- Numeric portions of String values that come after a text (non-numbers) will be ignored (eg. String’ 123hello789’ will be interpreted as Numeric 123).
- String values that do not have a leading numeric portion will be interpreted as Null.
Data Type Checking
To ensure that the appropriate data types are passed, the ‘Type-Check’ node is available in the ‘Compare’ node category. This node has settings to select which data type you want to check for. It also has an output that will output the actual data type of the input.