node-red-contrib-3dm-space 2.2.0

Node-RED nodes for 3DM.space SCADA Cloud telemetry, attributes, and local config storage

npm install node-red-contrib-3dm-space

This is an alt text.

node-red-contrib-3dm-space

Node-RED nodes for connecting Smithtek PassPort gateways to 3DM.space SCADA Cloud.

This package is designed to keep setup simple. A user copies the device credentials from 3DM.space into Node-RED, then uses the nodes to send telemetry, receive commands, store settings, and run local control logic on the PassPort.

The package is intended for Smithtek PassPort gateway projects using 3DM.space, Mako RF nodes, PLCs, sensors, relays, pump controllers, irrigation systems, water treatment systems, remote telemetry sites and SCADA control applications.


Requirements

To use these nodes, you need:

  • A current 3DM.space account
  • An active PassPort device created in 3DM.space
  • Device credentials copied from the PassPort device page
  • Node-RED running on the PassPort or gateway
  • A working internet connection when sending or receiving live cloud data

To connect the 3DM nodes to your 3DM.space account:

  1. Log in to 3DM.space
  2. Open the required PassPort device
  3. Open the device credentials section
  4. Copy the credentials into the 3DM Cloud Login node in Node-RED

The credentials are copied from 3DM.space into Node-RED in this order:

  1. Client ID
  2. User Name*
  3. Password
  4. Node Name

This is an alt text.

Nodes Included

This package includes four nodes:

  • 3DM Cloud Login
  • 3DM Out
  • 3DM In
  • 3DM Config Store
  • 3DM Join

This is an alt text.


3DM Cloud Login

The 3DM Cloud login node stores the 3DM.space device login used by the 3DM nodes.

This is a configuration node. It does not appear as a wired node in the flow by itself. It is selected inside the 3DM Out and 3DM In nodes.


3DM Cloud Login Fields

Client ID

The Client ID from the PassPort device credentials in 3DM.space.

Only enter this if 3DM.space provides one for the device, you can auto create one or create your own!.

User Name*

The device username from 3DM.space.

This field is required,you can auto create one or create your own!..

Password

The device password from 3DM.space,you can auto create one or create your own!.

After deploy, Node-RED may show the password field as blank. This is normal for password fields. The password is secured and stored internally.

Node Name

Optional.

This is only used inside Node-RED to make the login easier to identify.

Example:

Main PassPort

What 3DM Cloud Login Does

The 3DM Cloud Login node:

  • Stores the device credentials
  • Creates the cloud connection used by 3DM In and 3DM Out
  • Allows multiple 3DM nodes to use the same login
  • Handles reconnecting after a connection drop
  • Shares connection state with the 3DM In and 3DM Out nodes

3DM Cloud Login Common Problems

Password looks blank after deploy

This can be normal.

Node-RED often hides password values after deploy.

Check whether the 3DM In or 3DM Out node still connects.

Login rejected

Check:

  • Client ID
  • User Name*
  • Password
  • The correct PassPort device was selected in 3DM.space
  • Check the passport exisits in 3DM.space
  • No extra spaces were copied into the fields

Node stays offline

Check:

  • Internet connection
  • Device credentials
  • 3DM.space device is active
  • The correct 3DM Cloud Login is selected in the 3DM In or 3DM Out node
  • The PassPort is powered
  • If it is spcific RF data thats offline, check the RF antennas are OK.

3DM Out

This is an alt text.

The 3DM Out node sends telemetry from Node-RED to 3DM.space.

Use this node when the PassPort needs to send live values such as:

  • Tank level
  • Pump status
  • Flow rate
  • Pressure
  • Battery voltage
  • Fault status
  • Run hours
  • Totaliser values
  • PLC values
  • Mako RF node values
  • Site data

The node automatically prepares the data for 3DM.space.

If the cloud connection is unavailable, valid data is stored locally and sent later when the connection returns.


3DM Out Input Data Type

The 3DM Out node expects msg.payload to be a JSON object.

Correct:

{
  "tank_level": 65.2,
  "pump_run": true,
  "dc_voltage": 24.4
}

Incorrect:

65.2

Incorrect:

pump_run

Incorrect:

[
  1,
  2,
  3
]

The payload must be an object containing key/value pairs.


Recommended Mako RF Payload

The Mako RF node should normally pass a flat JSON object into the 3DM Out node.

Example:

{
  "cl level": 672.06,
  "cl ppm": 1.2,
  "cl dc": 24.46,
  "ty et level": 1607.38,
  "ty lph": 0,
  "ty l1": 239.85,
  "ty l2": 237.95,
  "ty l3": 241.25,
  "ty i1": 0.09,
  "ty i2": 0.09,
  "ty i3": 0.10,
  "ty kwh": 0.003,
  "ty totalizer": 25,
  "cl fault": false,
  "cl p1": false,
  "cl p2": false
}

This format is ideal because each key becomes a usable telemetry key in 3DM.space. -It is important that each asset has a different key name, if you have multiple of the same asset, for example 3 bore pumpinh station, use a prefix like "b1 flowrate" then for the next bore "b2 flow rate", this ensures the data telemetry doesnt cancel over overide each other and it ensures you can find your data telemetry keys when building and designing dashbaords.


Supported Value Types

The 3DM Out node can send values such as:

{
  "level": 1234.5,
  "pump_run": true,
  "mode": "AUTO",
  "fault_code": 0
}

Supported values:

  • Number
  • Boolean
  • String

Avoid sending large nested objects unless they are needed.


3DM Out Sending Speed Limit

The 3DM Out node includes safe sending protection.

Live telemetry should be sent no faster than:

1 message every 60 seconds.

This helps prevent accidental flooding from fast inject nodes, loops, or badly configured flows.

Example safe setup:

Inject / PLC / Mako RF
        ↓
Function Node
        ↓
3DM Out

Use an inject, polling, or scheduler rate of 60 seconds or slower.


3DM Out Store and Forward

The 3DM Out node includes built-in store and forward.

If the connection to 3DM.space is unavailable, valid telemetry is stored locally on the gateway.

When the connection returns, stored telemetry is sent automatically.

This helps prevent data loss during temporary connection outages.

Store and forward is useful for:

  • 4G dropouts
  • Remote site outages
  • Satellite connection gaps
  • Router restarts
  • Temporary 3DM.space connection loss
  • Poor signal sites

Stored data keeps the timestamp from when it arrived at the 3DM Out node.


Live Data vs Stored Data

Live data is protected by the 60 second sending limit.

Stored data is handled separately.

When the connection returns, stored messages may be sent faster than the normal live limit so the gateway can catch up.

This means:

Live telemetry        = protected by speed limit
Stored telemetry replay = handled automatically

3DM Out Status Messages

The 3DM Out node shows a status under the node in Node-RED.

connected

The node is connected to 3DM.space and ready to send telemetry.

sent

The latest telemetry message was sent successfully.

storing offline

The node is not connected to 3DM.space, so valid telemetry is being stored locally.

This usually means:

  • No internet connection
  • 3DM.space connection is unavailable
  • Credentials are wrong
  • The cloud login has not connected yet

queued

The message has been placed in the local queue.

This can happen when stored messages are being processed or when the node needs to preserve message order.

backhauling

The connection has returned and the node is sending stored data from the local queue.

queue high

The local queue has a large number of stored messages.

This may happen after a long outage or if data is being sent too fast.

bad payload

The incoming msg.payload was not a valid JSON object.

Check the data going into the 3DM Out node.

rate limited

The live payloads are arriving too quickly.

Slow the input down to 60 seconds or slower.

store/forward unavailable

The store and forward queue could not open.

Live sending may still work, but offline storage may not.

Check the Node-RED log.


3DM In

This is an alt text.

The 3DM In node receives values sent from 3DM.space to the PassPort. The data is sent using "Attributes" in 3DM.space, you can create attributes in the chosen device or manually add them when building dashboards.

Use this node when 3DM.space needs to send values down to Node-RED, such as:

  • Pump commands
  • Mode changes
  • Reset commands
  • Setpoints
  • Scheduler updates
  • Control settings
  • Remote configuration values
  • SCADA button commands
  • Config Store updates

3DM In Typical Uses

Simple command

Widgets will automatically send the commands in simlar data formats to 3DM.space sends:

{
  "pump_cmd": 1
}

Or

{
  "setpoint": 1225
}

Node-RED receives the command and then it can be forward sent to a PLC, relay, function node, or Mako RF node, or any other node in NodeRED.

Setpoint command

3DM.space sends:

{
  "start_level": 40,
  "stop_level": 90
}

Node-RED receives the values and uses them in local logic. It could be for high and low tank level pump start top logic.

Config Store command

3DM.space sends:

{
  "configStore": {
    "b1": {
      "type": "scheduler",
      "data": []
    }
  }
}

Node-RED passes the config into the 3DM Config Store node. This data is sent to the PassPort to be used for schedules, smar logic if the coms goes down. More details mentioned below


3DM In Attribute Key Field

The 3DM In node can receive all incoming values, or it can filter for one selected key.


Leave Attribute Key Blank

Use this when you want all incoming values to pass through.

Recommended when feeding the 3DM Config Store node.

Example:

Attribute Key: blank

Flow:

3DM In
    ↓
3DM Config Store

This allows the full incoming config to reach the Config Store node.


Enter an Attribute Key

Use this when you only want one value to pass through.

Example:

Attribute Key: pump_cmd

If 3DM.space sends:

{
  "pump_cmd": 1,
  "other_value": 55
}

only pump_cmd is passed through.


3DM In Modes

The 3DM In node is normally used in one of two ways.


All Values Mode

Leave the Attribute Key blank.

Use this for:

  • Config Store
  • Scheduler updates
  • Smart control settings
  • Multiple setpoints
  • Receiving several cloud values at once

Single Key Mode

Enter one Attribute Key.

Use this for:

  • One pump command
  • One reset command
  • One setpoint
  • One mode command
  • One control value

3DM In Status Messages

connected

The node is connected and listening for values from 3DM.space.

waiting

The node is waiting for the 3DM Cloud Login connection.

connecting

The node is waiting for the cloud connection to become available.

received

The node received a value from 3DM.space.

filtered

The node received data, but it did not match the selected Attribute Key.

offline

The selected 3DM Cloud Login is not connected.

Check:

  • Internet connection
  • Device credentials
  • 3DM Cloud Login node
  • 3DM.space device credentials

3DM Config Store

This is an alt text.

The 3DM Config Store node stores settings sent from 3DM.space and uses them locally on the PassPort.

This node is normally placed after a 3DM In node.

3DM In
    ↓
3DM Config Store
    ↓
Local Outputs

Use this node for settings that need to be remembered and used by the PassPort, such as:

  • Pump schedules
  • Irrigation schedules
  • Start and stop levels
  • Pressure setpoints
  • Alarm settings
  • Control limits
  • Run time settings
  • Site configuration values
  • SCADA Canvas smart controls

The Config Store saves the latest settings locally.

If Node-RED restarts, the last saved settings are loaded again automatically.


3DM Config Store Active Outputs

The 3DM Config Store node supports up to 24 outputs.

You can select how many outputs are active.

Example:

Active Outputs: 1

Only output 1 is visible.

Example:

Active Outputs: 8

Outputs 1 to 8 are visible.

Example:

Active Outputs: 24

All 24 outputs are visible.

This keeps the Node-RED flow cleaner when only a few outputs are needed.


3DM Config Store Output Names

Config Store items use output names such as:

output1
output2
output3

The output name must match the output number.

Example:

{
  "output": "output1"
}

This sends to output 1.

Example:

{
  "output": "output5"
}

This sends to output 5.

If an item uses an output higher than the active output count, that item is skipped.

Example:

Active Outputs: 1
Item output: output2
Result: skipped - output disabled

3DM Config Store Config Name

The Config Name field controls which config block the node uses.


Blank Config Name

Leave Config Name blank to accept all config blocks.

Example:

Config Name: blank

This accepts:

{
  "b1": {},
  "b2": {},
  "mainScheduler": {}
}

Named Config

Enter a name to only accept one config block.

Example:

Config Name: b1

This node only uses:

{
  "b1": {}
}

and ignores:

{
  "b2": {}
}

This is useful when using multiple Config Store nodes.

Example:

Config Store node 1
Config Name: b1
Active Outputs: 1

Config Store node 2
Config Name: b2
Active Outputs: 1

Both nodes can receive the same incoming configStore, but each node only acts on its own config name.


3DM Config Store Format

The Config Store expects a main configStore object.

Inside configStore, each block has its own name.

Example:

{
  "configStore": {
    "b1": {
      "type": "scheduler",
      "data": [
        {
          "id": "b1_control",
          "output": "output1",
          "name": "Bore Pump 1",
          "controlType": "control",
          "mode": "AUTO",
          "variable": "tank_level",
          "lowSetpoint": 40,
          "highSetpoint": 90,
          "direction": "in"
        }
      ]
    },
    "b2": {
      "type": "scheduler",
      "data": [
        {
          "id": "b2_control",
          "output": "output1",
          "name": "Bore Pump 2",
          "controlType": "control",
          "mode": "AUTO",
          "variable": "tank_level",
          "lowSetpoint": 40,
          "highSetpoint": 90,
          "direction": "in"
        }
      ]
    }
  }
}

3DM Config Store Check Every

This sets how often the Config Store checks its local logic.

Example:

Check Every: 20 seconds

The node checks the saved schedules and controls every 20 seconds.

Allowed range:

1 to 60 seconds

3DM Config Store Output Mode

The Config Store has two output modes.


Only When Output Changes

This only sends an output when the final output state changes.

Example:

Output was false
Tank drops below low start
Output becomes true
Node sends true once

This is normally the best mode for real equipment, or can be used to optimize and reduce RF transmissions.


Every Check

This sends the current output state every check interval.

Example:

Check Every: 20 seconds
Output Mode: Every check

The node sends the output state every 20 seconds.

Use this when downstream logic needs repeated true/false messages.


3DM Config Store Config Output

Config Output is optional.

It sends the stored config out of one selected output.

Normal use:

Config Output: Disabled

Debug use:

Config Output: Output 24

This can be useful when testing what the Config Store has saved.

Do not use the same output for control and Config Output at the same time.


3DM Config Store Send Config

When enabled, the node sends the stored config when it is updated.

This is mainly useful for debugging or passing the saved config to another part of the flow.

Normal use:

Send Config: off

Config Store Control Modes

The Config Store supports local control logic.

The most common control modes are:

  • ON
  • OFF
  • AUTO

ON Mode

ON forces the output on.

Example:

{
  "mode": "ON"
}

Result:

Output = true

OFF Mode

OFF forces the output off.

Example:

{
  "mode": "OFF"
}

Result:

Output = false

AUTO Mode

AUTO uses a live input value and setpoints.

Example:

{
  "mode": "AUTO",
  "variable": "tank_level",
  "lowSetpoint": 40,
  "highSetpoint": 90,
  "direction": "in"
}

The node watches:

tank_level

and compares it to:

Low Start: 40
High Stop: 90

Pump In / Fill Direction

Use direction: "in" for filling.

Logic:

Value <= Low Start  → Output ON
Value >= High Stop  → Output OFF
Between setpoints   → Hold last state

Example:

Tank level = 30
Low Start = 40
High Stop = 90
Direction = Pump In / Fill
Result = ON

Example:

Tank level = 95
Low Start = 40
High Stop = 90
Direction = Pump In / Fill
Result = OFF

Pump Out / Empty Direction

Use direction: "out" for emptying.

Logic:

Value >= High Stop  → Output ON
Value <= Low Start  → Output OFF
Between setpoints   → Hold last state

Example:

Tank level = 95
Low Start = 40
High Stop = 90
Direction = Pump Out / Empty
Result = ON

Example:

Tank level = 30
Low Start = 40
High Stop = 90
Direction = Pump Out / Empty
Result = OFF

Hysteresis

AUTO mode uses hysteresis.

That means the output does not constantly flick on and off while the value is between the low and high setpoints.

Example:

Low Start: 40
High Stop: 90
Current value: 60

The value is between the setpoints, so the node holds the last output state.


Remote Key To Watch

The Remote Key To Watch is the live payload key the Config Store checks in AUTO mode.

Example incoming payload:

{
  "ty et level": 1607.38
}

Remote Key To Watch:

ty et level

The key must match the payload exactly.

Spaces are allowed.


Flat Payload Keys

For a flat payload:

{
  "ty et level": 1607.38
}

Use:

ty et level

Wrapped Payload Keys

For a wrapped payload:

{
  "ty et level": {
    "value": 1607.38,
    "timestamp": 1788329806635
  }
}

Use:

ty et level.value

Mixed Payload Example

Example:

{
  "cl level": {
    "value": 672.06,
    "timestamp": 1788329806635
  },
  "cl fault": 0,
  "b2 fb": 0
}

Use:

cl level.value

for the wrapped value.

Use:

cl fault

for the direct value.

Use:

b2 fb

for the direct value.


Config Store Status Messages

The Config Store node shows status text under the node.


waiting for configStore

The node has not received any valid config yet.

Check:

  • 3DM In node is connected
  • 3DM In Attribute Key is blank
  • 3DM.space has sent a configStore
  • The selected device is correct

loaded saved config

The node loaded the last saved config from local storage after Node-RED started.

This means it can keep using the previous config even before a new cloud update arrives.


saved: b1

The node received and saved the b1 config block.

Example:

saved: b1

This means the Config Name matched and the config was stored locally.


saved: b1, b2

The node received and saved multiple config blocks.

This usually happens when Config Name is blank.


config unchanged: b1

The node received a config block that matched, but it was the same as the one already stored.

No forced output update was needed.


configStore ignored

The node received a configStore, but it did not match this node's Config Name.

Example:

Config Name: b2
Received: b1
Result: ignored

Check that the Config Name in Node-RED matches the Config Name from the SCADA Canvas control.


output1: tank skipped

The node found the config item, but could not calculate the output.

Common causes:

  • The live payload does not contain the Remote Key To Watch
  • The key name is wrong
  • The payload is wrapped and needs .value
  • Low Start is blank
  • High Stop is blank
  • The value is not numeric

Example problem:

{
  "tank": {
    "value": 50
  }
}

Remote Key To Watch is incorrectly set to:

tank

Correct:

tank.value

output1: ON

The final output state is ON.

The node will send:

true

from output 1.


output1: OFF

The final output state is OFF.

The node will send:

false

from output 1.


skipped - output disabled

The config item is trying to use an output that is not active.

Example:

Active Outputs: 1
Item output: output2

Result:

output2 skipped - output disabled

Increase Active Outputs or change the item to output1.



3DM Join

This is an alt text. The 3DM Join node collects multiple JSON payloads, merges them into one payload, then sends one combined message after a configurable timeout.

It is useful when data arrives from multiple sources at slightly different times, but the user wants one clean telemetry update sent to 3DM.space.

Typical use:

Mako RF Station 1
Mako RF Station 2
Mako RF Station 3
        ↓
3DM Join
        ↓
3DM Out
        ↓
3DM.space

Why Use 3DM Join

The 3DM Join node simplifies flows where telemetry is collected from more than one source.

Instead of sending each small payload separately to 3DM.space, the Join node can collect the values first and send them as one larger JSON object.

This is ideal for RF systems where each remote station may respond a few seconds apart, but the user is happy with one complete site update every minute.

Example:

Bore 1 data arrives
Bore 2 data arrives
Tank data arrives
Weather data arrives
        ↓
3DM Join waits for the timeout
        ↓
One combined payload is sent to 3DM Out

Input Data Type

The 3DM Join node expects msg.payload to be a JSON object.

Correct:

{
  "b1 dc": 24.3
}

Correct:

{
  "b2 flow": 88.5
}

Incorrect:

24.3

Incorrect:

b1 dc

Invalid payloads are ignored.


Timeout

The timeout starts when the first valid message arrives.

The timer does not restart when more messages arrive.

Example:

Timeout: 10 seconds

If the first message arrives at 12:00:00, the joined output is sent at 12:00:10.

Any valid JSON payloads received during that 10 second window are merged together.


Duplicate Keys

If the same key arrives more than once during the timeout window, the latest value is used.

Example:

{
  "b1 dc": 24.1
}

then:

{
  "b1 dc": 24.4
}

Final joined output:

{
  "b1 dc": 24.4
}

Example Joined Output

Incoming message 1:

{
  "b1 dc": 24.3,
  "b1 fb": 1
}

Incoming message 2:

{
  "b2 dc": 24.1,
  "b2 fb": 0
}

Incoming message 3:

{
  "tank level": 76.5
}

Output after timeout:

{
  "b1 dc": 24.3,
  "b1 fb": 1,
  "b2 dc": 24.1,
  "b2 fb": 0,
  "tank level": 76.5
}

Recommended Use With 3DM Out

The 3DM Join node is normally placed before the 3DM Out node.

RF / PLC / Sensor Inputs
        ↓
3DM Join
        ↓
3DM Out

This keeps telemetry updates cleaner and helps reduce the number of separate cloud messages.

For example, an RF system may poll several stations over 30 to 45 seconds, then send one complete site update to 3DM.space every minute.


3DM Join Status Messages

waiting

The node is waiting for the first valid JSON payload.

collecting

The node has received at least one valid payload and is collecting keys until the timeout expires.

sent

The timeout expired and the combined payload was sent.

bad payload

The incoming msg.payload was not a JSON object.

Check the payload going into the 3DM Join node.


Notes

  • Use 3DM Join to combine multiple telemetry payloads before 3DM Out.
  • The timeout starts from the first valid message.
  • The timer does not reset when more messages arrive.
  • Payloads must be JSON objects.
  • Duplicate keys are overwritten by the latest value.
  • The output is one combined msg.payload object.
  • This is useful for RF polling systems, multi-device sites, PLC data blocks and grouped telemetry updates.

3DM SCADA Canvas Smart Control Integration

This is an alt text.


3DM SCADA Canvas Widget

The 3DM SCADA Canvas is the main default dashboard-building widget for 3DM.space.

It is designed to give users one flexible widget that can be used to build complete SCADA-style screens without needing a different widget for every display, control, indicator, gauge or setpoint.

The canvas can be used to create dashboards for pumps, tanks, bores, irrigation systems, treatment plants, generators, remote sites, telemetry systems and general automation projects.

It can display live values, show equipment status, add background images, create process-style layouts, send commands, adjust setpoints, and link directly into the 3DM Node-RED nodes running on the PassPort gateway.

##-Important-##

To run the SCADA press save then live mode button To edit the scada and make changes press the edit button

Typical canvas items include:

  • Text labels
  • Value displays
  • Gauges
  • Vertical level bars
  • Horizontal bars
  • Tables
  • LED indicators
  • Spinning run indicators
  • Control buttons
  • Setpoint tables
  • Action buttons
  • Lines, panels and layout shapes
  • Background images

The widget is built so a dashboard can be assembled visually. Items can be added, moved, resized and configured directly on the canvas.

This makes it suitable for both simple dashboards and more detailed SCADA-style views.


How the Canvas Works With 3DM Nodes

The SCADA Canvas works directly with the 3DM Node-RED nodes.

Live data is normally sent from the PassPort to 3DM.space using the 3DM Out node.

Commands and settings are sent from the SCADA Canvas back to the PassPort using the 3DM In node.

Smart local control settings are stored and run locally using the 3DM Config Store node.

Typical telemetry flow:

Mako RF / PLC / Sensor Data
        ↓
Node-RED Function Logic
        ↓
3DM Out
        ↓
3DM.space
        ↓
SCADA Canvas Display

Typical command flow:

SCADA Canvas Button / Setpoint
        ↓
3DM.space Shared Attribute
        ↓
3DM In
        ↓
Function Node / PLC Logic / Mako RF Command

Typical smart control flow:

SCADA Canvas Smart Control
        ↓
configStore Shared Attribute
        ↓
3DM In
        ↓
3DM Config Store
        ↓
Local Output Logic

Data Variables and Attributes

When first adding the SCADA Canvas widget to a dashboard, the live telemetry variables must be added to the widget datasource.

This is an alt text. These are the values the canvas needs to display. Press the + button to select data from the selected device, in this image the device is called "PassPort no 567"

Examples:

tank_level
pump_run
pump_fault
dc_voltage
flow_lpm
pressure_kpa
ty et level
b1 fb
b2 fb

These data variables are used by display items such as:

  • Values
  • Gauges
  • Bars
  • Tables
  • LEDs
  • Run indicators

Attributes do not need to be added as data variables.

The SCADA Canvas handles attributes internally through the widget settings and control settings.

This means command keys, setpoints and smart control configuration do not need to be manually added to the widget datasource as data keys.

Examples of attributes handled by the widget:

pump_cmd
reset_cmd
configStore
start_level
stop_level

Only add the live telemetry variables that need to be displayed or used visually on the canvas.


Widgets

This is an alt text.


The SCADA Canvas includes the SCADA widget main items needed to build a complete dashboard screen from one widget.

Background Image

Adds a site image, process diagram, map, equipment photo or custom SCADA graphic behind the canvas items.

Use for:

  • Site layouts
  • Pump station diagrams
  • Tank layouts
  • Process backgrounds
  • Branded dashboard screens

Text Label

Adds fixed text to the canvas.

Use for:

  • Equipment names
  • Area labels
  • Section headings
  • Notes
  • Units or descriptions

Example:

Bore Pump 1
Main Tank
Discharge Pressure

Value Display

Shows a live telemetry value from the selected device.

Use for:

  • Level
  • Pressure
  • Flow
  • Voltage
  • Current
  • Run hours
  • Totalisers

Example:

Data Key: tank_level
Display: 76 %

Gauge

Shows a live value as a gauge.

Use for values that are easier to read visually.

Use for:

  • Pressure
  • Flow
  • Tank level
  • Battery voltage
  • Speed
  • Current

Example:

Data Key: pressure_kpa
Range: 0 to 600

Vertical Bar

Shows a live value as a vertical fill bar.

Best for tanks, levels and storage values.

Use for:

  • Tank level
  • Bore level
  • Chemical level
  • Silo level
  • Battery level

Example:

Data Key: ty et level
Low: 0
High: 4000

Horizontal Bar

Shows a live value as a horizontal fill bar.

Best for progress-style values.

Use for:

  • Flow percentage
  • Pump speed
  • Battery percentage
  • Load percentage
  • Process progress

Example:

Data Key: pump_speed
Range: 0 to 100

LED Indicator

Shows equipment state using colour.

Use for:

  • Pump running
  • Pump fault
  • Valve open
  • Comms status
  • Alarm state
  • Relay feedback

Example:

Data Key: b1 fb
0 = Off
1 = Running

Spinning Wheel

Shows a rotating run indicator when a value is active.

Use for:

  • Pump running
  • Motor running
  • Fan running
  • Mixer running
  • Generator running

Example:

Data Key: pump_run
Spin when value = 1

Table

Shows multiple live values in a compact list.

Use for:

  • Electrical values
  • Pump data
  • Water quality
  • Site summary
  • Multiple sensor readings

Example:

Voltage
Current
Power
Run Hours
Totaliser

Control Button

Adds ON / OFF / AUTO style controls to the canvas.

Use for:

  • Pump commands
  • Mode selection
  • Manual control
  • Auto control
  • Reset commands

The control button can work as a simple command button or as a Smart Local Control linked to the 3DM Config Store.


Basic Button Command

Sends a direct command value back to the PassPort.

Use for simple commands.

Example:

ON  → pump_cmd = 1
OFF → pump_cmd = 0

The value is sent to Node-RED through the 3DM In node.


Smart Local Control

Sends control settings to the 3DM Config Store node.

Use when the PassPort should run the control locally.

Example:

Mode: AUTO
Watch: ty et level
Low Start: 1500
High Stop: 1700
Direction: Pump In / Fill

The PassPort can keep running this logic locally, even during a temporary cloud outage.


Setpoint Table

Allows users to enter and send setpoints from the dashboard.

Use for:

  • Start levels
  • Stop levels
  • Pressure limits
  • Alarm limits
  • Flow limits
  • Site settings

Example:

Low Start: 1500
High Stop: 1700

Setpoints are sent back to Node-RED through the 3DM In node.


Action Button

Runs a dashboard action configured in 3DM.space.

Use for:

  • Opening detail screens
  • Opening popups
  • Opening trend views
  • Opening alarm pages
  • Moving between dashboard states

Example:

Button: Pump Details
Action: Open pump detail popup

Line

Adds a simple line to the canvas.

Use for:

  • Pipework
  • Flow paths
  • Cable paths
  • Separators
  • Simple process diagrams

Panel / Rectangle

Adds a visual panel or box behind other items.

Use for:

  • Grouping related values
  • Creating equipment cards
  • Highlighting sections
  • Building clean dashboard layouts

Widget Setup Note

When first adding the SCADA Canvas widget, add the telemetry data variables that need to be displayed on the canvas.

Examples:

tank_level
pump_run
pump_fault
dc_voltage
flow_lpm
ty et level
b1 fb
b2 fb

You do not need to add command attributes as data keys.

The widget handles attributes internally through the widget settings and control settings.

Examples that do not need to be added as data variables:

pump_cmd
reset_cmd
configStore
start_level
stop_level

Control Buttons

The SCADA Canvas includes control buttons that can send commands back to the PassPort.

There are two main control styles:

Basic Button Command
Smart Local Control

Basic Button Command is used when the button sends a simple command value.

Example:

ON  → pump_cmd = 1
OFF → pump_cmd = 0

Smart Local Control is used when the PassPort should handle the control logic locally.

Example:

AUTO mode
Watch tank level
Start below low setpoint
Stop above high setpoint
Run logic locally in Node-RED

Smart Local Control sends its settings to the 3DM Config Store node, where the logic continues to run locally on the PassPort.

This means the PassPort can continue running the control logic even if the cloud connection is temporarily unavailable.


Why Use the SCADA Canvas

The SCADA Canvas reduces the need to build many separate dashboard widgets.

Instead of using one widget for a value, another for a gauge, another for a button, another for an LED and another for setpoints, the canvas allows these items to be built into one screen.

This helps keep dashboards cleaner, easier to manage and better suited to real site layouts.

It is especially useful for projects that need:

  • A visual overview of a site
  • Pump and tank control
  • Remote start/stop commands
  • Local automatic control
  • Setpoint adjustment
  • Live feedback indicators
  • Simple process diagrams
  • Custom SCADA-style screens

Basic Button Command

Basic mode sends a simple shared attribute key/value.

Example:

Control Attribute Key: pump_cmd
ON Value: 1
OFF Value: 0
AUTO Value: auto

Pressing ON sends:

{
  "pump_cmd": 1
}

Use Basic mode for simple direct commands.


Smart Local Control

Smart Local Control sends settings into configStore.

Use this when Node-RED should handle the control locally.

Example fields:

Config Name: b1
Remote Key To Watch: ty et level
Low Start Setpoint: 1500
High Stop Setpoint: 1700
Direction: Pump In / Fill

This creates a config block that the Config Store node can run locally.


Control Attribute Key vs Remote Key To Watch

Control Attribute Key

Used for Basic button command mode.

It decides which shared attribute key is written when a button is pressed.

Example:

pump_cmd

Remote Key To Watch

Used for Smart Local Control AUTO mode.

It decides which live payload key the Config Store node watches.

Example:

ty et level

These are different jobs.


Smart Control Button Light

For Smart Local Control, the canvas button should remember the last selected mode.

Example:

Press AUTO
AUTO stays highlighted

The button light is only a visual indication of the last selected mode.

For real-world feedback, use separate indicator variables, LED widgets, or telemetry feedback keys from the device.

Recommended setup:

Control button = sends selected mode
LED / indicator = shows actual pump feedback

Updating Setpoints Safely

When using Smart Local Control, changing Low Start or High Stop should be saved using the SCADA Canvas Save button.

Recommended behaviour:

Change setpoint
Press Save
Layout saves
configStore updates
Mode stays AUTO
No need to press ON/OFF/AUTO again

Avoid changing setpoints by pressing OFF then AUTO on a live pump, because that can affect field equipment.


Typical Flows

Sending telemetry to 3DM.space

Mako RF / PLC / Sensor Data
        ↓
Function Node
        ↓
3DM Out
        ↓
3DM.space

Receiving a simple command

3DM.space
        ↓
3DM In
        ↓
Function Node
        ↓
PLC / Relay / Output Logic

Receiving saved settings

3DM.space
        ↓
3DM In
        ↓
3DM Config Store
        ↓
Local Outputs

Smart local pump control

3DM SCADA Canvas
        ↓
configStore
        ↓
3DM In
        ↓
3DM Config Store
        ↓
Output 1
        ↓
Pump logic / PLC / Mako RF command

Example Function Node Before 3DM Out

Use this type of structure before 3DM Out:

msg.payload = {
    "tank_level": 65.2,
    "pump_run": true,
    "dc_voltage": 24.4
};

return msg;

Do not send a raw value directly into 3DM Out.


Example Function Node For Config Store Testing

Use this to test a Config Store AUTO control watching tank:

msg.payload = {
    tank: Number(msg.payload)
};

return msg;

Then inject:

30

to test low start.

Then inject:

110

to test high stop.


Troubleshooting


3DM Out says storing offline

Check:

  • Internet connection
  • 3DM Cloud Login credentials
  • 3DM.space device credentials
  • Correct login selected in the 3DM Out node
  • Node-RED has been restarted after installing the package

Also check the Node-RED log.


3DM Out says bad payload

The payload is not a JSON object.

Correct:

{
  "level": 123
}

Incorrect:

123

3DM Out says rate limited

The input is sending too fast.

Slow the data down to one message every 60 seconds or slower.


Password disappears after deploy

This can be normal.

Node-RED hides password fields.

Check whether the node still connects.


Unknown node appears in Node-RED

This usually means the package did not load correctly.

Check:

  • The package was installed properly
  • The .html and .js files are named correctly
  • package.json points to the right files
  • Node-RED was restarted after install
  • Browser was refreshed with Ctrl+F5

Config Store says waiting for configStore

The node has not received config yet.

Check:

  • 3DM In is connected
  • 3DM In Attribute Key is blank
  • The SCADA Canvas has sent the config
  • The correct device is selected in 3DM.space
  • The config is saved as shared attributes

Config Store says configStore ignored

The Config Name does not match.

Example:

Node-RED Config Name: b2
Incoming config only contains: b1

Fix by matching the names.


Config Store says output1 skipped

The config matched, but the node could not calculate the output.

Check:

  • Remote Key To Watch is correct
  • The live payload is reaching the Config Store node
  • The live value is numeric
  • Low Start is set
  • High Stop is set
  • Use .value if the payload is wrapped

AUTO mode does not turn on

For Pump In / Fill mode, the value must go below or equal to Low Start.

Example:

Value: 30
Low Start: 40
Result: ON

AUTO mode does not turn off

For Pump In / Fill mode, the value must go above or equal to High Stop.

Example:

Value: 95
High Stop: 90
Result: OFF

Value is between setpoints and nothing changes

This is normal.

AUTO mode holds the last state while inside the setpoint band.

Example:

Low Start: 40
High Stop: 90
Current Value: 60
Result: hold last output state

Two Config Store nodes respond together

Use Config Name filtering.

Example:

Node 1 Config Name: b1
Node 2 Config Name: b2

Also use:

Output Mode: Only when output changes

Use:

Output Mode: Every check

only when repeated output messages are required.


Deleted SCADA control still remains in configStore

Deleting a control from the SCADA Canvas layout may not automatically remove it from the saved configStore.

Current clean-up method:

Device
    ↓
Attributes
    ↓
Shared attributes
    ↓
Delete configStore

Then press Save or resend the remaining Smart Controls from the SCADA Canvas.


Notes

  • Use 3DM Out to send live telemetry to 3DM.space.
  • Use 3DM In to receive commands and settings from 3DM.space.
  • Use 3DM Config Store to save settings and run local control logic.
  • Device credentials should be copied directly from the PassPort device in 3DM.space.
  • Node Name fields are optional and are only used inside Node-RED.
  • Store and forward is handled automatically.
  • Saved settings are stored locally on the PassPort.
  • Live telemetry should be sent no faster than one message every 30 seconds.
  • The Mako RF node should send a JSON object into 3DM Out.
  • For Config Store AUTO mode, the Remote Key To Watch must match the incoming local payload key.
  • For wrapped values, use .value in the Remote Key To Watch field.

Author

Smithtek


License

GPL-3.0-or-later

Node Info

Version: 2.2.0
Updated 1 week, 2 days ago
License: GPL-3.0-or-later
Rating: 5.0 1

Categories

Actions

Rate:

Downloads

300 in the last week

Nodes

  • 3dm-cloud-config
  • 3dm-cloud-out
  • 3dm-cloud-in
  • 3dm-config-store
  • 3dm-cloud-join

Keywords

  • node-red
  • node-red-contrib
  • 3dm
  • 3dm.space
  • smithtek
  • scada
  • telemetry
  • store-and-forward
  • config-store
  • scheduler

Maintainers