Jump to content

SENSBLUE ATLAS: Difference between revisions

From ATRONIA Wiki
No edit summary
No edit summary
Tag: Manual revert
 
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[File:SENSBLUE-ATLAS-Gateway.png|center|frameless|360x360px]]
[[File:SENSBLUE-ATLAS-Gateway.png|center|frameless|360x360px]]
<div style="margin: 15px 0;">
<span class="atlas-btn">[[SENSBLUE ATLAS/Technical Resources|Technical Resources]]</span>
</div>


== '''Datasheet''' ==
== '''Datasheet''' ==
Line 858: Line 862:


==== 26.2 Synchronization loop flowchart (every 30 seconds) ====
==== 26.2 Synchronization loop flowchart (every 30 seconds) ====
[[File:RTC Actor Overview.svg|center|frameless|942x942px]]
 
 
'''RTC Actor - Overview'''
[[File:RTCActor Overview.svg|center|frameless|774x774px]]
 
=== 27. Core System Health Actor ===
 
==== 27.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker.
 
This interface allows any external App to receive system-level metrics such as CPU load, RAM usage, disk usage, temperature, core frequency, system throttle status and uptime. No credentials are required to subscribe to this topic. The System Health Actor does not receive commands. It is fully autonomous and publishes its metrics every 1 second.
 
==== 27.2 Runtime Data ====
'''Topic: systemHea l th/runtime/ out'''
 
Publish rate: '''1 Hz''' (one message per second, clock-jump safe)
 
===== 27.2.1 Metrics Provided =====
{| class="wikitable tech-table"
!'''Key'''
!'''Description'''
!'''Unit'''
|-
|cpu_percent
|Current  CPU load
|%
|-
|cpu_tempC
|CPU  temperature read from Linux thermal zones
|ºC
|-
|cpu0_freq
|CPU Core O current  frequency
|Hz
|-
|cpul_freq
|CPU  Core 1 current frequency
|Hz
|-
|cpu2_freq
|CPU Core 2 current frequency
|Hz
|-
|cpu3_freq
|CPU  Core 3 current frequency
|Hz
|-
|cpu0_throttle
|System  throttle status register
|Hex
|-
|ram_percent
|RAM  usage
|%
|-
|disk_percent
|Disk  usage for filesystem root /
|%
|-
|uptime_sec
|Time  since last reboot
|seconds
|}
Example Payload (systemHealth/runtime/out) <syntaxhighlight lang="json">
{
  "id": 1736022028123,
  "origin": "system-health",
  "task": {
    "taskResult": {
      "cpu_percent": 7.1,
      "cpu_tempC": 47.3,
      "cpu0_freq": 1500000000,
      "cpu1_freq": 1500000000,
      "cpu2_freq": 1500000000,
      "cpu3_freq": 1500000000,
      "cpu0_throttle": "0x0",
      "ram_percent": 32.9,
      "disk_percent": 41.2,
      "uptime_sec": 5321
    }
  }
}
 
</syntaxhighlight>
 
==== 27.3 Peripherals health ====
  In order get the peripherals health we had to implement a SystemHealth actor in each bus manager (busi2c­O, busi2c-1, etc. ... ).
 
 
[[File:Peripherals health.svg|center|frameless|792x792px]]
 
===== 27.3.1 Example =====
'''For busi2c-0:'''
 
Reply topic: '''systemHealth/busi2c-0/runtime/out'''
 
Payload:<syntaxhighlight lang="json">
{
  "id": 1770378753024,
  "origin": "system-health-busi2c-0",
  "task": {
    "taskResult": {
      "ADC": {
        "status": "ERROR",
        "description": "IRQ Retrying",
        "last_report": 1770378753006,
        "stats": {
          "AI1": {
            "samples": 563154,
            "retries": 760548,
            "discards": 253313
          },
          "AI2": {
            "samples": 563154,
            "retries": 760475,
            "discards": 253314
          },
          "AI3": {
            "samples": 563154,
            "retries": 760528,
            "discards": 253313
          },
          "AI4": {
            "samples": 563154,
            "retries": 760549,
            "discards": 253312
          }
        }
      },
      "DAC": {
        "status": "OK",
        "description": "Running....",
        "last_report": 1770378752576,
        "stats": {
          "AO1": {
            "samples": 240755,
            "retries": 0,
            "discards": 0
          },
          "AO2": {
            "samples": 240755,
            "retries": 0,
            "discards": 0
          }
        }
      },
      "RTC": {
        "status": "OK",
        "description": "",
        "last_report": 1770378752094,
        "stats": {
          "samples": 248710,
          "retries": 0,
          "discards": 0
        }
      },
      "TEMP": {
        "status": "OK",
        "description": "",
        "last_report": 1770378752579,
        "stats": {
          "samples": 240754,
          "retries": 0,
          "discards": 0
        }
      }
    }
  }
}
 
 
 
</syntaxhighlight>'''For busi2c-1:'''
 
Reply topic: '''systemHealth/busi2c-1/runtime/out'''
 
Payload:<syntaxhighlight lang="json">
{
  "id": 1770382405107,
  "origin": "system-health-busi2c-1",
  "task": {
    "taskResult": {
      "JOYSTICK": {
        "status": "OK",
        "description": "Running....",
        "last_report": 1770382405050,
        "stats": {
          "read_all": {
            "samples": 410154,
            "retries": 0,
            "discards": 0
          },
          "read_raw": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "buttons": {
            "JDOWN": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JRIGHT": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JUP": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JLEFT": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JCENTER": {
              "reads": 410154,
              "last_state": "pressed"
            }
          }
        }
      },
      "RELAYS": {
        "status": "OK",
        "description": "Relay Output MQTT connected",
        "last_report": 1770298859099,
        "stats": {
          "read_all": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "set": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "set_many": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "raw_read_all": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          }
        },
        "outputs": {
          "DO1": {
            "writes": 0,
            "last_state": "unknown"
          },
          "DO2": {
            "writes": 0,
            "last_state": "unknown"
          }
        }
      },
      "DI": {
        "status": "OK",
        "description": "Running",
        "last_report": 1770382404832,
        "stats": {
          "read_all": {
            "samples": 181758,
            "retries": 0,
            "discards": 0
          },
          "read_raw": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "inputs": {
            "DI1": {
              "reads": 181758,
              "last_state": "low"
            },
            "DI2": {
              "reads": 181758,
              "last_state": "low"
            },
            "DI3": {
              "reads": 181758,
              "last_state": "low"
            },
            "DI4": {
              "reads": 181758,
              "last_state": "low"
            }
          }
        }
      }
    }
  }
}
</syntaxhighlight>
 
=== 28. TempSensor Actor ===
 
==== 28.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.
 
===== 28.1.1 Set temperature sensor configurations =====
Req-Topic: tempSensor/config/in
 
ALERT:
 
* activate: true(active)/false
* templow: alert temperature lower limit
* tempHigh: alert temperature upper limit
<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "ALERT": {
        "activate": true,
        "tempLow": 0,
        "tempHigh": 80
      }
    }
  }
}
</syntaxhighlight>Reply-Topic: tempSensor/config/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "ALERT": {
        "activate": true,
        "tempLow": 0,
        "tempHigh": 80
      }
    }
  }
}
 
</syntaxhighlight>
 
===== 28.1.2 Read temperature sensor configurations =====
Req-Topic: tempSensor/config/in
 
ALERT:
 
* activate: true(active)/false
 
LIMITS:
 
* templow: alert temperature lower limit
* tempHigh: alert temperature upper limit
<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}
 
</syntaxhighlight>Reply-Topic: tempSensor/config/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "ALERT": {
        "activate": true,
        "tempLow": 0,
        "tempHigh": 80
      }
    }
  }
}
 
</syntaxhighlight>
 
===== 28.1.3 Read temperature and alert status =====
 
* unit: Temperature unit of measure
* alert: true (triggered) or false
 
Req-Topic: tempSensor/runtime/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}
 
</syntaxhighlight>Reply-Topic: tempSensor/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "data": {
        "temperature": <_FLOAT_>,
        "unit": "C",
        "alert": true
      }
    }
  }
}
 
</syntaxhighlight>
 
=== 29. TFT Actor ===
 
==== 29.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to control and interact with the TFT display, or frontal panel LCD screen. Connecting to the broker for this Area requires no credentials.
 
==== 29.2 TFT Display Actor ====
  The TFT Actor is responsible for:
 
* Rendering static and informative screens on the TFT display
* Reacting to joystick input (LEFT/ RIGHT/ CENTER/ UP/ DOWN)
* Managing screen navigation and user confirmation flows
* Providing feedback to the application via MQTT
 
===== 29.2.1 Screen Carousel Concept =====
The TFT actor maintains an '''ordered list of screens''' (carousel).
 
* Screens are navigated using the joystick:
 
- LEFT --> Previous screen
 
- RIGHT --> Next screen
 
* The carousel wraps around:
 
- LEFT on first screen --> last screen
 
- RIGHT on last screen --> first screen
 
===== 29.2.2 Screen Types =====
The TFT actor supports the following screen types:
 
'''a.) Image Screen'''
 
* Displays a static JPEG image
* Default screen shown at boot
* No user interaction required
 
'''b.) Network Information Screen'''
 
* Display a interface with information about the networks of the device
* Updated on load
* No user interaction required
 
===== 29.2.3 Joystick Navigation Logic =====
'''Carousel Navigation:'''
{| class="wikitable"
|'''Joystick  Input'''
|'''Action'''
|-
|LEFT
|Previous screen
|-
|RIGHT
|Next screen
|-
|DOWN
|Refresh current screen
|}
 
===== 29.2.4 Boot Behavior =====
At system boot:
 
# TFT actor initializes the display
# Last available carousel is loaded
# First screen is rendered
# Joystick subscriptions are activated
# Actor waits for runtime commands
 
===== 29.2.5 Design Notes & Constraints =====
 
* TFT actor does not expose joystick state
* Joystick actor remains independent
* TFT actor internally consumes joystick events
* Carousel state is local to the TFT actor
* Screen rendering is synchronous; input handling is asynchronous
* Confirmation screens always require explicit CENTER press
 
==== 29.3 User interaction through MQTT ====
Enabling interaction with the carousel using the topic tft/runtime/in . Actions available will be public to the user.
 
'''Runtime commands'''
 
'''Go to screen'''
 
Req-Topic: tft/runtime/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "SET_CAROUSEL",
    "params": {
      "index": 2
    }
  }
}
 
</syntaxhighlight>Reply-Topic: tft/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "tft",
  "task": {
    "taskResult": {
      "success": true,
      "index": 2
    }
  }
}
 
</syntaxhighlight>'''Set TFT Screen Carousel'''
 
Req-Topic: tft/runtime/in<syntaxhighlight lang="json">
{
  "id": "TIMESTAMP",
  "origin": "APP",
  "task": {
    "action": "SET_CAROUSEL",
    "params": {
      "startIndex": 0,
      "screens": [
        {
          "type": "image",
          "image": "default.jpg"
        },
        {
          "type": "image",
          "image": "status.jpg"
        },
        {
          "type": "confirm",
          "question": "Do you want to continue?"
        }
      ]
    }
  }
}
 
</syntaxhighlight>'''Parameters:'''
{| class="wikitable"
|'''Field'''
|'''Description'''
|-
|screens
|Ordered list of screens
|-
|Start  lndex
|Initial active screen (optional,  default = 0)
|}
'''Reply'''
 
Reply-Topic: '''tft/runtime/out''' <syntaxhighlight lang="json">
{
  "id": "TIMESTAMP",
  "origin": "tft",
  "task": {
    "taskResult": {
      "success": true,
      "activeIndex": 0,
      "totalScreens": 3
    }
  }
}
 
</syntaxhighlight>
 
=== 30. Analoglnputs Actor ===
 
==== 30.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.
 
===== 30.1.1 Configurations =====
'''  Topic: analoglnputs/config/in - Set ADC channels configurations'''
 
'''mode'''
 
* continuous
* single
 
'''type'''
 
* voltage
* current
<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AI1": {
        "mode": "single",
        "type": "voltage"
      },
      "AI2": {
        "mode": "single",
        "type": "voltage"
      },
      "AI3": {
        "mode": "single",
        "type": "current"
      },
      "AI4": {
        "mode": "single",
        "type": "current"
      }
    }
  }
}
 
</syntaxhighlight>Reply-Topic: analoglnputs/config/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AI1": {
        "success": true
      },
      "AI2": {
        "success": true
      },
      "AI3": {
        "success": true
      },
      "AI4": {
        "success": true
      }
    }
  }
}
 
</syntaxhighlight>
 
===== 30.1.2 Runtime Data =====
'''Topic: analoglnputs/runtime/in.'''
 
action:
 
* READ
* PAUSE (only applicable in continuous mode)
* RESUME (only applicable in continuous mode)
<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AI1": {
        "action": "READ"
      },
      "AI2": {
        "action": "READ"
      },
      "AI3": {
        "action": "READ"
      },
      "AI4": {
        "action": "READ"
      }
    }
  }
}
 
</syntaxhighlight>Reply-Topic: analoglnputs/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AI1": {
        "success": true,
        "value": <_FLOAT_>
      },
      "AI2": {
        "success": true,
        "value": <_FLOAT_>
      },
      "AI3": {
        "success": true,
        "value": <_FLOAT_>
      },
      "AI4": {
        "success": true,
        "value": <_FLOAT_>
      }
    }
  }
}
 
</syntaxhighlight>
 
=== 31. Analog Outputs Actor ===
 
==== 31.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.
 
===== 31.1.1 Set analog outputs signal =====
Req-Topic: analogOutputs/config/in
 
'''Output:''' current within 0-20 mA
 
'''mode:''' on/off<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "mode": "on",
      "AO1": {
        "current": <_FLOAT_>
      },
      "AO2": {
        "current": <_FLOAT_>
      }
    }
  }
}
 
</syntaxhighlight>Reply-Topic: analogOutputs/config/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "mode": "on",
      "AO1": {
        "success": true,
        "current": <_FLOAT_>
      },
      "AO2": {
        "success": true,
        "current": <_FLOAT_>
      }
    }
  }
}
 
</syntaxhighlight>
 
===== 31.1.2 Set analog outputs =====
Req-Topic: analogOutputs/runtime/in
 
'''current:''' current within 0-20 mA<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AO1": {
        "action": "SET",
        "current": <_FLOAT_>
      },
      "AO2": {
        "action": "SET",
        "current": <_FLOAT_>
      }
    }
  }
}
 
</syntaxhighlight>Reply-Topic: analoigOutputs/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AO1": {
        "success": true,
        "current": <_FLOAT_>
      },
      "AO2": {
        "success": true,
        "current": <_FLOAT_>
      }
    }
  }
}
 
</syntaxhighlight>
 
===== 31.1.3 Read analog outputs settings =====
Req-Topic: analogOutputs/runtime/in
 
'''current''': current within 0-20 mA<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AO1": {
        "action": "READ"
      },
      "AO2": {
        "action": "READ"
      }
    }
  }
}
 
</syntaxhighlight>Reply-Topic: analogOutputs/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AO1": {
        "success": true,
        "current": <_FLOAT_>
      },
      "AO2": {
        "success": true,
        "current": <_FLOAT_>
      }
    }
  }
}
 
</syntaxhighlight>
 
=== 32. Digital lnputs Actor ===
 
==== 32.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credentials.
 
===== 32.1.1 Set digital input pin/pins speed fast/slow =====
The '''fast''' speed setting supports edge detection speed up to 100 Hz and the '''slow''' speed settings supports up to 10 Hz.
 
'''Fast Mode''' generates a message on every I/O state change, which may result in a '''high message payload''' during operation. Fast Mode should therefore only be enabled when '''strictly required'''.
 
Req-Topic: digitallnputs/config/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "DI1": {
        "speed": "fast"
      },
      "DI2": {
        "speed": "slow"
      },
      "DI3": {
        "speed": "fast"
      },
      "DI4": {
        "speed": "fast"
      }
    }
  }
}
</syntaxhighlight>Reply-Topic: digitallnputs/config/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DI1": {
        "success": true,
        "speed": "fast"
      },
      "DI2": {
        "success": true,
        "speed": "slow"
      },
      "DI3": {
        "success": true,
        "speed": "fast"
      },
      "DI4": {
        "success": true,
        "speed": "fast"
      }
    }
  }
}
</syntaxhighlight>
 
===== 32.1.2 Get all digital input pins state =====
Req-Topic: digitallnputs/runtime/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}
 
</syntaxhighlight>Reply-Topic: digitallnputs/runtime/out
 
state: high/low<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DI1": {
        "success": true,
        "state": "high"
      },
      "DI2": {
        "success": true,
        "state": "low"
      },
      "DI3": {
        "success": true,
        "state": "high"
      },
      "DI4": {
        "success": true,
        "state": "low"
      }
    }
  }
}
 
</syntaxhighlight>
 
=== 33. Digital Outputs Actor ===
 
==== 33.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this area requires no credencials.
 
===== 33.1.1 Get all digital output pins state =====
Req-Topic: digitalOutputs/runtime/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
 
</syntaxhighlight>Reply-Topic: digitalOutputs/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DO1": {
        "success": true,
        "state": "low"
      },
      "DO2": {
        "success": true,
        "state": "high"
      },
      "DO3": {
        "success": true,
        "state": "high"
      },
      "DO4": {
        "success": true,
        "state": "low"
      },
      "DO5": {
        "success": true,
        "state": "low"
      },
      "DO6": {
        "success": true,
        "state": "low"
      },
      "DO7": {
        "success": true,
        "state": "low"
      },
      "DO8": {
        "success": true,
        "state": "low"
      }
    }
  }
}
</syntaxhighlight>
 
===== 33.1.2 Set all digital output pins state =====
Req-Topic: digitalOutputs/runtime/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "DO1": {
        "action": "SET",
        "state": "low"
      },
      "DO2": {
        "action": "SET",
        "state": "high"
      },
      "DO3": {
        "action": "SET",
        "state": "high"
      },
      "DO4": {
        "action": "SET",
        "state": "low"
      },
      "DO5": {
        "action": "SET",
        "state": "low"
      },
      "DO6": {
        "action": "SET",
        "state": "low"
      },
      "DO7": {
        "action": "SET",
        "state": "low"
      },
      "DO8": {
        "action": "SET",
        "state": "low"
      }
    }
  }
}
</syntaxhighlight>Reply-Topic: digitalOutputs/runtime/out<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "D01": {
        "success": true,
        "state": "low"
      },
      "D02": {
        "success": true,
        "state": "high"
      },
      "D03": {
        "success": true,
        "state": "high"
      },
      "D04": {
        "success": true,
        "state": "high"
      },
      "D05": {
        "success": true,
        "state": "high"
      },
      "D06": {
        "success": true,
        "state": "low"
      },
      "D07": {
        "success": true,
        "state": "low"
      },
      "D08": {
        "success": true,
        "state": "low"
      }
    }
  }
}
 
</syntaxhighlight>
 
==== 33.2 Notes ====
If the busi2c-3 is not powered, we will get this:
 
Topic: '''digit a lOutputs/runtime/ out''' <syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DO1": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO2": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO3": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO4": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO5": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO6": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO7": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO8": {
        "success": false,
        "state": "DO_not_powered"
      }
    }
  }
}
 
</syntaxhighlight>
 
=== 34. Joystick Actor ===
 
==== 34.1 App Interfacing ====
User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.
 
===== 34.1.1 Get all joystick pins state =====
Req-Topic: joystick/runtime/in<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
 
</syntaxhighlight>Reply-Topic: joystick//runtime/out
 
state: pressed/released<syntaxhighlight lang="json">
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "JLEFT": {
        "success": true,
        "state": "pressed"
      },
      "JRIGHT": {
        "success": true,
        "state": "released"
      },
      "JUP": {
        "success": true,
        "state": "released"
      },
      "JDOWN": {
        "success": true,
        "state": "released"
      },
      "JCENTER": {
        "success": true,
        "state": "released"
      }
    }
  }
}
 
</syntaxhighlight>
 
=== 35. Included Software Stack ===
 
 
[[File:AtlasCode.svg|center|frameless|583x583px]]
 
=== 36. Hardware Libraries ===
[IMAGE PLACEHOLDER]
 
=== 37. Related Products ===
{| class="wikitable"
|'''PA'''
|'''Name'''
|'''Requirements'''
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|}
 
=== 38. Accessories ===
{| class="wikitable"
|'''PA'''
|'''Name'''
|'''Requirements'''
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|-
|
|
|
|}
 
=== 39. Document History ===
{| class="wikitable"
|'''Version'''
|'''Description'''
|'''Date'''
|-
|SBADATAv0.1
|First  version of SENSBLUE ATLAS Datasheet
|11/03/2026
|-
|
|
|
|-
|
|
|
|}
 
=== 40. SENSBLUE ATLAS in-the-field ===
[IMAGE PLACEHOLDER]

Latest revision as of 14:51, 13 March 2026

Datasheet

2. Table of SENSBLUE ATLAS Reference ID Model Number

Paxxxxxxxx
PAxxxxxxxx

3. General Description

SENSBLUE ATLAS is a single board computer that connects sensors and assets, runs control logic and ships to production without platform changes.

Designed for industrial teams who need one dependable path from experiments to operations.

3.1 Key Features

Processor:

  • Raspberry Pi CM4 (quad-core Cortex-A72)

I/O:

  • 12 DO (Digital Outputs)
  • 6 AI (Analog Inputs)
  • 2 relays

Industrial Bus:

  • RS-485
  • CAN
  • 2× Ethernet port (Independently managed)

Communication:

  • Integrated LTE
  • Wi-Fi
  • BLE
  • USB

Interface & Services:

  • 1.47″ IPS TFT display + joystick for local setup and feedback.
  • Includes 1 GB of data (up to 500 MB LTE + 500 MB DB storage) via sensblue.cloud — no external SIM required.
  • EU-hosted servers, TLS, weekly backups, VPN on request.
  • Other versions under request.

4. Hardware Specifications

Parameter Specification
Platform Raspberry Pi Compute Module 4 (CM4)
Processor Broadcom BCM2711 Quad-core Cortex-A72 (ARM v8)
CPU Frequency 1.5 GHz
RAM 4GB LPDDR4
Storage 32 GB eMMC
Selected Variant CM4102032-4 GB RAM/ 32 GB eMMC / Wi-Fi / BLE
PCle 1 x PCle Gen 2.0 (1 lane)
HDMI 1 interfaces
USB 2 x USB 2.0

5. Power

Parameter Specification
Input voltage 12-24 VDC ± 5%
Reverse polarity protection Yes
Overcurrent protection Resettable PTC fuse
Surge protection TVS clamp for transient events
Isolation No isolation
Typical consumption < 15 W
Maximum consumption 25 W (all peripherals active)

6. Digital Inputs

Parameter Specification
Channels 4
Input voltage 0-24 VDC
Logic LOW Acording to EN 61131-2 Type I and Ill
Logic HIGH Acording to EN 61131-2 Type I and Ill
Input type Sourcing (PNP)
Input current Acording to EN 61131-2 Type I and Ill
Isolation Funcional Safety Gavanic isolation
Isolation Voltage Functional isolation between channels on the field side +- 60V
Isolation Voltage DIN VDE V 0884-11 Maximum working isolation voltage 400V RMS
Isolation Voltage DIN VDE V 0884-11 Maximum surge isolation voltage 1 kV RMS
Special feature Can be used as fast inputs until 100Hz

7. Digital Outputs (Relay)

Parameter Specification
Channels 2
Type Mechanical relay
Switching capacity 2 A@ 30 VDC
Isolation 1000 VAC galvanic isolation
Lifetime (nominal load) ≥ 100,000 cycles
Lifetime (no load) ≥ 100,000,000 cycles

8. Digital Outputs (Transistor/ SSR)

Parameter Specification
Channels 8
Type PNP (sourcing) SSR
Maximum current 300 mA per channel
Maximum voltage 24 VDC
Isolation Funcional Safety Gavanic isolation
Isolation Voltage DIN VDE V 0884-17 Maximum transient isolation voltage 1 kV RMS

9. Analog Inputs

Parameter Specification
Channels 4
Mode Voltage or current configurable per channel
Voltage range 0-10 V
Current range 0/4-20 mA
ADC resolution 16 bits
ADC Sample Rate 32 samples/sec
Accuracy ≤ ±1.0% FSR
Input impedance (voltage) > 100 kΩ
Input impedance (current) 100 Ω
Protection TVS + analog filtering
Sampling rate ≥ 10 Hz per channel
Isolation Funcional Safety Gavanic isolation
Isolation Voltage Maximum transient isolation voltage 1 kV RMS

10. Analog Outputs

Parameter Specification
Channels 2
Output type Current
Range 0-20 mA
Optional range 4-20 mA (software configurable)
Resolution 12
Accuracy ≤ ±1.0% FSR
Isolation Funcional Safety Gavanic isolation
Isolation Voltage Maximum transient isolation voltage 1 kV RMS

11. Communication Interfaces

11.1 Ethernet

Parameter Specification
Ports 2 x RJ45
Port 1 10/100 Mbps
Port 2 0/100/1000 Mbps (native CM4)
Indicators Link + Activity LEDs

11.2 RS-485

Parameter Specification
Mode Half-duplex
Control TX_EN line
Protocol Transparent/ any
Isolation None

11.3 USB

Parameter Specification
Ports 2
Type USB-A
Standard USB 2.0 Host
Maximum current 400 mA per port
Protection Overcurrent protection

11.4 HDMI

Parameter Specification
Ports 1
Connector HDMI full-size
Maximum resolution Depends on CM4 and OS

12. RF Communications

Technology Specification
Wi-Fi Integrated in CM4
BLE Integrated in CM4
LTE M.2 NGFF modem SIM7600G
SIM External access

12.1  Antenna Connectors

Connector Usage
RP-SMA Wi-Fi / BLE
SMA LTE

13. Local Peripherals

Peripheral Description
Temperature sensor Internal board temperature monitoring
Non-volatile memory Persistent storage
Security IC Microchip ATECC608A
RTC Real Time Clock with battery backup

14. HDMI

14. 1 Display

Parameter Specification 
Type IPS TFT LCD
Interface SPI
Size 1.47"
Resolution ≥ 172 X 320
Backlight LED
Mounting Front mounted with transparent window

14. 2 Joystick

Parameter Specification 
Positions 5 (Up/ Down/ Left/ Right/ Enter)
Type Mechanical tactile switch
Interface GPIO Expander

15. Mechanical

Parameter Specification 
Mounting DIN rail (EN 60715)
Enclosure MAT0091092 (same as iSense / iCee)
Protection rating IP20
Mounting method DIN rail snap-fit

16. Environmental

Parameter Specification 
Operating temperature -10 °C to +60 °C
Storage temperature -20 °C to +80 °C
Humidity 5-95% non-condensing
Vibration IEC 60068-2-6
Shock IEC 60068-2-27

17. Certifications

Certification Standard  
CE Yes
EMC 2014/30/EU
Radio 2014/53/EU (RED)
Ro HS 2011/65/EU

18. Connectivity

Parameter Specification  
Connector type Pluggable System Terminal Block
Pitch 3.5 mm
Layout Dual-row
Identification Side panel silk screen
Fixation Mechanical locking or spring clamp
Protection Mechanical reverse insertion protection

19. Expansion

Feature Description 
Piggyback area Reserved PCB area
Compatibility Fully compatible with existing FW
Power rails available Vin, 5 V, 3.3 V
Interfaces available 12C, SPI, UART, GPIO
External 1/0 lines 32 lines routed to external connectors
Storage expansion M.2 NVMe SSD connector

20. Mechanical Drawings

Front View


Bottom View


Top View

21. System Type

Raspian

Debian GNU/Linux 13 (trixie) Version 13.2 Linux atlas 6.12.47 +rpt-rpi-v8 #1 SMP PREEMPT

Debian 1 :6.12.47-1 +rpt1 (2025-09-16) aarch64 GNU/Linux.

22. Network Information

There is three ways to connect to the device. IP and state of the connection be checked on the LCD Network Interface.

22.1 Eth1 (ethO)

Client dynamic IP obtained by DHCP server.

22.2 Eth2 (eth1)

Static IP: 93.48.86.253

22.3 Access Point (wlanO)

IP: 192.168.30.1

23. Software Information

Node-Red Grafana lnfluxDB
Version 4.1.4 12.3.1 2.8.0
Port 1880 3000 8086
State Clean Clean Clean
Authentication None User/Pass (admin/admin) Not defined, configured on first time interface login.
GUI on http://<device-ip>:1880 http://<device-ip>:3000 http://<device-ip>:8086

24. MQTT Broker

port: 1883

address: AP-> 192.168.30.1

Eth1: 93.48.86.253

user: < not needed>

login <not needed>

25. Relay Outputs Actor

25.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credentials.

25.1.1 Set/reset digital output pin/pins state

Both relays default state is open.

Req-Topic: relayOutputs/config/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "D01": {
        "state": "open"
      },
      "D02": {
        "state": "open"
      }
    }
  }
}

Reply-Topic: relayOutputs/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "D01": {
        "success": true,
        "state": "open"
      },
      "D02": {
        "success": true,
        "state": "open"
      }
    }
  }
}
25.1.2 Get all relays state

Req-Topic: relayOutputs/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: relayOutputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "D01": {
        "success": true,
        "state": "open"
      },
      "D02": {
        "success": true,
        "state": "close"
      }
    }
  }
}
25.1.3 Set all relays state

Req-Topic: relayOutputs/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "SET",
    "taskParams": {
      "D01": {
        "state": "open"
      },
      "D02": {
        "state": "close"
      }
    }
  }
}

Reply-Topic: relayOutputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "D01": {
        "success": true,
        "state": "open"
      },
      "D02": {
        "success": true,
        "state": "close"
      }
    }
  }
}

26. RTC Actor

26.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.

26.1.1 Set timer/alarm interruption

mode: Timer, alarm or none.

alarmSet: Date and time for alarm interruption (No effect if mode is timer or none).

timerSetSeconds: Period in seconds for timer interruption (No effect if mode is alarm or none).

Req-Topic: clock/config/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "CLOCK_SET_MODE": {
        "mode": "timer",
        "alarmSet": "[timestamp epoch ms]",
        "timerSetSeconds": "<INT>"
      }
    }
  }
}

Req-Topic: clock/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "CLOCK_SET_MODE": {
        "mode": "timer",
        "alarmSet": "[timestamp epoch ms]",
        "timerSetSeconds": "<INT>"
      }
    }
  }
}
26.1.2 Toggle RTC sync logic (described below)

tcState: State of the synchronization logic of the RTC, this value is non-persistent so every-time a reboot happens the value return to default (by default the value is ON)

Req-Topic: clock/config/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "TOGGLE"
  }
}

Req-Topic: clock/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "rtcState": "OFF"
    }
  }
}
26.1.3 Read clock configs

mode: Timer, alarm or none.

alarmSet: Date and time for alarm interruption (No effect if mode is timer or none).

timerSetSeconds: Period in seconds for timer interruption (No effect if mode is alarm or none).

rtcState: Current state of the synchronization logic of the RTC.

Req-Topic: clock/config/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: clock/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "CLOCK_CONFIGS": {
        "mode": "timer",
        "alarmSet": "[timestamp epoch ms]",
        "timerSetSeconds": "<INT>",
        "rtcState": "ON"
      }
    }
  }
}
26.1.4 Read clock

Req-Topic: clock/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "timestamp": "[timestamp epoch ms]"
    }
  }
}

26.2 Synchronization loop flowchart (every 30 seconds)

RTC Actor - Overview

27. Core System Health Actor

27.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker.

This interface allows any external App to receive system-level metrics such as CPU load, RAM usage, disk usage, temperature, core frequency, system throttle status and uptime. No credentials are required to subscribe to this topic. The System Health Actor does not receive commands. It is fully autonomous and publishes its metrics every 1 second.

27.2 Runtime Data

Topic: systemHea l th/runtime/ out

Publish rate: 1 Hz (one message per second, clock-jump safe)

27.2.1 Metrics Provided
Key Description Unit
cpu_percent Current CPU load %
cpu_tempC CPU temperature read from Linux thermal zones ºC
cpu0_freq CPU Core O current frequency Hz
cpul_freq CPU Core 1 current frequency Hz
cpu2_freq CPU Core 2 current frequency Hz
cpu3_freq CPU Core 3 current frequency Hz
cpu0_throttle System throttle status register Hex
ram_percent RAM usage %
disk_percent Disk usage for filesystem root / %
uptime_sec Time since last reboot seconds

Example Payload (systemHealth/runtime/out)

{
  "id": 1736022028123,
  "origin": "system-health",
  "task": {
    "taskResult": {
      "cpu_percent": 7.1,
      "cpu_tempC": 47.3,
      "cpu0_freq": 1500000000,
      "cpu1_freq": 1500000000,
      "cpu2_freq": 1500000000,
      "cpu3_freq": 1500000000,
      "cpu0_throttle": "0x0",
      "ram_percent": 32.9,
      "disk_percent": 41.2,
      "uptime_sec": 5321
    }
  }
}

27.3 Peripherals health

  In order get the peripherals health we had to implement a SystemHealth actor in each bus manager (busi2c­O, busi2c-1, etc. ... ).


27.3.1 Example

For busi2c-0:

Reply topic: systemHealth/busi2c-0/runtime/out

Payload:

{
  "id": 1770378753024,
  "origin": "system-health-busi2c-0",
  "task": {
    "taskResult": {
      "ADC": {
        "status": "ERROR",
        "description": "IRQ Retrying",
        "last_report": 1770378753006,
        "stats": {
          "AI1": {
            "samples": 563154,
            "retries": 760548,
            "discards": 253313
          },
          "AI2": {
            "samples": 563154,
            "retries": 760475,
            "discards": 253314
          },
          "AI3": {
            "samples": 563154,
            "retries": 760528,
            "discards": 253313
          },
          "AI4": {
            "samples": 563154,
            "retries": 760549,
            "discards": 253312
          }
        }
      },
      "DAC": {
        "status": "OK",
        "description": "Running....",
        "last_report": 1770378752576,
        "stats": {
          "AO1": {
            "samples": 240755,
            "retries": 0,
            "discards": 0
          },
          "AO2": {
            "samples": 240755,
            "retries": 0,
            "discards": 0
          }
        }
      },
      "RTC": {
        "status": "OK",
        "description": "",
        "last_report": 1770378752094,
        "stats": {
          "samples": 248710,
          "retries": 0,
          "discards": 0
        }
      },
      "TEMP": {
        "status": "OK",
        "description": "",
        "last_report": 1770378752579,
        "stats": {
          "samples": 240754,
          "retries": 0,
          "discards": 0
        }
      }
    }
  }
}

For busi2c-1:

Reply topic: systemHealth/busi2c-1/runtime/out

Payload:

{
  "id": 1770382405107,
  "origin": "system-health-busi2c-1",
  "task": {
    "taskResult": {
      "JOYSTICK": {
        "status": "OK",
        "description": "Running....",
        "last_report": 1770382405050,
        "stats": {
          "read_all": {
            "samples": 410154,
            "retries": 0,
            "discards": 0
          },
          "read_raw": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "buttons": {
            "JDOWN": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JRIGHT": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JUP": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JLEFT": {
              "reads": 410154,
              "last_state": "pressed"
            },
            "JCENTER": {
              "reads": 410154,
              "last_state": "pressed"
            }
          }
        }
      },
      "RELAYS": {
        "status": "OK",
        "description": "Relay Output MQTT connected",
        "last_report": 1770298859099,
        "stats": {
          "read_all": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "set": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "set_many": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "raw_read_all": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          }
        },
        "outputs": {
          "DO1": {
            "writes": 0,
            "last_state": "unknown"
          },
          "DO2": {
            "writes": 0,
            "last_state": "unknown"
          }
        }
      },
      "DI": {
        "status": "OK",
        "description": "Running",
        "last_report": 1770382404832,
        "stats": {
          "read_all": {
            "samples": 181758,
            "retries": 0,
            "discards": 0
          },
          "read_raw": {
            "samples": 0,
            "retries": 0,
            "discards": 0
          },
          "inputs": {
            "DI1": {
              "reads": 181758,
              "last_state": "low"
            },
            "DI2": {
              "reads": 181758,
              "last_state": "low"
            },
            "DI3": {
              "reads": 181758,
              "last_state": "low"
            },
            "DI4": {
              "reads": 181758,
              "last_state": "low"
            }
          }
        }
      }
    }
  }
}

28. TempSensor Actor

28.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.

28.1.1 Set temperature sensor configurations

Req-Topic: tempSensor/config/in

ALERT:

  • activate: true(active)/false
  • templow: alert temperature lower limit
  • tempHigh: alert temperature upper limit
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "ALERT": {
        "activate": true,
        "tempLow": 0,
        "tempHigh": 80
      }
    }
  }
}

Reply-Topic: tempSensor/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "ALERT": {
        "activate": true,
        "tempLow": 0,
        "tempHigh": 80
      }
    }
  }
}
28.1.2 Read temperature sensor configurations

Req-Topic: tempSensor/config/in

ALERT:

  • activate: true(active)/false

LIMITS:

  • templow: alert temperature lower limit
  • tempHigh: alert temperature upper limit
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: tempSensor/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "ALERT": {
        "activate": true,
        "tempLow": 0,
        "tempHigh": 80
      }
    }
  }
}
28.1.3 Read temperature and alert status
  • unit: Temperature unit of measure
  • alert: true (triggered) or false

Req-Topic: tempSensor/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: tempSensor/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "success": true,
      "data": {
        "temperature": <_FLOAT_>,
        "unit": "C",
        "alert": true
      }
    }
  }
}

29. TFT Actor

29.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to control and interact with the TFT display, or frontal panel LCD screen. Connecting to the broker for this Area requires no credentials.

29.2 TFT Display Actor

  The TFT Actor is responsible for:

  • Rendering static and informative screens on the TFT display
  • Reacting to joystick input (LEFT/ RIGHT/ CENTER/ UP/ DOWN)
  • Managing screen navigation and user confirmation flows
  • Providing feedback to the application via MQTT

The TFT actor maintains an ordered list of screens (carousel).

  • Screens are navigated using the joystick:

- LEFT --> Previous screen

- RIGHT --> Next screen

  • The carousel wraps around:

- LEFT on first screen --> last screen

- RIGHT on last screen --> first screen

29.2.2 Screen Types

The TFT actor supports the following screen types:

a.) Image Screen

  • Displays a static JPEG image
  • Default screen shown at boot
  • No user interaction required

b.) Network Information Screen

  • Display a interface with information about the networks of the device
  • Updated on load
  • No user interaction required
29.2.3 Joystick Navigation Logic

Carousel Navigation:

Joystick Input Action
LEFT Previous screen
RIGHT Next screen
DOWN Refresh current screen
29.2.4 Boot Behavior

At system boot:

  1. TFT actor initializes the display
  2. Last available carousel is loaded
  3. First screen is rendered
  4. Joystick subscriptions are activated
  5. Actor waits for runtime commands
29.2.5 Design Notes & Constraints
  • TFT actor does not expose joystick state
  • Joystick actor remains independent
  • TFT actor internally consumes joystick events
  • Carousel state is local to the TFT actor
  • Screen rendering is synchronous; input handling is asynchronous
  • Confirmation screens always require explicit CENTER press

29.3 User interaction through MQTT

Enabling interaction with the carousel using the topic tft/runtime/in . Actions available will be public to the user.

Runtime commands

Go to screen

Req-Topic: tft/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "SET_CAROUSEL",
    "params": {
      "index": 2
    }
  }
}

Reply-Topic: tft/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "tft",
  "task": {
    "taskResult": {
      "success": true,
      "index": 2
    }
  }
}

Set TFT Screen Carousel Req-Topic: tft/runtime/in

{
  "id": "TIMESTAMP",
  "origin": "APP",
  "task": {
    "action": "SET_CAROUSEL",
    "params": {
      "startIndex": 0,
      "screens": [
        {
          "type": "image",
          "image": "default.jpg"
        },
        {
          "type": "image",
          "image": "status.jpg"
        },
        {
          "type": "confirm",
          "question": "Do you want to continue?"
        }
      ]
    }
  }
}

Parameters:

Field Description
screens Ordered list of screens
Start lndex Initial active screen (optional, default = 0)

Reply

Reply-Topic: tft/runtime/out

{
  "id": "TIMESTAMP",
  "origin": "tft",
  "task": {
    "taskResult": {
      "success": true,
      "activeIndex": 0,
      "totalScreens": 3
    }
  }
}

30. Analoglnputs Actor

30.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.

30.1.1 Configurations

  Topic: analoglnputs/config/in - Set ADC channels configurations

mode

  • continuous
  • single

type

  • voltage
  • current
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AI1": {
        "mode": "single",
        "type": "voltage"
      },
      "AI2": {
        "mode": "single",
        "type": "voltage"
      },
      "AI3": {
        "mode": "single",
        "type": "current"
      },
      "AI4": {
        "mode": "single",
        "type": "current"
      }
    }
  }
}

Reply-Topic: analoglnputs/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AI1": {
        "success": true
      },
      "AI2": {
        "success": true
      },
      "AI3": {
        "success": true
      },
      "AI4": {
        "success": true
      }
    }
  }
}
30.1.2 Runtime Data

Topic: analoglnputs/runtime/in.

action:

  • READ
  • PAUSE (only applicable in continuous mode)
  • RESUME (only applicable in continuous mode)
{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AI1": {
        "action": "READ"
      },
      "AI2": {
        "action": "READ"
      },
      "AI3": {
        "action": "READ"
      },
      "AI4": {
        "action": "READ"
      }
    }
  }
}

Reply-Topic: analoglnputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AI1": {
        "success": true,
        "value": <_FLOAT_>
      },
      "AI2": {
        "success": true,
        "value": <_FLOAT_>
      },
      "AI3": {
        "success": true,
        "value": <_FLOAT_>
      },
      "AI4": {
        "success": true,
        "value": <_FLOAT_>
      }
    }
  }
}

31. Analog Outputs Actor

31.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.

31.1.1 Set analog outputs signal

Req-Topic: analogOutputs/config/in

Output: current within 0-20 mA

mode: on/off

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "mode": "on",
      "AO1": {
        "current": <_FLOAT_>
      },
      "AO2": {
        "current": <_FLOAT_>
      }
    }
  }
}

Reply-Topic: analogOutputs/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "mode": "on",
      "AO1": {
        "success": true,
        "current": <_FLOAT_>
      },
      "AO2": {
        "success": true,
        "current": <_FLOAT_>
      }
    }
  }
}
31.1.2 Set analog outputs

Req-Topic: analogOutputs/runtime/in

current: current within 0-20 mA

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AO1": {
        "action": "SET",
        "current": <_FLOAT_>
      },
      "AO2": {
        "action": "SET",
        "current": <_FLOAT_>
      }
    }
  }
}

Reply-Topic: analoigOutputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AO1": {
        "success": true,
        "current": <_FLOAT_>
      },
      "AO2": {
        "success": true,
        "current": <_FLOAT_>
      }
    }
  }
}
31.1.3 Read analog outputs settings

Req-Topic: analogOutputs/runtime/in

current: current within 0-20 mA

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "AO1": {
        "action": "READ"
      },
      "AO2": {
        "action": "READ"
      }
    }
  }
}

Reply-Topic: analogOutputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "AO1": {
        "success": true,
        "current": <_FLOAT_>
      },
      "AO2": {
        "success": true,
        "current": <_FLOAT_>
      }
    }
  }
}

32. Digital lnputs Actor

32.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credentials.

32.1.1 Set digital input pin/pins speed fast/slow

The fast speed setting supports edge detection speed up to 100 Hz and the slow speed settings supports up to 10 Hz.

Fast Mode generates a message on every I/O state change, which may result in a high message payload during operation. Fast Mode should therefore only be enabled when strictly required.

Req-Topic: digitallnputs/config/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "DI1": {
        "speed": "fast"
      },
      "DI2": {
        "speed": "slow"
      },
      "DI3": {
        "speed": "fast"
      },
      "DI4": {
        "speed": "fast"
      }
    }
  }
}

Reply-Topic: digitallnputs/config/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DI1": {
        "success": true,
        "speed": "fast"
      },
      "DI2": {
        "success": true,
        "speed": "slow"
      },
      "DI3": {
        "success": true,
        "speed": "fast"
      },
      "DI4": {
        "success": true,
        "speed": "fast"
      }
    }
  }
}
32.1.2 Get all digital input pins state

Req-Topic: digitallnputs/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: digitallnputs/runtime/out state: high/low

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DI1": {
        "success": true,
        "state": "high"
      },
      "DI2": {
        "success": true,
        "state": "low"
      },
      "DI3": {
        "success": true,
        "state": "high"
      },
      "DI4": {
        "success": true,
        "state": "low"
      }
    }
  }
}

33. Digital Outputs Actor

33.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this area requires no credencials.

33.1.1 Get all digital output pins state

Req-Topic: digitalOutputs/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: digitalOutputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DO1": {
        "success": true,
        "state": "low"
      },
      "DO2": {
        "success": true,
        "state": "high"
      },
      "DO3": {
        "success": true,
        "state": "high"
      },
      "DO4": {
        "success": true,
        "state": "low"
      },
      "DO5": {
        "success": true,
        "state": "low"
      },
      "DO6": {
        "success": true,
        "state": "low"
      },
      "DO7": {
        "success": true,
        "state": "low"
      },
      "DO8": {
        "success": true,
        "state": "low"
      }
    }
  }
}
33.1.2 Set all digital output pins state

Req-Topic: digitalOutputs/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskParams": {
      "DO1": {
        "action": "SET",
        "state": "low"
      },
      "DO2": {
        "action": "SET",
        "state": "high"
      },
      "DO3": {
        "action": "SET",
        "state": "high"
      },
      "DO4": {
        "action": "SET",
        "state": "low"
      },
      "DO5": {
        "action": "SET",
        "state": "low"
      },
      "DO6": {
        "action": "SET",
        "state": "low"
      },
      "DO7": {
        "action": "SET",
        "state": "low"
      },
      "DO8": {
        "action": "SET",
        "state": "low"
      }
    }
  }
}

Reply-Topic: digitalOutputs/runtime/out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "D01": {
        "success": true,
        "state": "low"
      },
      "D02": {
        "success": true,
        "state": "high"
      },
      "D03": {
        "success": true,
        "state": "high"
      },
      "D04": {
        "success": true,
        "state": "high"
      },
      "D05": {
        "success": true,
        "state": "high"
      },
      "D06": {
        "success": true,
        "state": "low"
      },
      "D07": {
        "success": true,
        "state": "low"
      },
      "D08": {
        "success": true,
        "state": "low"
      }
    }
  }
}

33.2 Notes

If the busi2c-3 is not powered, we will get this:

Topic: digit a lOutputs/runtime/ out

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "DO1": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO2": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO3": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO4": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO5": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO6": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO7": {
        "success": false,
        "state": "DO_not_powered"
      },
      "DO8": {
        "success": false,
        "state": "DO_not_powered"
      }
    }
  }
}

34. Joystick Actor

34.1 App Interfacing

User App interface and functionalities exposed to the open part of the MQTT broker. Simplified interface to configure and obtain peripherals data. Connecting to the broker for this Area requires no credencials.

34.1.1 Get all joystick pins state

Req-Topic: joystick/runtime/in

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "action": "READ"
  }
}

Reply-Topic: joystick//runtime/out state: pressed/released

{
  "id": "<TIMESTAMP>",
  "origin": "APP",
  "task": {
    "taskResult": {
      "JLEFT": {
        "success": true,
        "state": "pressed"
      },
      "JRIGHT": {
        "success": true,
        "state": "released"
      },
      "JUP": {
        "success": true,
        "state": "released"
      },
      "JDOWN": {
        "success": true,
        "state": "released"
      },
      "JCENTER": {
        "success": true,
        "state": "released"
      }
    }
  }
}

35. Included Software Stack

36. Hardware Libraries

[IMAGE PLACEHOLDER]

PA Name Requirements

38. Accessories

PA Name Requirements

39. Document History

Version Description Date
SBADATAv0.1 First version of SENSBLUE ATLAS Datasheet 11/03/2026

40. SENSBLUE ATLAS in-the-field

[IMAGE PLACEHOLDER]