Jump to content

SENSBLUE ATLAS/Node-RED: Difference between revisions

From ATRONIA Wiki
No edit summary
No edit summary
Line 3: Line 3:
'''Flow Node-RED'''
'''Flow Node-RED'''


These easy-to-implement flows aim to speed up the integration of ATLAS in any scenario by adding an abstraction layer between the user and the stack. This is achieved through the use of subflows, which contain the necessary code for the functionalities and allow changes if needed, providing a node that "hides" the more complex integration.
These easy-to-deploy flows aim to make the integration of the ATLAS into any scenario faster by adding anabstraction layer between the user and the stack. This is achieved through the use of subflows, which containthe code needed for the features and where changes can be made if necessary, exposing a node that "hides"that more complex integration.


=== 1. Import Flows to Example Folder ===
=== 1. Import Flows to Example Folder ===
To import the flows and add them to the Node-RED examples folder, execute the following:
To import the flows and add them to the Node-RED examples folder, execute the following:


1.1 First, copy the ATLAS folder to a folder with permissions, e.g., /pi
1.1 First copy the ATLAS folder to a folder with permissions, i.e. /pi


1.2 Copy the folder to the Node-RED examples folder using the command:<syntaxhighlight lang="bash">
1.2 Copy the folder to the Node-RED examples folder using the command:<syntaxhighlight lang="bash">
Line 18: Line 18:
'''Analog Inputs'''
'''Analog Inputs'''


This flow demonstrates the acquisition and control of analogue ports AI1..AI4 via MQTT and Node-RED Dashboard 2.0. The system is divided into two main subflows: Analog Inputs (for reading channels AI1 to AI4) and Analog Outputs (for configuring/reading channels AO1 and AO2). The main logic is encapsulated in subflows, allowing reuse in other tabs or projects.
This flow implements a demonstration of acquisition and control of analog ports AI1..AI4 via MQTT and theNode-RED Dashboard 2.0. The system is divided into two main subflows: '''Analog Inputs''', for readingchannels AI1 to AI4, and '''Analog Outputs''', for configuring/reading channels AO1 and AO2. The main logic isencapsulated in subflows, allowing reuse in other tabs or projects.


=== 2. Main Components ===
=== 2. Main Components ===
Line 44: Line 44:


==== 3.1 Function ====
==== 3.1 Function ====
The Analog Inputs subflow allows you to select which AI channels should be read and in which unit/type each channel should operate: voltage or current. The subflow has four outputs, one per channel: AI1, AI2, AI3, and AI4.
The Analog Inputs subflow allows selecting which AI channels should be read and in which unit/type eachchannel should operate: voltage ('''voltage''') or current ('''current'''). The subflow has four outputs, one perchannel: AI1, AI2, AI3 and AI4.


==== 3.2 ENV Variables ====
==== 3.2 ENV Variables ====
Line 53: Line 53:
!Description
!Description
|-
|-
|readAI1
|'''readAI1'''
|bool
|bool
|true
|'''true'''
|Enables/disables reading of channel AI1.
|Enables/disables reading of channel AI1.
|-
|-
|AI1_type
|'''AI1_type'''
|string
|string
|voltage
|'''voltage'''
|Type of AI1 reading: voltage or current.
|Type of AI1 reading: '''voltage''' or '''current'''.
|-
|-
|readAI2
|'''readAI2'''
|bool
|bool
|true
|'''true'''
|Enables/disables reading of channel AI2.
|Enables/disables reading of channel AI2.
|-
|-
|AI2_type
|'''AI2_type'''
|string
|string
|voltage
|'''voltage'''
|Type of AI2 reading: voltage or current.
|Type of AI2 reading: '''voltage''' or '''current'''.
|-
|-
|readAI3
|'''readAI3'''
|bool
|bool
|true
|'''true'''
|Enables/disables reading of channel AI3.
|Enables/disables reading of channel AI3.
|-
|-
|AI3_type
|'''AI3_type'''
|string
|string
|voltage
|'''voltage'''
|Type of AI3 reading: voltage or current.
|Type of AI3 reading: '''voltage''' or '''current'''.
|-
|-
|readAI4
|'''readAI4'''
|bool
|bool
|true
|'''true'''
|Enables/disables reading of channel AI4.
|Enables/disables reading of channel AI4.
|-
|-
|AI4_type
|'''AI4_type'''
|string
|string
|voltage
|'''voltage'''
|Type of AI4 reading: voltage or current.
|Type of AI4 reading: '''voltage''' or '''current'''.
|}
|}


Line 108: Line 108:
   }
   }
}
}
</syntaxhighlight>If no channel is active, the function emits the warning "No AI channels selected" and does not send a message.
</syntaxhighlight>If no channel is active, the function emits the warning "'''No AI channels selected'''" and does not send a message.


==== 3.4 Configuring the AI mode ====
==== 3.4 Configuring the AI mode ====
The group '''Set acquisition mode''' allows sending the configuration of the analogue channels to <code>analogInputs/config/in</code>. The function '''Set AIX mode''' creates taskParams only for the active channels and sets each channel as:<syntaxhighlight lang="json">
The group '''Set acquisition mode''' allows sending the configuration of the analogue channels to <code>analogInputs/config/in</code>. The function '''Set AIX mode''' creates '''taskParams''' only for the active channels and sets each channel as:<syntaxhighlight lang="json">
{
{
   "mode": "single",
   "mode": "single",

Revision as of 14:17, 14 July 2026

Node-RED Simplified Flows

Flow Node-RED

These easy-to-deploy flows aim to make the integration of the ATLAS into any scenario faster by adding anabstraction layer between the user and the stack. This is achieved through the use of subflows, which containthe code needed for the features and where changes can be made if necessary, exposing a node that "hides"that more complex integration.

1. Import Flows to Example Folder

To import the flows and add them to the Node-RED examples folder, execute the following:

1.1 First copy the ATLAS folder to a folder with permissions, i.e. /pi

1.2 Copy the folder to the Node-RED examples folder using the command:

sudo cp -r /$PATH/ATLAS /usr/lib/node_modules/node-red/node_modules/@node-red/nodes/examples/

Simplified Flows.zip

Analog Inputs

This flow implements a demonstration of acquisition and control of analog ports AI1..AI4 via MQTT and theNode-RED Dashboard 2.0. The system is divided into two main subflows: Analog Inputs, for readingchannels AI1 to AI4, and Analog Outputs, for configuring/reading channels AO1 and AO2. The main logic isencapsulated in subflows, allowing reuse in other tabs or projects.

2. Main Components

Component Function
Analog Inputs Subflow responsible for requesting AI1..AI4 readings, receiving results, and forwarding values to gauges/UI and live topic.
Analog Outputs Subflow responsible for sending AO1/AO2 currents, synchronising sliders/gauges, and reading the current state of outputs.
Analog Demo Main tab that instantiates both subflows and displays the Dashboard widgets.
MQTT broker atlas Local broker at 127.0.0.1:1883
Dashboard 2.0 Analog Demo ports page

3. Subflow Analog Inputs

3.1 Function

The Analog Inputs subflow allows selecting which AI channels should be read and in which unit/type eachchannel should operate: voltage (voltage) or current (current). The subflow has four outputs, one perchannel: AI1, AI2, AI3 and AI4.

3.2 ENV Variables

Variable Type Default Value Description
readAI1 bool true Enables/disables reading of channel AI1.
AI1_type string voltage Type of AI1 reading: voltage or current.
readAI2 bool true Enables/disables reading of channel AI2.
AI2_type string voltage Type of AI2 reading: voltage or current.
readAI3 bool true Enables/disables reading of channel AI3.
AI3_type string voltage Type of AI3 reading: voltage or current.
readAI4 bool true Enables/disables reading of channel AI4.
AI4_type string voltage Type of AI4 reading: voltage or current.

3.3 AI channel acquisition

Example request payload:

{
  "id": 1780000000000,
  "origin": "Dev",
  "task": {
    "taskParams": {
      "AI1": { "action": "READ" },
      "AI2": { "action": "READ" },
      "AI3": { "action": "READ" },
      "AI4": { "action": "READ" }
    }
  }
}

If no channel is active, the function emits the warning "No AI channels selected" and does not send a message.

3.4 Configuring the AI mode

The group Set acquisition mode allows sending the configuration of the analogue channels to analogInputs/config/in. The function Set AIX mode creates taskParams only for the active channels and sets each channel as:

{
  "mode": "single",
  "type": "voltage"
}

It also saves the configuration in flow context via flow.set("AI_config", taskParams). If the configured type is neither voltage nor current, the function uses voltage as a fallback and emits a warning.

4. Subflow Analog Outputs

4.1 Function

The subflow Analog Outputs controls and monitors two analogue current outputs: AO1 and AO2. It has one input, used by the Dashboard sliders, and two outputs, one for AO1 and another for AO2.

4.2 ENV Variables

Variable Type Default value Description
AO1_enabled bool true Enables/disables output AO1.
AO1_current num 5.5 Initial/default current of AO1 in mA.
AO2_enabled bool true Enables/disables output AO2.
AO2_current num 5.5 Initial/default current of AO2 in mA.

The function set current output receives messages from the sliders with values between 0 and 20 mA. Invalid values are rejected with a warning in the debug panel.

Payload sent to analogOutputs/config/in:

{
  "id": 1780000000000,
  "origin": "APP",
  "task": {
    "taskParams": {
      "mode": "on",
      "AO1": { "current": 5.5 },
      "AO2": { "current": 5.5 }
    }
  }
}

If an output is disabled in the ENV, the current sent to that channel is 0. If both are disabled, the mode field switches to off.

4.5 Reading the AOs

The reading group periodically sends a request to analogOutputs/runtime/in:

{
  "id": 1780000000000,
  "origin": "APP",
  "task": {
    "taskParams": {
      "AO1": { "action": "READ" },
      "AO2": { "action": "READ" }
    }
  }
}

The response is received on analogOutputs/runtime/out. The parser extracts AO1.current and AO2.current and prepares a payload in the appropriate format for writing to a database or further processing:

[
  {
    "ao1": 5.5,
    "ao2": 5.5
  }
]

5. Operating flow

5.1 Reading analogue inputs

  1. The inject on the subflow Analog Inputs triggers the function acquire AIx channels.
  2. The function checks which channels are active in the ENV variables.
  3. A request is published on analogInputs/runtime/in.
  4. The hardware/service responds on analogInputs/runtime/out.
  5. The parser separates the values by channel and updates the AI gauges.

5.2 Configuring analogue outputs

  1. The user moves the AO1 or AO2 slider.
  2. The subflow Analog Outputs receives the value with msg.topic equal to the channel.
  3. The function validates whether the current is between 0 and 20 mA.
  4. The value is stored in flow context.
  5. The configuration is published on analogOutputs/config/in.
  6. The slider, gauge and text of the changed channel are synchronised.

5.3 Reading analogue outputs

  1. A periodic inject sends a READ request for AO1 and AO2 on analogOutputs/runtime/in.
  2. The system responds on analogOutputs/runtime/out.
  3. The parser converts the values into a structured payload with fields ao1, ao2 and tag source_tag.

6. Validations and protections implemented

Area Validation Behaviour on error
AI selection At least one active AI channel Returns null and warning "No AI channels selected".
AI type Only voltage or current Falls back to voltage.
AO current Finite number between 0 and 20 mA Returns null and warning "Invalid current".
AO enable Checks AO1_enabled / AO2_enabled Disabled channel sends current 0.

7. Requirements

  • Node-RED with subflow support.
  • @flowfuse/node-red-dashboard version 1.30.2.
  • MQTT broker.
  • External service/hardware that stimulates/responds to the analogInputs/* and analogOutputs/* topics.

Digital Demo

8. Objective

This flow demonstrates the control and monitoring of digital ports through

Node-RED, MQTT and Dashboard 2.0.

It is composed of two main subflows:

Component Function
Digital Inputs Reads the states of DI1..DI4 and sends them to LEDs on the Dashboard.
Digital Outputs Controls DO1..DO4 through switches and shows the real state on LEDs.
Demo Digital ports Dashboard page where the digital widgets are displayed.
MQTT broker atlas Local broker at 127.0.0.1:1883.

9. General architecture

Digital Inputs:

Node-RED → digitalInputs/runtime/in → Hardware

Hardware → digitalInputs/runtime/out → Node-RED → LEDs DI1..DI4

Digital Outputs:

Switches Dashboard → Node-RED → digitalOutputs/runtime/in → Hardware

Hardware → digitalOutputs/runtime/out → Node-RED → LEDs DO1..DO4

10. MQTT topics

Topic Usage
digitalInputs/runtime/in Request to read the digital inputs.
digitalInputs/runtime/out Response with the states of DI1..DI4.
digitalOutputs/runtime/in SET commands or READ requests for the digital outputs.
digitalOutputs/runtime/out Response with the states of DO1..DO4.

11. Digital Inputs

The Digital Inputs subflow periodically sends a READ request to read DI1..DI4.

The Force Read inject runs every 1 second.

Payload sent:

{
  "id": 1780000000000,
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

The expected response contains the states of the inputs in:

msg.payload.task.taskResult.DI1..DI4

The parser converts the states to booleans:

State received Value sent to UI
high with success: true true
low with success: true false
Channel absent or error false

The four outputs of the subflow update the LEDs DI1, DI2, DI3 and DI4.

12. Digital Outputs

The Digital Outputs subflow allows controlling DO..DO4 through switches on the Dashboard.

Each switch sends:

Switch msg.topic ON OFF
DO1 DO1 true false
DO2 DO2 true false
DO3 DO3 true false
DO4 DO4 true false

The set digital outputs function converts the values into physical states:

Logical value State sent
true high
false low

The command is sent to:

digitalOutputs/runtime/in

13. ENV variables of the Digital Outputs

Variable Default value Function
DO1 true Initial state of DO1
DO2 true Initial state of DO2
DO3 true Initial state of DO3
DO4 true Initial state of DO4

On deploy/startup, a once inject initializes the outputs with these values.

14. Dashboard

Field Value
Page Demo Digital ports
Path /dashboard/page2
Theme Atronia
Layout grid

Groups on the page:

Group Content
Digital Inputs LEDs DI1..DI4
Digital Outputs Switches DO1..DO4 and LEDs DO1..DO4

Input LEDs:

Value Color
true Green
false Red

Output LEDs:

Value Color
1 Green
0 Red

15. Operation sequence

Digital inputs

  1. A READ request is sent.
  2. The hardware responds with the states DI1..DI4.
  3. The parser converts high to true and low to false.
  4. The DI LEDs are updated.

Digital outputs

  1. On startup, the outputs use the ENV values.
  2. The user changes a switch on the Dashboard.
  3. The hardware applies the states.
  4. The DO LEDs show the real state received.