Open Source Demo

Red Hat × SAP
OHC Edge Integration

Physical security events — badge readers, cameras, HVAC, vehicle telemetry — flowing through Red Hat OpenShift to SAP BTP via Edge Integration Cell. Live, interactive, open source.

▶ Play the Demo Architecture Diagram GitHub

Live

▶ Edge Demo Game

Mobile · Cluster if up, static fallback if not

Wumpus-style physical security sim. Scan to play on your phone or open in any browser.

Open

SOC Dashboard

North · OpenShift · Live SSE

Real-time security operations center view. Shows CloudEvents as they arrive from south devices.

Open ↗

Presenter View

North · OpenShift · SAP + Red Hat decks

Seller presentations with live event feed. Select SAP or Red Hat framing.

Open ↗

QR Code

Booth display · Full-screen

Large-format QR for the booth screen. Scan sends attendees to the game.

Open ↗

West Trax Roundtable

Static · Container GTM Demo

Containerized go-to-market demo for West Trax. Shows the simplified customer journey from first scan to roundtable — without the meetings.

Open

Architecture

Layer 1
South
Execution. Device I/O. Permanent boundary.
  • Badge readers (OnGuard)
  • Cameras & surveillance
  • HVAC controllers
  • Biometric scanners
  • Environmental sensors
  • Connected vehicle
POST /ingest ↓
Layer 2
Middle
Plumbing. Replaceable. Currently Flask on OpenShift.
  • CloudEvent ingestion
  • Telemetry aggregation
  • SSE broadcast
  • State persistence (PVC)
  • Short-URL routing
SSE /events ↑
Layer 3
North
Decision support. Enterprise surface. Permanent boundary.
  • SOC Operations dashboard
  • Audience presentations
  • Evidence panel
  • SAP EIC → BTP (roadmap)
  • Analytics Cloud
 

North and South are permanent. The middle is replaceable — Flask today, Kafka or SAP Event Mesh tomorrow. When EIC arrives, it slots into North; the middle simplifies. The event contract (CloudEvents v1.0) is the stable interface between all three layers.

Event Classes

Every CloudEvent carries an eventclass field that drives dashboard color-coding, telemetry breakdowns, and SAP routing rules. Events follow the CloudEvents v1.0 spec with type prefix ohc.demo.*.

access
Badge scans, door state
🚨
incident
Security incidents
compliance
Safety & maintenance
network
Network anomalies
📹
surveillance
Camera diagnostics
building
HVAC, privacy film
🌡️
sensor
Environmental readings
📡
telem
Device telemetry
alert
Proximity warnings
🚗
vehicle
Connected car telemetry
🎮
status
Game & session lifecycle
⬇️
command
Actuator commands

CloudEvent envelope

{
  "specversion": "1.0",
  "type":        "ohc.demo.access.onguard.badge_scan",
  "source":      "south/lenel-reader-lobby",
  "id":          "uuid-v4",
  "time":        "2026-02-18T14:00:00Z",
  "eventclass":  "access",
  "data": {
    "badgeID":       "B-1042",
    "cardholderName":"Jim O'Donnell",
    "readerName":    "Main Lobby",
    "action":        "ACCESS_GRANTED"
  }
}

Edge Transport Adapters

Adapters run on-premises or on a laptop — not in the cluster. Each polls a physical or connected device and emits CloudEvents to POST /ingest.

🚗 Mercedes-Benz Relay

transport/mercedes/ · Python · OAuth2 · Read-only

Polls fuel level, odometer, lock status, tire pressure, and location via the Mercedes Connected Vehicle API. VIN and coordinates are redacted in all events. Runs on the presenter's laptop — not in the cluster.

📦 Artifact Relay

transport/ · Python · Send/Receive

Utility scripts for syncing demo artifacts between local and cluster environments during development and pre-demo setup.

Adding a new device class: implement a script that POSTs a valid CloudEvent JSON to /ingest with the appropriate eventclass field. No cluster changes required.

Quick Start

Run locally

git clone https://github.com/jodonnel/ohc-sap-demo
cd ohc-sap-demo/north
pip install flask
python app.py
URLWhat
localhost:8080/playMobile edge device simulation game
localhost:8080/stageSOC operations dashboard (live SSE)
localhost:8080/presentSAP seller presentation
localhost:8080/present-rhRed Hat seller presentation
localhost:8080/present-indexPresentation selector + kiosk mode

Send a test event

curl -X POST http://localhost:8080/ingest \
  -H 'Content-Type: application/json' \
  -d '{
    "specversion": "1.0",
    "type":        "ohc.demo.access.onguard.badge_scan",
    "source":      "test/cli",
    "id":          "test-001",
    "eventclass":  "access",
    "data":        { "cardholderName": "Test User", "action": "ACCESS_GRANTED" }
  }'

Deploy to OpenShift

oc kustomize deploy/overlays/qa/ | oc apply -f -

API Reference

MethodPathDescriptionLayer
POST/ingestAccept a CloudEvent (JSON body)Middle
GET/eventsServer-Sent Events stream (real-time)Middle
GET/stateCurrent state JSON (counts, telemetry)Middle
GET/telemetryAggregated device telemetryMiddle
GET/logEvent history (last 200)Middle
GET/aboutSystem metadata JSON (version, uptime, pod)Middle
GET/healthzLiveness probeMiddle
GET/readyzReadiness probeMiddle
POST/resetReset all stateMiddle
GET/go/<alias>Short URL redirects (play, dtw, stage…)Middle

Stack

ComponentTechnologyWhy
Container platformRed Hat OpenShift (RHDP on AWS)The product being demonstrated
Event integrationSAP Edge Integration Cell → BTPThe integration target
Middle layerPython / FlaskZero-dependency, replaceable plumbing
FrontendVanilla HTML/CSS/JSNo build step, ConfigMap-mountable
Real-time pushServer-Sent EventsWorks through OpenShift Routes, no WebSocket upgrade needed
Event formatCloudEvents v1.0Open standard; works with BTP, Kafka, Event Mesh
StateJSON flush to PVC (1Gi)Survives pod restarts, zero new dependencies
GitOpsKustomizeBase + overlay pattern for qa/prod
Vehicle adapterMercedes Connected Vehicle API (OAuth2)Real edge device for demo differentiation

Documentation