Skip to content

✏️ Flow Types

The default flow in automation design is provided by "push" type connections. These connections allow the automation flow to reach other blocks by following the connections that depend on the outputs of a block that has completed its work. However, you can create flows that go from the very simple to the complex.

When blocks are connected sequentially (in series), the automation flow proceeds by running these blocks sequentially.

A-sequence-flow

If there is more than one connection on an output, the automation flow follows the connections according to their order and operates the connected blocks. Connections on a single output are sorted in the order they were added. You can change the order later if you want.

Working-order-of-blocks-A-B-C-D-E

Sequence and Parallel Together

Section titled Sequence and Parallel Together

Automation flow gives priority to sequence flow that are a combination of serial and parallel connections. In other words, the output coming out of the main block runs the first sequence flow in parallel. When this sequence flow is completed, the other sequence flow in parallel starts.

working-order-A-B-C-D-E

Flow with More than One Output

Section titled Flow with More than One Output

If a block has more than one output, the connections of the outputs are not followed simultaneously, but in order on the block. Outputs are sorted from top to bottom on the block in the editor.

Working-order-of-blocks-A-B-C

Flow with More than One Output and in Parallel

Section titled Flow with More than One Output and in Parallel

Where the blocks has multiple outputs and some outputs have multiple connections, the flow follows each output sequentially. In the output, the connections are followed in order among themselves.

Working-order-of-blocks-A-B-C-D

In the case where the automation flow connects on different inputs of a block, for the block to work, all its connected inputs must be activated. An input becomes active when one of the connections linked to it becomes active and uses the value of that connection.

In the image below, when the flow reaches block C for the first time by following blocks A and B, it cannot be run because the second input of block C is not yet active. Therefore, this connection of the automation flow terminates and the flow follows the second connection of block A to reach block D and C in turn. When block C is connected a second time, it runs because all its inputs are active.

Working-order-of-blocks-A-B-C-(not-work)-D-C

As shown in the image below, the output from blocks A and B has been activated and the output has been moved to block C. But since the second output of the A block is not activated in the automation flow, the second input of the C block is not active. So the first time block C is accessed, it will not work. However, when block C is reached by following the second input of component A, block C now works.

Working-order-A-B-C-(not-work)-C

In the case where two connections link on a single input of a block, C will run every time C is reached, as all inputs of C are active when block C is reached by following connection.

Workin-order-A-B-C-D

This automation flow can be used when the same operations need to be repeated for the data obtained as a result of different operations.

The connection structure that enables a block to reach itself when the connections from the output of a block to the inputs of other blocks are followed as a chain is called a circular flow.

Direct and indirect circles are not allowed in the automation flow, as an example of which are shown below. Automations with a circular connection will not run.

Not-working-flow

A conditional branching of the automation flow takes place using blocks that have multiple outputs, each of which is activated or not activated depending on a certain condition, as shown below. There is a special condition component so you can branch the automation flow by specifying your own branching rules.

Conditional-Flow

Iteration in the automation flow is created with iteration components. These components cause elements to repeat a specified number of times. Once the iteration block is activated in the automation flow, it repeatedly activates its outputs with different values. That is, the next element of the list or the number of iterations is output. This iteration continues until it is time to stop. You can do this from the settings of iteration component.

Iteration components have two different types of output that are activated during each iteration and when all iterations are complete. These two separate types of outputs are not activated at the same time. The output activated during each iteration is shown as 1 in the image below. These outputs can be multiple. It can provide iteration-related values, such as the repeating list element and the iteration count, and allows blocks to be connected and run during each iteration. In the same image, when all iterations are completed, the activated output is shown with 2. This output ensures that other processes that need to run in the automation flow after iterations run and the automation flow continues.

Working-order-A-I-(iterated)-B-(iterated)-C-(iterated)-I-(iterated)-B-(iterated)-C-(iterated)-…-I-(completed)-D-(completed)-E-(completed)

Blocks can be connected in an automation flow in such a way that a block provides output values to the blocks that come after it, without being directly connected to a preceding block. This connection style is known as a 'pull connection.' Unlike the 'push' connection where blocks connected in this manner are triggered to work due to the execution of preceding blocks, in a 'pull' connection, the blocks connected receive the values they need from a block that comes after them. This enables smoother communication and interaction between blocks.

Think of it like this: imagine a relay race. The runner passing the baton (output values) to the next runner (block) doesn't depend on the previous runner's speed. Instead, the next runner takes the baton when they're ready and move at their pace. Similarly, in a 'pull' connection, blocks work when they need to, without waiting for the blocks before them to finish.

Working-order-of-blocks-T-A-(not-work)-B-A

If pull components require the output of other pull components to function, the components are executed sequentially, providing the required input values for each component's operation. To achieve this, the pull branch is initiated from the starting block and components are executed by following the connections.

Working-order-of-blocks-T-A-(not-work)-B-C-A

If the pull branch has branching, the automation flow follows the branches according to the sequence of input points within each branch and the order in which branches attached to the same input point were added. You can modify this sequence.

Working-order-of-blocks-T-A-(not-work)-B-D-(not-work)-C-D-A

Flow Connecting to Multiple Inputs

Section titled Flow Connecting to Multiple Inputs

If branching occurs within the pull branch and these branches connect, the block where the flow branches (represented as Block B in the visual) runs once, and its output connections are followed. For the block where the branches converge to operate, all of its inputs must be active.

Working-order-T-A-(not-work)-B-C-E-(not-work)-D-E-A

Flow Connecting to Single Input

Section titled Flow Connecting to Single Input

It's not possible to add multiple pull connections to a single input of any blocks. On a single input, both pull and push connections cannot coexist simultaneously. The flow depicted in below is invalid and won't execute in the program.

incorrect-flow-example-with-multiple-pull-connections-on-a-single-input

Connections Excluded from Pull Flow

Section titled Connections Excluded from Pull Flow

If a component is to be operated using the pull method, only the connections within the pull branch that serve the purpose of supplying necessary input values for the component's operation are considered. These connections encompass all the connections reached by tracing back from the relevant input. In the example shown in below, the output of block B only reaches block A since it's triggered due to A. The connection between B and C isn't followed as it's not necessary for the operation of block A, hence block C doesn't operate.

Connection-excluded-pull-flow

Connection excluded pull flow. The pull flow running to provide the second input of block A does not include the connection between blocks B and C.