OPC-UA Gateway

Subscribe to OPC-UA nodes, transform values, and publish them to MQTT — or expose Loopze's own data model as an OPC-UA server. Native OPC-UA in Go, one binary, no Java, no plugin tax.

Download binary Read the docs

What this gateway does

Modern PLCs from Siemens, Beckhoff, B&R, Rockwell, Wago and others expose process data through OPC-UA. Cloud platforms, historians, Unified Namespaces and analytics stacks consume MQTT. Loopze sits between them: it subscribes to OPC-UA nodes, optionally transforms the payloads, and publishes structured JSON to your MQTT broker. Bidirectional flows (MQTT command → OPC-UA write) work the same way.

Typical flow

┌────────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│  OPC-UA Subscribe  │    │  Transform       │    │  MQTT Publish   │
│  opc.tcp://plc:48… │───▶│  add metadata    │───▶│  line-A/{tag}   │
│  ns=4;s=Temp,Speed │    │  expr-lang       │    │  QoS 1          │
│  Basic256Sha256    │    │                  │    │                 │
└────────────────────┘    └──────────────────┘    └─────────────────┘

Example: bridge a Siemens S7-1500 to MQTT

  1. OPC-UA Subscribe node
    • Endpoint: opc.tcp://192.168.10.20:4840
    • Security policy: Basic256Sha256, message security: Sign & Encrypt
    • Auth: username + password (or X.509)
    • Subscribed nodes: ns=3;s="Tank1_Temp", ns=3;s="Tank1_Level", ns=3;s="Pump_State"
    • Sampling interval: 500 ms, publishing interval: 1000 ms
  2. Transform (expr-lang)
    {
      ts: now(),
      plc: "S7-1500-LineA",
      tag: msg.nodeId,
      value: msg.value,
      quality: msg.statusCode,
    }
  3. MQTT Publish node
    • Broker: mqtts://broker.example.com:8883
    • Topic: line-A/${msg.tag} (dynamic)
    • QoS 1

Deploy. Every value change on the PLC fires an MQTT message in well under 100 ms.

Why Loopze for OPC-UA

Native OPC-UA in Go, not a JVM

Most established OPC-UA tooling is Java-based — fine in a data centre, painful on a 1 GB edge gateway. Loopze implements the OPC-UA stack in Go, shipping as a single statically-linked binary. No JVM tuning, no GC pauses, no Java installation.

Real security, not "policy None"

All standard OPC-UA security policies are supported, including Aes256Sha256RsaPss. Authentication via username/password or X.509 client certificates. Loopze refuses to silently downgrade to None — security mismatches surface as errors instead of mysterious "it works in the lab" behaviour.

Subscribe, write, browse — all from one runtime

Loopze speaks the full OPC-UA client surface needed for industrial work: subscriptions, monitored items, read/write services, browse for discovery. Combined with native Modbus, MQTT and NATS in the same binary, the "gateway zoo" most factories accumulate collapses into one process.

Reverse direction: be an OPC-UA server

Some SCADA systems only consume OPC-UA. Loopze can expose its own context — the values flowing through your flows — as an OPC-UA server, so SCADA reaches everything (MQTT, Modbus, computed values) through a single OPC-UA endpoint.

Try it in 60 seconds

curl -L loopze.dev/install | sh
loopze --port 1880

Then open http://localhost:1880, drop an OPC-UA Subscribe node, point it at your PLC, wire it to MQTT Publish.

Download binary Read the docs

Frequently Asked Questions

What is an OPC-UA gateway?

Software (or hardware) that connects OPC-UA controllers and SCADA systems to other protocols — typically MQTT, REST or Kafka. It maps the OPC-UA address space onto modern messaging.

Does Loopze act as an OPC-UA client, server or both?

Both. Client to talk to PLCs, server to expose Loopze's internal model to SCADA.

Which OPC-UA security policies are supported?

None, Basic128Rsa15, Basic256, Basic256Sha256, Aes128Sha256RsaOaep, Aes256Sha256RsaPss. Auth via anonymous, username/password or X.509.

Does Loopze need Java like some other OPC-UA tools?

No. Native Go implementation. One binary. No JVM.

Can I bridge OPC-UA to MQTT and Modbus at the same time?

Yes — a single Loopze runtime hosts as many protocol nodes and flows as your hardware can run. All in parallel goroutines.

Related