node-red-contrib-3dm-space 2.2.0
Node-RED nodes for 3DM.space SCADA Cloud telemetry, attributes, and local config storage

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:
- Log in to 3DM.space
- Open the required PassPort device
- Open the device credentials section
- 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:
- Client ID
- User Name*
- Password
- Node Name
Nodes Included
This package includes four nodes:
- 3DM Cloud Login
- 3DM Out
- 3DM In
- 3DM Config Store
- 3DM Join

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

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

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

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
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.payloadobject. - This is useful for RF polling systems, multi-device sites, PLC data blocks and grouped telemetry updates.
3DM SCADA Canvas Smart Control Integration

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.
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

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
.htmland.jsfiles are named correctly package.jsonpoints 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
.valueif 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
.valuein the Remote Key To Watch field.
Author
Smithtek
License
GPL-3.0-or-later
