Brownfield Retrofit Edge AI Zero Trust OT

BRIDGING LEGACY
& MODERN AI

Solve the Brownfield Retrofit problem with a hybrid architecture: correlating 1990s PLC Modbus data with 2025 Edge ML. Secure, scalable, validated by the 6× Rule.

IIoT_NET // LIVE_TELEMETRY
ONLINE
3.2 VIB RMS mm/s
C ISO ZONE
98% AI HEALTH
Hybrid Stack

The ARCHITECTURE

00
Level 0 — Physical

Legacy PLC + Retrofit Sensors

Modbus TCP (Amps/RPM) · MEMS Vibration 10kHz · Epoxy-mounted for fidelity · OPC UA where available

01
Level 1 — Edge Compute

Industrial Gateway (K3s)

Python Protocol Translator · Edge ML Inference · Isolation Forest · Docker / Kubernetes

02
Level 2 — Network & Security

Zero Trust DMZ

mTLS Authentication · MQTT Broker · Read-Only PLC Access · Network Segmentation · SIEM Log Forwarding

03
Level 3 — Cloud / Lakehouse

Sparkplug B + Delta Lake

Report-by-Exception · Hot/Cold Retention Policy · Cost-optimised ingestion

Control stays local. IIoT never closes safety loops. Analytics traffic must never touch the control plane.
Core Architecture Principle — Audientia Hybrid Stack
Financial Engineering

ROI
CALCULATOR

Model Parameters
Downtime Prevented (Hours/Year) 24 hrs
Cost Per Downtime Hour ($) $625
Based on the 6× Rule. Retrofit cost fixed at $7,200.
Annual Savings
$150,000
Payback Period: 5.7 Months
Engineering Deep Dive

EDGE
GATEWAY.PY

edge_gateway.py — Production Grade
def poll_cycle(self):
    # ── 1. READ-ONLY SECURITY: Never write to PLC ──────────────
    plc_data = self.modbus.read_holding_registers(3001, 2)

    # ── 2. Edge ML Inference (Isolation Forest) ────────────────
    vib_data   = self.sensor.read_accel()
    prediction = self.model.predict(vib_data)     # -1 = anomaly

    # ── 3. Report by Exception — bandwidth-conservative ────────
    if abs(vib_data - self.last_val) > 0.1:
        payload = {
            "asset_id":  "Press_01",
            "health":    prediction,       # advisory only
            "plc_amps":  plc_data[0],
            "timestamp": datetime.utcnow().isoformat() + "Z"
        }
        # ── 4. mTLS Publish → UNS / Sparkplug B ───────────────────
        self.mqtt.publish("spBv1.0/Audientia/DDATA/Press_01", payload)
        self.last_val = vib_data