Appearance
The Workflow Editor
Last updated
The editor opens at /workflows/<id>. It has a toolbar across the top, the node palette on the left, the canvas in the middle and — only while a node is selected — the configuration panel on the right.

Toolbar
| Control | What it does |
|---|---|
| Back arrow | Returns to the Workflows list. Unsaved changes are lost |
| Name | Click to rename inline. The new name is saved with Save |
| Unsaved | Shown while the canvas has changes that are not saved |
| Enabled / Disabled | Turns the workflow's triggers on or off immediately (tooltip Workflow is active — click to disable / Workflow is inactive — click to enable). This is saved at once and does not save your other edits |
| Settings | Opens Workflow Settings: Name, Description (What does this workflow do?), the enabled status, and ID:, Created:, Updated: |
| History | Opens the run history. See below |
| Run Now | Starts a run of the last saved version (the button reads Running... while it starts), then opens History |
| Save | Saves name, description, nodes and wires. Grayed out until something has changed |
Warning: Run Now does not save first. If the Unsaved pill is showing, the run uses the old version. Save, then run.
Every Save of an enabled workflow re-registers its triggers. A Startup trigger does not fire again on Save — it fires only when the appliance starts. See Trigger Nodes.
Adding nodes
The palette groups nodes into Triggers, Logic & Control, Timers & Counters, Input / Output, Communication and Utility. Type in Search nodes... to filter. Hover an entry to read what it does.
- Click a node in the palette. (Nodes are added by clicking, not by dragging.)
- The node appears near the top-left of the canvas, slightly offset each time, and is selected.
- Drag it to where you want it.
- Fill in its fields in the configuration panel.
New nodes stack on top of each other in the same area; move each one before adding the next.
Connecting nodes
Every node has small dots (handles): inputs on its left edge, outputs on its right. Drag from an output dot to an input dot on another node to draw a wire. Handles have no text on the node — hover a dot to see its name. The dot's color tells you its type:
| Color | Type | Followed by the engine? |
|---|---|---|
| Gray | Flow (exec): In, Out, True, False, Done, Error, Branch 1… | Yes — this is how a run moves |
| Blue | Number, e.g. Value, Result, Count | No |
| Green | Text, e.g. Status, Email | No |
| Amber | True/false | No |
| Violet | Any | No |
| Orange | List, e.g. Rows[], Parts[], Log | No |
Warning: Only gray flow wires do anything. A wire from a blue Value output into a Left input looks like it passes the value, but it is ignored. Pass values with output variables and
{{name}}instead — see Variables and Data.
A flow output can have several wires; they run one after another (see How Workflows Run). Wires from a gray output into any input dot of the next node still start that node.
To delete a wire, click it and press Delete or Backspace.
Configuring a node
Click a node to open the configuration panel. The header shows the node type and its description.
| Field | Purpose |
|---|---|
| Node Label | The title on the node. Defaults to the node type name. For your own reading only — nothing else uses it |
| Configuration | The node's own fields, described per node in the reference sections |
| Delete Node | Removes the node and its wires. Selecting a node and pressing Delete or Backspace does the same |
With nothing selected the panel reads Select a node to configure it; click empty canvas to close it.
Pickers used by several nodes:
- Device — Select device... lists every configured device, including Local Tags.
- Tag Path — shows No tag selected and a small browse button that opens the tag browser. Choosing a tag fills in the Device too.
- Script / Workflow / Ladder Task — Select script..., Select workflow..., Select ladder task....
Note: Expression's Expression (return value), Send Email's Body (or {{var}}) and Call URL's Body (or {{var}}) are multi-line text boxes — type code or text as-is, with no quotes around it. Call URL's Headers (JSON) is the only box that needs JSON; if what you type isn't valid JSON, the box keeps your text and shows Not valid JSON in red underneath until you fix it. Details and examples are in each node's section.
Run history
History opens Run History with the 50 most recent runs, newest first. Each row shows completed, failed or running, what started the run, and the start time. Click a row for the Execution Log:
- Trigger: — what started the run: Run now, Tag change, Schedule, Network event and so on. For a tag trigger it also shows the tag and the value that fired it, such as Tag change · Line1/Temp = 87.5.
- Started: and Completed:, in your browser's time zone.
- The error message, in red, for a failed run.
- Step Log — one line per node that ran, with ✓, ✗ or – (skipped) and the node's internal type name (
read_tag,condition,send_email…). A Log node's line shows its message. Other nodes show a short summary of their outputs in gray. A failed node shows its error in red.
Variable values are not listed on their own; to see one while testing, write it out with a Log node (Temperature is {{temp}}).
History keeps the newest 500 runs of each workflow; older runs are deleted as new ones finish.
The executed path on the canvas
The canvas draws the path a run took over the workflow:
| Mark | Meaning |
|---|---|
| Green ring on a node | It ran |
| Amber, pulsing ring | It is running now (a live run) |
| Red ring | It failed |
| Gray ring | It was reached but went no further — a Join waiting for, or already passed by, another branch |
| Green wire | The run followed it (animated while a live run is on its way down it) |
When the editor opens it shows the most recent run. A run that starts while the editor is open — from a trigger, a schedule, a button or Run Now — replaces it and is drawn live, step by step. In History, open a run and click Show on canvas to draw that one instead. A pill in the toolbar names the run being shown (Path of run #… · completed, or Run #… — live); its × hides the overlay. The path is drawn from the run's step log, so it shows the workflow as it is now: after nodes are deleted or rewired, an older run's path can look incomplete.