Example MQTT Topic Structure & API Architecture

Multi-Tenant IoT Safety Monitoring Platform

MQTT Topic Structure

Hierarchical Topic Organization

{customer-id}/ Customer namespace isolation
├── radiation-badge/ Device type
│ ├── {device-id}/ Individual device
│ │ ├── telemetry Sensor readings
│ │ ├── alerts Alert notifications
│ │ ├── heartbeat Device status
│ │ └── commands Device control
├── gas-detector/ Different device type
└── events/ Event-based monitoring
├── {event-id}/ Specific event (surgery, maintenance)
│ ├── participants Event member data
│ ├── telemetry Aggregated readings
│ └── status Event lifecycle

API Routes Structure

📱
Device Management
GET/api/devices
GET/api/devices/{id}
PUT/api/devices/{id}/config
DELETE/api/devices/{id}
👥
User Management
POST/api/auth/login
POST/api/auth/logout
GET/api/users
POST/api/users
PUT/api/users/{id}/roles
GET/api/organization
📊
Monitoring & Data
GET/api/devices/{device_id}/data
GET/api/devices/{device_id}/data?start={timestamp}&end={timestamp}
GET/api/user/devices
GET/api/user/devices/data
🚨
Alerts & Events
GET/api/alerts
POST/api/alerts/{id}/acknowledge
POST/api/alert
POST/api/events
PUT/api/events/{id}/participants
POST/api/events/{id}/complete

Database Tables

DynamoDB Tables (Per Customer)

devices-{customer-id}
  • deviceId (String, PK)
  • deviceType (String)
  • status (String)
  • location (String)
  • assignedUser (String)
  • lastSeen (Timestamp)
  • configuration (Map)
  • batteryLevel (Number)
users-{customer-id}
  • userId (String, PK)
  • email (String, GSI)
  • role (String)
  • department (String)
  • permissions (Set)
  • alertPreferences (Map)
  • createdAt (Timestamp)
  • lastLogin (Timestamp)
events-{customer-id}
  • eventId (String, PK)
  • eventType (String)
  • status (String)
  • startTime (Timestamp)
  • endTime (Timestamp)
  • participants (Set)
  • devices (Set)
  • location (String)
  • metadata (Map)
alerts-{customer-id}
  • alertId (String, PK)
  • deviceId (String, GSI)
  • severity (String)
  • status (String)
  • threshold (Number)
  • actualValue (Number)
  • acknowledgedBy (String)
  • createdAt (Timestamp)
  • resolvedAt (Timestamp)
configurations-{customer-id}
  • configId (String, PK)
  • deviceType (String)
  • version (String)
  • thresholds (Map)
  • reportingInterval (Number)
  • alertSettings (Map)
  • isActive (Boolean)
  • createdAt (Timestamp)
sessions-{customer-id}
  • sessionId (String, PK)
  • userId (String, GSI)
  • connectionId (String)
  • subscriptions (Set)
  • createdAt (Timestamp)
  • lastActivity (Timestamp)
  • ipAddress (String)
  • userAgent (String)

TimeStream Database (Per Customer)

sensor-data-{customer-id}
  • time (Timestamp)
  • deviceId (Dimension)
  • deviceType (Dimension)
  • location (Dimension)
  • eventId (Dimension)
  • exposureLevel (Measure)
  • batteryLevel (Measure)
  • temperature (Measure)
  • signalStrength (Measure)

Data Flow Integration

📱

Device Publishes

customer-a/radiation-badge/device-001/telemetry

🔄

IoT Rule Routes

Lambda processes customer-a data

💾

Store Data

DynamoDB devices-customer-a
TimeStream sensor-data-customer-a

🚨

Check Alerts

Threshold violations create alerts-customer-a entries

📊

API Serves Data

customer-a.api.yourdomain.com/api/data

🔌

Real-time Updates

Cloud front pushes to customer-a dashboard