ORCHIDEA-IIoT Platform
Industrial Internet of Things Platform
Unified, Scalable, Production-Ready IIoT Infrastructure
Table of Contents
- What is ORCHIDEA-IIoT?
- Architecture Overview
- 9-Layer Architecture
- Directory Structure
- Quick Start
- Service Port Reference
- Credential Sources
- Systemd Service Management
- Brand Identity
- Documentation
- License
2026-10 能力更新(v1.1.0)
- 数字孪生场景库:
config/twin-3d-scenes.json提供 108 个行业场景,glTF 2.0,three.js / Cesium 渲染,按 ISA-95 层级树布局 - GLB 资产管线:
tools/model-pipeline/generate_glb.py按设备类别参数化生成,model-manifest.json登记 556 个模型,支持assets/real/<path>.glb真实资产覆盖 - 行业模型:煤矿装备(采煤机/掘进机/输送机/液压支架/通风机)与矿冶(破碎机/球磨机/浮选机/磁选机/浓密机)
- B2MML 事务模板:6 类事务、107 个行业、642 个企业-车间消息交换模板
- 集成层:Model-Gateway / Protocol-Router / Sync-Engine / Sparkplug Bridge / AAS Service / RDF Writer
资产说明:当前模型库以参数化生成资产为主(
realCount=0),真实设备资产可通过assets/real/覆盖。
What is ORCHIDEA-IIoT?
ORCHIDEA-IIoT is a comprehensive, production-grade Industrial Internet of Things platform designed for smart manufacturing, process automation, and digital twin applications. It unifies 9 architectural layers into a cohesive, deployable system with unified configuration, monitoring, and management.
Key Features
- Unified Gateway: Single Nginx entry point for all services via
/api/paths - Dual MQTT Backbone: Unified central broker plus lightweight edge broker
- Digital Twin: Real-time device twin synchronization and semantic asset governance
- Stream Processing: Event processing and rule orchestration for industrial flows
- Soft PLC: IEC 61131-3 compliant control logic runtime
- SCADA/HMI: Web-based visualization with real-time operator feedback
- Flow Orchestration: Visual workflow design for integration and automation
- Hot Storage: High-performance time-series metrics storage
- Cold Storage: Relational and time-series hybrid persistence
Architecture Overview
+-------------------+
| End Users / |
| Edge Devices |
+--------+----------+
|
+--------------v--------------+
| Nginx Reverse Proxy |
| (Port 80 / 443) |
| /api/* routes to services |
+--+--------+--------+--------+
| | |
+------------------+ | +------------------+
| | |
+---------v---------+ +----------v-----------+ +--------v----------+
| Unified Workspaces| | Integration Services | | Messaging Backbone |
| Ops / HMI / Flow | | Model-Gateway :8081 | | Central :1883 |
| Device / Twin | | Protocol-Router :8082 | | Edge :11883 |
| Stream / Control | | Sync-Engine :8083 | +-------------------+
+-------------------+ +----------------------+
| |
+---------v---------+ +----------v-----------+
| Device + Twin Hub | | Stream Compute |
| Device :8080 | | Analytics :18888 |
| Ditto :18080 | +----------------------+
+-------------------+ |
| +---------v---------+
+---------v---------+ | Data Warehouse |
| Control Runtime | | InfluxDB :8086 |
| Soft PLC | | PostgreSQL :5432 |
+-------------------+ +-------------------+
9-Layer Architecture
+==========================================================================+
| ORCHIDEA-IIoT 9-Layer Stack |
+==========================================================================+
| LAYER 9 | Integration Hub | Model-Gateway, Protocol-Router, Sync-Eng |
| | (:8081 :8082 :8083)| Internal microservices glue layer |
+---------+--------------------+-------------------------------------------+
| LAYER 8 | Design Studio | Orchidea Flow Studio (:1880) |
| | | Visual workflow design & low-code logic |
+---------+--------------------+-------------------------------------------+
| LAYER 7 | Visualization | Operations Center (:3000), HMI Console (:1881) |
| | | Ops dashboard + SCADA-HMI |
+---------+--------------------+-------------------------------------------+
| LAYER 6 | Data Warehouse | InfluxDB (:8086) Hot Storage |
| | | Time-series metrics & analytics |
+---------+--------------------+-------------------------------------------+
| LAYER 5 | IoT Platform | Device Hub (:8080), Twin Hub (:18080) |
| | | Device operations + digital twin |
+---------+--------------------+-------------------------------------------+
| LAYER 4 | Messaging Backbone | Central Broker (:1883/18083), Edge Broker (:11883) |
| | | Central + Lightweight MQTT brokers |
+---------+--------------------+-------------------------------------------+
| LAYER 3 | Data Convergence | PostgreSQL 15 + TimescaleDB (:5432) |
| | | Relational + hypertable time-series |
+---------+--------------------+-------------------------------------------+
| LAYER 2 | Edge Gateway | Edge Collector, Protocol-Router |
| | | Protocol adaptation & edge collection |
+---------+--------------------+-------------------------------------------+
| LAYER 1 | Control Plane | Soft PLC Runtime, IEC 61131-3 Compiler |
| | | Soft PLC + control logic compilation |
+---------+--------------------+-------------------------------------------+
Service Dependency Chain
PostgreSQL 15
|
v
InfluxDB Hot Storage
|
v
Central Broker
|
v
NanoMQ Lightweight Broker
|
v
Device Operations Hub
|
v
Twin Governance Hub
|
v
Stream Intelligence Hub
|
v
Soft PLC Runtime
|
v
Edge Collection Runtime
|
v
Model-Gateway (8081)
|
v
Protocol-Router (8082)
|
v
Sync-Engine (8083)
|
v
Operations Center
|
v
HMI Console
|
v
Flow Studio
|
v
Nginx Reverse Proxy (80/443)
Directory Structure
orchidea-IIoT/
|
|-- 01-Control-Plane/ # Soft PLC + IEC 61131-3 compiler
|-- 02-Edge-Gateway/ # Edge collection, protocol adapters
|-- 03-Data-Convergence/ # PostgreSQL + TimescaleDB setup
|-- 04-Messaging-Backbone/ # Central and edge broker configs
|-- 05-IoT-Platform/ # Device operations and twin services
|-- 06-Data-Warehouse/ # InfluxDB hot storage setup
|-- 07-Visualization/ # Operations dashboard and HMI configs
|-- 08-Design-Studio/ # Flow studio assets and settings
|-- 09-Integration-Hub/ # Microservices (Java/Python/Go)
|
|-- config/
| |-- nginx.conf # Nginx reverse proxy config
| |-- nginx-locations.conf # API location blocks
| |-- orchidea-env.sh # Global environment variables
| |-- init-all.sql # Database initialization
|
|-- systemd/
| |-- orchidea-pg15.service # PostgreSQL 15
| |-- orchidea-hot-storage.service # InfluxDB
| |-- orchidea-central-broker.service # Central broker
| |-- orchidea-lightweight-broker.service # NanoMQ
| |-- orchidea-device-mgmt.service # Device operations service
| |-- orchidea-digital-twin.service # Twin governance service
| |-- orchidea-stream-compute.service # Stream intelligence service
| |-- orchidea-soft-plc.service # Soft PLC runtime
| |-- orchidea-edge-collector.service # TB Gateway
| |-- orchidea-model-gateway.service # Java microservice
| |-- orchidea-protocol-router.service # Python microservice
| |-- orchidea-sync-engine.service # Go microservice
| |-- orchidea-ops-dashboard.service # Operations center
| |-- orchidea-scada-hmi.service # HMI console
| |-- orchidea-flow-orchestrator.service # Flow studio
| |-- orchidea-nginx.service # Nginx proxy
|
|-- docs/
| |-- api-reference.md # REST API quick reference
| |-- configuration-guide.md # How to customize configs
| |-- operations-manual.md # Logs, backup, monitoring
|
|-- tests/
| |-- integration/
| |-- test_01_control_plane.sh # IEC compiler test
| |-- test_02_edge_collection.sh # Modbus edge test
| |-- test_03_digital_twin.sh # Twin sync test
| |-- test_04_stream_processing.sh # Stream processing test
| |-- test_05_visualization.sh # Dashboard / HMI test
| |-- test_06_offline_retransmit.sh # SQLite retry test
|
|-- docker-compose.yml # Optional containerized deploy
|-- install.sh # One-click build orchestrator
|-- README.md # This file
|-- SPEC.md # Platform specification
Quick Start
Prerequisites
# Required packages (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install -y build-essential git curl wget jq \
postgresql-client redis-tools nodejs npm \
nginx python3 python3-pip python3-venv \
openjdk-17-jdk golang-go mosquitto-clients
# Create orchidea user
sudo useradd -r -s /bin/bash -d /opt/orchidea -m orchidea 2>/dev/null || true
Supported Platforms:
- Linux: Debian/Ubuntu, RHEL/CentOS/Rocky, Alpine, Arch (x86_64, ARM64, ARMv7)
- macOS: Development only (via Homebrew)
- Windows: Development only (via WSL2 + Docker Desktop)
Offline / Air-Gapped: For environments without internet, run make build-offline-bundle on a connected machine, transfer the tar.gz, and run bash install.sh --offline on the target.
ARM64 / Edge Gateways: The platform supports ARM64 for edge deployments (Raspberry Pi 4/5, NVIDIA Jetson). Use make docker-multiarch to build multi-arch images.
1. Clone and Enter
cd orchidea-IIoT
2. Run the Build
chmod +x install.sh
sudo ./install.sh
This will build all 9 layers in order. To build a specific layer only:
sudo ./install.sh control-plane
sudo ./install.sh integration-hub
3. Start All Services
# Start in dependency order
sudo systemctl start orchidea-pg15
sudo systemctl start orchidea-hot-storage
sudo systemctl start orchidea-central-broker
sudo systemctl start orchidea-lightweight-broker
sudo systemctl start orchidea-device-mgmt
sudo systemctl start orchidea-digital-twin
sudo systemctl start orchidea-stream-compute
sudo systemctl start orchidea-soft-plc
sudo systemctl start orchidea-edge-collector
sudo systemctl start orchidea-model-gateway
sudo systemctl start orchidea-protocol-router
sudo systemctl start orchidea-sync-engine
sudo systemctl start orchidea-ops-dashboard
sudo systemctl start orchidea-scada-hmi
sudo systemctl start orchidea-flow-orchestrator
sudo systemctl start orchidea-nginx
Or start all at once:
sudo systemctl start orchidea-pg15 orchidea-hot-storage orchidea-central-broker \
orchidea-lightweight-broker orchidea-device-mgmt orchidea-digital-twin \
orchidea-stream-compute orchidea-soft-plc orchidea-edge-collector \
orchidea-model-gateway orchidea-protocol-router orchidea-sync-engine \
orchidea-ops-dashboard orchidea-scada-hmi orchidea-flow-orchestrator orchidea-nginx
4. Enable Auto-Start
sudo systemctl enable orchidea-pg15 orchidea-hot-storage orchidea-central-broker \
orchidea-lightweight-broker orchidea-device-mgmt orchidea-digital-twin \
orchidea-stream-compute orchidea-soft-plc orchidea-edge-collector \
orchidea-model-gateway orchidea-protocol-router orchidea-sync-engine \
orchidea-ops-dashboard orchidea-scada-hmi orchidea-flow-orchestrator orchidea-nginx
5. Access the Platform
| Service | URL | Internal Port |
|---|---|---|
| Gateway (root) | http://localhost/ | 80 |
| Device Management | http://localhost/api/device-mgmt/ | 8080 |
| Operations Dashboard | http://localhost/api/dashboard/ | 3000 |
| SCADA-HMI | http://localhost/api/scada/ | 1881 |
| Flow Orchestrator | http://localhost/api/flow/ | 1880 |
| Digital Twin | http://localhost/api/digital-twin/ | 8080 |
| Stream Processing | http://localhost/api/stream-compute/ | 8080 |
| Soft PLC | http://localhost/api/plc/ | 8080 |
| Health Check | http://localhost/health | 80 |
6. Docker Compose Alternative
# Containerized deployment (development only)
docker-compose up -d
# View logs
docker-compose logs -f
# Scale specific services
docker-compose up -d --scale protocol-router=2
# Stop everything
docker-compose down -v
7. Kubernetes Deployment
# Build Helm dependencies
helm dependency build deploy/helm/orchidea-iiot/
# Deploy to Kubernetes (production values)
helm install orchidea deploy/helm/orchidea-iiot/ \
-f deploy/helm/orchidea-iiot/values-production.yaml \
--namespace orchidea \
--create-namespace
# Check deployment status
kubectl get pods -n orchidea
kubectl get svc -n orchidea
# Port-forward for local access
kubectl port-forward svc/orchidea-nginx 8080:80 -n orchidea
Helm Chart features:
- 17 Kubernetes templates (deployments, services, ingress, HPA)
- Production values: HPA (2-10 replicas), PDB, TLS Ingress, NetworkPolicy
- Terraform modules for AWS infrastructure provisioning
- Native K8s manifests for namespace, configmap, secret, postgres
Service Port Reference
| # | Service | Port | Protocol | Purpose |
|---|---|---|---|---|
| 1 | PostgreSQL 15 | 5432 | TCP | Relational + time-series database |
| 2 | InfluxDB | 8086 | HTTP | Time-series hot storage |
| 3 | Central Broker MQTT | 1883 | TCP | Central MQTT broker |
| 4 | Central Broker Console | 18083 | HTTP | Broker management UI |
| 5 | Central Broker WebSocket | 8083 | WS | MQTT over WebSocket |
| 6 | Edge Broker | 11883 | TCP | Lightweight edge broker |
| 7 | Device Operations | 8080 | HTTP | Device management platform |
| 8 | Digital Twin | 18080 | HTTP | Digital twin service |
| 9 | Stream Intelligence | 8090 | HTTP | Stream processing engine |
| 10 | Soft PLC Runtime | 8080 | HTTP | Soft PLC runtime |
| 11 | Operations Dashboard | 3000 | HTTP | Operations dashboard |
| 12 | HMI Console | 1881 | HTTP | SCADA-HMI web server |
| 13 | Flow Orchestrator | 1880 | HTTP | Flow orchestration workspace |
| 14 | Model Gateway | 8081 | HTTP | Java integration service |
| 15 | Protocol Router | 8082 | HTTP | Python protocol service |
| 16 | Sync Engine | 8083 | HTTP | Go synchronization service |
| 17 | Nginx | 80 | HTTP | Reverse proxy gateway |
| 18 | Nginx | 443 | HTTPS | SSL gateway (uncomment in config) |
Credential Sources
All deployment credentials must be supplied by environment variables or secret managers.
| Service | Username Source | Password / Token Source | Notes |
|---|---|---|---|
| Device Operations | Provisioned out-of-band | Provisioned out-of-band | Bootstrap separately before first login |
| EMQX Dashboard | ORCHIDEA_EMQX_DASHBOARD_USER | ORCHIDEA_EMQX_DASHBOARD_PASSWORD | Set before startup |
| Grafana | ORCHIDEA_GRAFANA_ADMIN_USER | ORCHIDEA_GRAFANA_ADMIN_PASSWORD | Change through secret rotation flow |
| PostgreSQL | PGUSER | ORCHIDEA_PG_PASSWORD | Application user |
| InfluxDB | INFLUXDB_ADMIN_USER | ORCHIDEA_INFLUXDB_PASSWORD / ORCHIDEA_INFLUXDB_TOKEN | Initial setup token |
| Internal Twin APIs | Provisioned out-of-band | Secret manager | Do not hardcode in repo |
Security Note: Change all default passwords before production deployment!
Systemd Service Management
Check All Service Status
systemctl status orchidea-*
View Logs
# Follow logs for a specific service
sudo journalctl -u orchidea-device-mgmt -f
# View last 100 lines
sudo journalctl -u orchidea-pg15 -n 100
# View logs since last boot
sudo journalctl -u orchidea-nginx -b
Restart Individual Service
sudo systemctl restart orchidea-device-mgmt
Stop All Services
sudo systemctl stop orchidea-nginx orchidea-flow-orchestrator \
orchidea-scada-hmi orchidea-ops-dashboard orchidea-sync-engine \
orchidea-protocol-router orchidea-model-gateway orchidea-edge-collector \
orchidea-soft-plc orchidea-stream-compute orchidea-digital-twin \
orchidea-device-mgmt orchidea-lightweight-broker orchidea-central-broker \
orchidea-hot-storage orchidea-pg15
Service Startup Sequence (via After= dependencies)
The systemd services are designed to start in order automatically:
# Start all with correct dependency ordering
sudo systemctl start orchidea-pg15
# Wait for each layer to stabilize, then:
sudo systemctl start orchidea-nginx # Will pull in all dependencies
Brand Identity
- Logo:
./orchidea-brand/logo.png - Icon:
./orchidea-brand/icon.png - Project Name: ORCHIDEA-IIoT
- Tagline: Industrial Internet of Things Platform
The brand assets are automatically copied to /opt/orchidea/www/ during installation and served by Nginx at the gateway root path.
Documentation
Full documentation is available in the docs/ directory:
| Document | Description |
|---|---|
docs/api-reference.md | REST API endpoints for all services |
docs/configuration-guide.md | How to modify and customize configurations |
docs/operations-manual.md | Logs, backup/restore, monitoring, troubleshooting |
Integration Testing
Run the integration test suite:
cd tests/integration
chmod +x test_*.sh
# Run all tests
./test_01_control_plane.sh
./test_02_edge_collection.sh
./test_03_digital_twin.sh
./test_04_stream_processing.sh
./test_05_visualization.sh
./test_06_offline_retransmit.sh
License
ORCHIDEA-IIoT is released under the MIT.
Individual components retain their original licenses:
- ThingsBoard: Apache 2.0
- Eclipse Ditto: EPL 2.0
- Apache StreamPipes: Apache 2.0
- Grafana: AGPL 3.0
- Node-RED: Apache 2.0
- FUXA: GPL 3.0
- EMQX: Apache 2.0
- OpenPLC: GPL 3.0
- InfluxDB: MIT
- PostgreSQL: PostgreSQL License
Built with precision. Engineered for industry.