ThingIO¶
Plane: Data Plane
Purpose¶
IoT data processing, analytics, and dashboard visualization. ThingIO is the platform service that gives developers and operators the tools to process device telemetry, build dashboards, and create visual widgets — all scoped to the devices enrolled in their account.
ThingIO is built on Apache StreamPipes. It provides the data processing and visualization capabilities that DeviceAdmin deliberately excludes — complex analytics, custom dashboards, and data pipeline management.
Responsibilities¶
Provide data processing pipelines for device telemetry (scoped per account)
Offer REST APIs for dashboard and widget management
Provide a React component library (SDK) for embedding dashboards and widgets into applications
Enable applications to register custom dashboards and visual widgets
Support data sourcing from enrolled device telemetry
Provide data sinking to external systems (databases, webhooks, notifications)
How ThingIO Relates to Other Services¶
┌─────────────┐
│ Applications │
│ (WES, CJ) │
└──────┬──────┘
│ embed widgets via
│ React SDK + APIs
▼
┌──────────────┐ ┌─────────────┐ ┌──────────────┐
│ DeviceAdmin │───►│ ThingIO │◄───│ OTAForge │
│ (devices, │ │ │ │ (OTA stats │
│ alerts) │ │ Processing │ │ as data │
└──────────────┘ │ APIs + SDK │ │ source) │
└──────┬──────┘ └──────────────┘
│ reads telemetry
▼
┌─────────────┐
│ StreamPipes │
│ (via Kafka) │
└─────────────┘
DeviceAdmin handles device enrollment and basic alerts
ThingIO handles data processing and visualization (APIs + React SDK)
OTAForge handles artifact distribution
Account Scoping¶
All ThingIO resources are scoped to the account that creates them. An account can only process telemetry from devices enrolled under that account (as registered in DeviceAdmin).
Resource |
Scope |
Visibility |
|---|---|---|
Data pipeline |
Account |
Only processes telemetry from account’s devices |
Dashboard |
Account |
Visible to account members only |
Widget |
Account (shareable) |
Can be published to Marketplace as a component |
Data source |
Account |
Bound to account’s enrolled devices |
Data sink |
Account |
Configured per account (webhooks, databases) |
React SDK¶
ThingIO does not provide a standalone dashboard web application. Instead, it provides:
REST APIs for managing dashboards, widgets, pipelines, and data sources/sinks
React component library (
@flexgalaxy/thingIO-widgets) for embedding dashboards and widgets into any application
Applications (WES, ClearJanitor, StarGate, or third-party apps) use the React SDK to embed ThingIO visualizations directly into their own UIs.
Why React SDK (not a standalone app)¶
Approach |
Why Not |
|---|---|
Standalone web app |
Forces context-switching; can’t integrate with app-specific workflows |
iframe embedding |
Poor UX, cross-origin issues, no shared state with host app |
Redirect to ThingIO |
Users lose application context |
React SDK (chosen) |
Widgets render natively inside the host app, share auth context, and respond to app-specific events |
SDK Usage¶
import { DashboardView, BatteryGauge, CoverageHeatmap }
from '@flexgalaxy/thingIO-widgets';
// Embed a full dashboard
<DashboardView dashboardId="fleet-overview" />
// Embed individual widgets
<BatteryGauge deviceTypes={['amr']} aggregation="min" />
<CoverageHeatmap deviceTypes={['cleaning_robot']} timeWindow="current_shift" />
The SDK handles authentication (passes the host app’s DotID token), account scoping, and real-time data subscriptions automatically.
SDK Architecture¶
┌─────────────────────────────────────────────┐
│ Host Application (WES, ClearJanitor, etc.) │
│ │
│ ┌───────────────────────────────────────┐ │
│ │ @flexgalaxy/thingIO-widgets │ │
│ │ │ │
│ │ ┌─────────┐ ┌──────────┐ ┌────────┐ │ │
│ │ │Dashboard│ │ Gauge │ │Heatmap │ │ │
│ │ │ View │ │ │ │ │ │ │
│ │ └────┬────┘ └────┬─────┘ └───┬────┘ │ │
│ │ │ │ │ │ │
│ │ ┌────▼───────────▼───────────▼────┐ │ │
│ │ │ ThingIO Data Provider │ │ │
│ │ │ (React Context + WebSocket) │ │ │
│ │ └────────────────┬────────────────┘ │ │
│ └───────────────────┼───────────────────┘ │
│ │ REST + WS │
└──────────────────────┼──────────────────────┘
▼
ThingIO Backend
Application Integration¶
Applications register dashboards and widgets with ThingIO via APIs, then embed them using the React SDK:
Registration Flow¶
Application ThingIO
│ │
│ POST /dashboards │
│ { │
│ "name": "Fleet Overview", │
│ "widgets": [...], │
│ "data_sources": [ │
│ {"type": "telemetry", │
│ "device_types": ["amr"], │
│ "metrics": ["battery", │
│ "position"]} │
│ ] │
│ } │
│──────────────────────────────────►│
│ │ Creates dashboard
│ │ Binds data sources
│ 200 OK │ to account's devices
│ {"dashboard_id": "..."} │
│◄──────────────────────────────────│
│ │
│ Embed in app UI: │
│ <DashboardView │
│ dashboardId="..." /> │
What Applications Can Register¶
Resource |
Description |
Example |
|---|---|---|
Dashboard |
A full-page view with multiple widgets |
WES: “Warehouse Floor Status” |
Widget |
A reusable visual component |
ClearJanitor: “Cleaning Coverage Heatmap” |
Data pipeline |
A processing pipeline for telemetry |
WES: “Order throughput per hour” |
Data source |
A telemetry subscription configuration |
ClearJanitor: “All cleaning robot positions” |
Data sink |
An output destination for processed data |
WES: “Alert webhook for stuck robots” |
Example: WES Dashboard Registration¶
{
"name": "Warehouse Operations",
"widgets": [
{
"type": "map",
"name": "Live Floor View",
"data_source": {
"device_types": ["amr", "mhe"],
"metrics": ["position", "status"]
}
},
{
"type": "gauge",
"name": "Fleet Battery Status",
"data_source": {
"device_types": ["amr"],
"metrics": ["battery"],
"aggregation": "min"
}
},
{
"type": "line_chart",
"name": "Orders Completed per Hour",
"data_pipeline": "wes-order-throughput"
}
]
}
Example: ClearJanitor Widget¶
{
"type": "heatmap",
"name": "Cleaning Coverage",
"data_source": {
"device_types": ["cleaning_robot"],
"metrics": ["position"],
"time_window": "current_shift"
},
"overlay": {
"type": "zone_map",
"source": "equator"
}
}
Data Processing Pipelines¶
ThingIO wraps StreamPipes’ pipeline capabilities with account-scoped access control and FlexGalaxy API conventions.
Pipeline Types¶
Type |
Description |
Example |
|---|---|---|
Transform |
Enrich, normalize, or reshape telemetry |
Convert GPS coordinates to zone IDs |
Aggregate |
Window-based computations |
Average battery level per zone per 5 min |
Detect |
Pattern and anomaly detection |
Battery drain rate accelerating |
Correlate |
Cross-device analysis |
Congestion detection (too many robots in zone) |
Infer |
ML model inference on telemetry |
Obstacle classification from sensor data |
Pipeline Definition¶
Pipelines are created via API:
[Data Source] [Processing] [Data Sink]
Account's ──► Filter / Transform ──► Dashboard widget
enrolled Aggregate Webhook
devices ML inference Database
(via Kafka) Pattern detect Notification
API Surface¶
Dashboards¶
Operation |
Description |
|---|---|
|
Create a dashboard |
|
List dashboards |
|
Get dashboard with widgets |
|
Update dashboard |
|
Delete a dashboard |
Widgets¶
Operation |
Description |
|---|---|
|
Register a widget |
|
List widgets |
|
Get widget definition |
|
Publish widget to Marketplace |
Data Pipelines¶
Operation |
Description |
|---|---|
|
Create a data pipeline |
|
List pipelines |
|
Get pipeline definition and status |
|
Start a pipeline |
|
Stop a pipeline |
Data Sources and Sinks¶
Operation |
Description |
|---|---|
|
Register a data source |
|
List data sources |
|
Configure a data sink |
|
List data sinks |
Implementation¶
Aspect |
Technology |
|---|---|
Processing engine |
Apache StreamPipes |
Message bus |
Kafka (dedicated MSK cluster, separate from ThingsBoard) |
Dashboard storage |
PostgreSQL |
Time-series queries |
ThingsBoard REST API / TimescaleDB |
React SDK |
React + TypeScript + IBM Carbon Design System |
SDK packaging |
npm ( |
Dependencies¶
Service |
Relationship |
|---|---|
DeviceAdmin |
Resolves enrolled devices for data scoping |
ThingsBoard |
Telemetry data source (via Kafka) |
StreamPipes |
Underlying data processing engine |
DotID |
Authenticates API calls, account scoping |
Equator |
Spatial data for map overlays and zone context |
Marketplace |
Publishes reusable widgets as components |
Consumed By¶
Consumer |
Usage |
|---|---|
WES |
Fleet dashboards, order throughput, zone utilization (embedded via React SDK) |
ClearJanitor |
Cleaning coverage heatmaps, robot status dashboards (embedded via React SDK) |
StarGate |
Admin views for platform-wide telemetry monitoring |
Applications |
Register custom dashboards, widgets, and pipelines; embed via SDK |
Operators |
Visual monitoring of device telemetry and analytics |