OPC UA · BMS · DESIGO CC · Beckhoff · asyncua · MQTT PubSub · 11 Min. Lesezeit

OPC UA in der Gebäudeautomation: BMS-Integration, Datenlogging und KPIs

OPC UA ist zum Integrationsrückgrat moderner intelligenter Gebäude geworden und bietet eine einheitliche, herstellerneutrale Schnittstelle, die BMS-Controller, Energiezähler, HLK-Anlagen und Cloud-Analyseplattformen verbindet. Im Gegensatz zu BACnet oder Modbus integriert OPC UA Sicherheit und ein selbstbeschreibendes Informationsmodell – das bedeutet, dass ein Energiemanagementsystem alle verfügbaren Datenpunkte von einem DESIGO CC- oder TwinCAT-Server entdecken kann, ohne dass eine separate Registerkarte oder Punktliste erforderlich ist.

Rolle von OPC UA in Gebäuden

Ein typisches Gewerbegebäude integriert drei oder mehr Subsysteme, die historisch inkompatible Protokolle verwendeten: ein BACnet/IP-Gebäudemanagementsystem (BMS) für HLK und Zutrittskontrolle, Modbus-RTU-Energiezähler auf einem seriellen Bus und ein CMMS (Computerisiertes Instandhaltungsmanagementsystem) für Gerätewartungsaufzeichnungen. OPC UA fungiert als horizontale Integrationsschicht und bietet eine einheitliche Lese-/Schreib-/Abonnement-Schnittstelle über alle Subsysteme hinweg von einer einzigen Client-Verbindung aus.

Der OPC-UA-Server sitzt zwischen den Feldprotokollen und der IT-Schicht. Er fragt Daten von BACnet-, Modbus- und KNX-Subsystemen mithilfe protokollspezifischer Treiber ab oder abonniert sie und stellt dann alle Daten in einem einzigen durchsuchbaren Adressraum bereit. Clients – SCADA-Systeme, Energiemanagementplattformen, Dashboards und Cloud-Connectoren – verbinden sich einmal mit dem OPC-UA-Server und greifen über eine standardisierte API auf alle Gebäudedaten zu, unabhängig vom zugrunde liegenden Protokoll.

Topologie der OPC-UA-Integration im Gebäude

Field layer (field protocols)
  BACnet/IP: Siemens PXC200, Distech EC-Net controllers
  Modbus TCP: Schneider PM5xxx energy meters, Janitza UMG 96
  KNX/IP: WEINZIERL KNX IP Interface 731
  M-Bus: heat meters, gas meters (IEC 62056)

  ↓ protocol drivers (inside BMS or gateway)

OPC UA Server layer
  Siemens DESIGO CC with OPC UA server module
    └── exposes BACnet objects as OPC UA Variables
    └── exposes alarm conditions as OPC UA AlarmCondition
  Beckhoff TwinCAT OPC UA Server
    └── exposes PLC variables directly from ADS runtime
  Kepware KEPServerEX
    └── multi-protocol gateway (BACnet + Modbus → OPC UA)

  ↓ opc.tcp:// or opc.wss://

Clients (standard OPC UA)
  Energy management platform (Schneider PME, EcoStruxure)
  SCADA / MES (Ignition, WinCC OA, Aveva)
  Cloud connector (Azure IoT OPC Publisher, AWS Greengrass)
  Analytics / dashboards (Grafana OPC UA plugin, Power BI)

Implementierungsoptionen für OPC-UA-Server

Für die Gebäudeautomation dominieren drei OPC-UA-Server-Implementierungen. Jede ist für ein anderes BMS-Ökosystem und eine andere Hardwareplattform geeignet.

ServerPlattformProtokolltreiberLizenz
Siemens DESIGO CC mit OPC UAWindows Server, DESIGO CC AnwendungsserverBACnet/IP, BACnet MS/TP, KNX, Modbus, M-Bus über DESIGO-TreiberKostenpflichtig – Teil der DESIGO CC-Lizenz
Schneider EcoStruxure BMS OPC UAEcoStruxure Building Operation (EBO) ServerBACnet/IP, Modbus, LON, M-Bus, DALIKostenpflichtig – EBO-Lizenz
Beckhoff TwinCAT OPC UA ServerWindows-PC mit TwinCAT 3-LaufzeitTwinCAT ADS (SPS-Variablen), EtherCAT I/O, Modbus über SPS-FunktionsbausteineKostenlos mit TwinCAT-Lizenz
Kepware KEPServerEXWindows-PC/Server (Standalone-Gateway)BACnet/IP, Modbus RTU/TCP, OPC DA, SNMP, EtherNet/IP, 150+ TreiberBezahlt — Lizenzierung pro Treiber
Pro-face Remote HMI OPC UAEmbedded Linux auf GP4000/GP4600 HMIModbus TCP, EtherNet/IP, Mitsubishi MC ProtocolIm HMI enthalten

Beckhoff TwinCAT OPC UA Server — kostenlos für Integratoren: Wenn Sie TwinCAT 3 als PLC-Laufzeit für einen Gebäudecontroller verwenden, ist der TwinCAT OPC UA Server ohne zusätzliche Kosten enthalten. Er legt alle PLC-Variablen, die mit dem {attribute 'OPC.UA.DA' := '1'} Attribut deklariert sind, direkt als OPC UA-Knoten offen. Dies ist der kostengünstigste Weg zu OPC UA in neuen schaltschrankbasierten Gebäudecontrollern.

OPC UA-Informationsmodell für Gebäude

IEC 62541-100 (OPC UA für Gebäude) definiert ein standardisiertes Informationsmodell, das Konzepte von ISO 16739-1 IFC (Industry Foundation Classes) auf OPC UA-Objekttypen abbildet. Dies ermöglicht einem Energiemanagementsystem, den Adressraum eines Gebäudeservers mit bekannten Typnamen zu navigieren – SpaceType, ZoneType, HVACSystemType – anstatt herstellerspezifischer Zeichenfolgenpfade.

Struktur des Gebäudeinformationsmodells nach IEC 62541-100

BuildingType (ns=2;s=Building_Alpha_Tower)
├── SiteType (ns=2;s=Site_Riga_01)
│   ├── BuildingStoreyType (ns=2;s=Floor_03)
│   │   ├── SpaceType (ns=2;s=Office_3A)  ← IFC IfcSpace mapping
│   │   │   ├── AirTemperature [Variable, Float, °C]
│   │   │   ├── CO2Concentration [Variable, UInt16, ppm]
│   │   │   └── OccupancyState [Variable, Boolean]
│   │   └── SpaceType (ns=2;s=Meeting_3B)
│   └── BuildingStoreyType (ns=2;s=Floor_04)
├── HVACSystemType (ns=2;s=AHU_Main_01)  ← IFC IfcSystem mapping
│   ├── SupplyAirTemperature [Variable, Float, °C]
│   ├── ExhaustAirTemperature [Variable, Float, °C]
│   ├── HeatingCoilValve [Variable, Byte, 0–100%]
│   ├── CoolingCoilValve [Variable, Byte, 0–100%]
│   ├── FanSpeed [Variable, UInt16, RPM]
│   └── OperatingMode [Variable, Enum: Off/Auto/Heating/Cooling/Night]
└── EnergyMeterType (ns=2;s=MainMeter_kWh)  ← IEC 62056 meter
    ├── ActiveEnergyImport [Variable, Double, kWh]
    ├── ActivePower [Variable, Float, kW]
    └── Timestamp [Variable, DateTime]

Energie-KPI-Extraktion über OPC UA-Abonnement

Energiemanagement erfordert zuverlässige, zeitgestempelte kWh-Werte von Zählern. Anstatt Zähler in festen Intervallen abzufragen (was Spitzenwerte übersehen kann und ständigen Datenverkehr erzeugt), verwenden Sie OPC UA-Abonnements mit einem PublishingInterval, das Ihrer Meldegranularität entspricht, und einer Totzone, um die Meldung von trivial kleinen Inkrementen zu unterdrücken.

KPIOPC UA-KnotenEmpfohlenes IntervallTotband
Stündlicher kWh-VerbrauchActiveEnergyImport (Double, kWh)PublishingInterval 60.000 msAbsolut 0,01 kWh
15-minütiger SpitzenbedarfActivePower (Float, kW)PublishingInterval 900.000 msAbsolut 0,1 kW
Echtzeit-LeistungsüberwachungActivePower (Float, kW)Veröffentlichungsintervall 5 000 msProzent 1%
Täglicher WärmemengenzählerstandThermalEnergyImport (Double, kWh th)Veröffentlichungsintervall 86 400 000 msAbsolut 0,1 kWh
GasverbrauchGas_Volume (Double, m³)PublishingInterval 3 600 000 msAbsolut 0,001 m³

OPC UA PubSub: Gebäudedaten per Push an Cloud-MQTT-Broker senden

OPC UA PubSub (IEC 62541-14) erweitert das Client-Server-Modell um ein Publish-Subscribe-Muster unter Verwendung von MQTT oder UDP-Multicast als Transport. Anstatt dass eine Cloud-Plattform den OPC-UA-Server abfragt, sendet der Server DataSetMessages an einen MQTT-Broker in einem konfigurierten WriterGroup-PublishingInterval. Dies ist das empfohlene Muster für die Cloud-Integration, wenn sich der OPC-UA-Server hinter einem NAT oder einer Firewall befindet, die eingehenden TCP-Port 4840 blockiert.

OPC UA PubSub – Konfiguration von Kepware zu MQTT-Broker

# Kepware IoT Gateway Plugin — OPC UA PubSub to MQTT

Agent type: MQTT Client (Publisher)
Broker URL: mqtts://iot.yourdomain.com:8883
Client ID: kepware-building-01
TLS: enabled (CA cert + client cert for mutual TLS)

Published datasets (JSON encoding, UA-JSON):
  Topic: building/01/hvac/ahu01
  Payload (DataSetMessage, JSON):
  {
    "MessageId": "uuid-xxx",
    "PublisherId": "kepware-building-01",
    "DataSetWriterId": 1001,
    "Timestamp": "2025-03-14T10:30:00Z",
    "Payload": {
      "SupplyAirTemperature": { "Value": 18.4, "StatusCode": "Good", "SourceTimestamp": "..." },
      "FanSpeed":             { "Value": 1450, "StatusCode": "Good" },
      "HeatingCoilValve":     { "Value": 72,   "StatusCode": "Good" }
    }
  }

  Topic: building/01/energy/main-meter
  PublishingInterval: 60000 ms
  QueueSize: 1 (latest value only)

Python OPC UA Client – asyncua Beispiel

Die asyncua Bibliothek (früher opcua-asyncio) ist der empfohlene Python OPC UA Client für die Gebäudeautomations-Skripterstellung. Sie unterstützt async/await, alle Sicherheitsmodi, X.509-Zertifikate und Abonnements. Installation mitpip install asyncua.

asyncua — verbinden, browsen, lesen, abonnieren

import asyncio
from asyncua import Client
from asyncua.crypto.security_policies import SecurityPolicyBasic256Sha256
from asyncua.ua import MessageSecurityMode

class SubHandler:
    """Callback invoked for each subscription notification."""
    def datachange_notification(self, node, val, data):
        print(f"  DataChange: {node} = {val}  status={data.monitored_item.Value.StatusCode}")

async def main():
    url = "opc.tcp://192.168.10.50:4840/freeopcua/server/"

    async with Client(url=url) as client:
        # --- Security: Sign + Encrypt, Basic256Sha256, X.509 cert ---
        await client.set_security(
            SecurityPolicyBasic256Sha256,
            certificate="client_cert.pem",
            private_key="client_key.pem",
            server_certificate="server_cert.pem",
            mode=MessageSecurityMode.SignAndEncrypt,
        )

        print("Connected. Server namespaces:")
        for i, ns in enumerate(await client.get_namespace_array()):
            print(f"  ns={i}: {ns}")

        # --- Browse Objects root ---
        objects = client.get_objects_node()
        children = await objects.get_children()
        for child in children:
            name = await child.read_browse_name()
            print(f"  Object: {name.Name}")

        # --- Read a specific variable by NodeId ---
        temp_node = client.get_node("ns=1;s=AHU_01.SupplyAirTemperature")
        temp_value = await temp_node.read_value()
        print(f"Supply air temperature: {temp_value:.1f} °C")

        # --- Read EngineeringUnits property ---
        eu = await temp_node.read_data_value()
        print(f"StatusCode: {eu.StatusCode}")

        # --- Subscribe to multiple nodes ---
        handler = SubHandler()
        subscription = await client.create_subscription(500, handler)  # 500 ms publishing
        nodes = [
            client.get_node("ns=1;s=AHU_01.SupplyAirTemperature"),
            client.get_node("ns=1;s=AHU_01.FanSpeed"),
            client.get_node("ns=1;s=Meter.kWh"),
        ]
        await subscription.subscribe_data_change(nodes)

        print("Subscribed. Waiting 30 seconds for notifications...")
        await asyncio.sleep(30)
        await subscription.delete()

asyncio.run(main())

OPC UA für HLK: Siemens und Beckhoff Beispiele

Zwei gängige Gebäudecontroller-Plattformen bieten native OPC UA Server. Siemens DESIGO zielt auf große Gewerbegebäude mit zentralem BMS ab; Beckhoff TwinCAT zielt auf schaltschrankmontierte Controller mit direktem I/O ab.

Siemens DESIGO CC OPC UA Server: Aktiviert über das DESIGO CC Management Platform Add-On. Der Server stellt alle DESIGO-Datenpunkte (einschließlich BACnet-Objekte, die von PXC-Controllern importiert wurden) als OPC UA Variablen in einer Hierarchie dar, die der Ordnerstruktur der DESIGO Management Station entspricht. Standard-Endpunkt: opc.tcp://<desigo-server>:4840. Unterstützt Sign+Encrypt mit Basic256Sha256 und X.509-Clientzertifikaten. Alarm- und Ereignisbedingungen von DESIGO werden als OPC UA AlarmCondition-Knoten bereitgestellt.

Beckhoff TwinCAT OPC UA Server (TC3 OPC UA): Kostenlos mit jeder TwinCAT 3-Laufzeitlizenz. PLC-Variablen, die in der STRUKTURIERTEN TEXT-Deklaration mit dem OPC UA-Attribut gekennzeichnet sind, werden automatisch veröffentlicht. Unterstützt bis zu 5000 überwachte Elemente mit einem Abtastintervall von 10 ms auf einem IPC mit Standardprozessor. Die DESIGO RXB-Raumreglerserie enthält auch einen eingebetteten OPC UA-Server (Standardport 48040) mit direktem Zugriff auf Raumtemperatur, Sollwert, Ventilator-Klappe und Anwesenheitsmelderstatus.

Sicherheitshärtung für Gebäude-OPC-UA-Server

Gebäude-OPC-UA-Server sind IT/OT-Konvergenzpunkte und hochwertige Ziele. Wenden Sie während der Inbetriebnahme die folgenden Härtungsschritte an:

HärtungsschrittKonfigurationsaktion
Anonyme Authentifizierung deaktivierenEntfernen Sie AnonymousIdentityToken aus der Endpunktkonfiguration; erzwingen Sie Username oder X.509
Veraltete Sicherheitsrichtlinien deaktivierenEntfernen Sie Basic128Rsa15- und Basic256-Endpunkte; aktivieren Sie nur Basic256Sha256 und Aes256Sha256RsaPss
Sign+Encrypt erzwingenSetzen Sie den minimalen MessageSecurityMode = SignAndEncrypt auf allen Produktionsendpunkten
ZertifikatsvertrauenslisteImportieren Sie nur bekannte Client-Zertifikate in die Server-Vertrauensliste; lehnen Sie alle anderen ab
PrüfpfadOPC UA Audit-Ereignisse aktivieren (AuditActivateSessionEvent, AuditWriteUpdateEvent); an SIEM weiterleiten
Firewall-RegelnEingehenden TCP 4840 nur von bekannten Client-IP-Adressen im OT-VLAN zulassen; vom IT-LAN blockieren
Zertifikatablauf-ÜberwachungBenachrichtigung einrichten, wenn Server- oder Client-Zertifikate sich dem Ablauf nähern (90-Tage-Warnung)
TwinCAT: schreibgeschützter NamensraumÜberwachungsvariablen als VAR_OUTPUT deklarieren oder UA-Rolle verwenden, um Schreibzugriffe einzuschränken

IEC 62443-3-3 Sicherheitsstufe 2 Anforderung: Für Gebäude, die EN 50159 (Bahn) oder ISO 27001 BMS-Bereich unterliegen, verlangt IEC 62443-3-3 SL-2, dass alle Fernwartungsverbindungen eine gegenseitige Authentifizierung auf Basis von X.509-Zertifikaten verwenden. Anonyme und nur benutzernamebasierte Endpunkte müssen auf allen OPC UA-Produktionsservern deaktiviert sein.

Benötigen Sie eine OPC UA BMS-Integration für Ihr Bauprojekt?

Wir integrieren BACnet-, Modbus-, KNX- und M-Bus-Subsysteme in eine einheitliche OPC UA-Schicht – und verbinden Energiezähler, HLK-Regler und SCADA mit Cloud-Analytik und Energiemanagementplattformen.

Angebot anfordern →
Loading...
Back to top