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.
| Server | Plattform | Protokolltreiber | Lizenz |
|---|---|---|---|
| Siemens DESIGO CC mit OPC UA | Windows Server, DESIGO CC Anwendungsserver | BACnet/IP, BACnet MS/TP, KNX, Modbus, M-Bus über DESIGO-Treiber | Kostenpflichtig – Teil der DESIGO CC-Lizenz |
| Schneider EcoStruxure BMS OPC UA | EcoStruxure Building Operation (EBO) Server | BACnet/IP, Modbus, LON, M-Bus, DALI | Kostenpflichtig – EBO-Lizenz |
| Beckhoff TwinCAT OPC UA Server | Windows-PC mit TwinCAT 3-Laufzeit | TwinCAT ADS (SPS-Variablen), EtherCAT I/O, Modbus über SPS-Funktionsbausteine | Kostenlos mit TwinCAT-Lizenz |
| Kepware KEPServerEX | Windows-PC/Server (Standalone-Gateway) | BACnet/IP, Modbus RTU/TCP, OPC DA, SNMP, EtherNet/IP, 150+ Treiber | Bezahlt — Lizenzierung pro Treiber |
| Pro-face Remote HMI OPC UA | Embedded Linux auf GP4000/GP4600 HMI | Modbus TCP, EtherNet/IP, Mitsubishi MC Protocol | Im 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.
| KPI | OPC UA-Knoten | Empfohlenes Intervall | Totband |
|---|---|---|---|
| Stündlicher kWh-Verbrauch | ActiveEnergyImport (Double, kWh) | PublishingInterval 60.000 ms | Absolut 0,01 kWh |
| 15-minütiger Spitzenbedarf | ActivePower (Float, kW) | PublishingInterval 900.000 ms | Absolut 0,1 kW |
| Echtzeit-Leistungsüberwachung | ActivePower (Float, kW) | Veröffentlichungsintervall 5 000 ms | Prozent 1% |
| Täglicher Wärmemengenzählerstand | ThermalEnergyImport (Double, kWh th) | Veröffentlichungsintervall 86 400 000 ms | Absolut 0,1 kWh |
| Gasverbrauch | Gas_Volume (Double, m³) | PublishingInterval 3 600 000 ms | Absolut 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ärtungsschritt | Konfigurationsaktion |
|---|---|
| Anonyme Authentifizierung deaktivieren | Entfernen Sie AnonymousIdentityToken aus der Endpunktkonfiguration; erzwingen Sie Username oder X.509 |
| Veraltete Sicherheitsrichtlinien deaktivieren | Entfernen Sie Basic128Rsa15- und Basic256-Endpunkte; aktivieren Sie nur Basic256Sha256 und Aes256Sha256RsaPss |
| Sign+Encrypt erzwingen | Setzen Sie den minimalen MessageSecurityMode = SignAndEncrypt auf allen Produktionsendpunkten |
| Zertifikatsvertrauensliste | Importieren Sie nur bekannte Client-Zertifikate in die Server-Vertrauensliste; lehnen Sie alle anderen ab |
| Prüfpfad | OPC UA Audit-Ereignisse aktivieren (AuditActivateSessionEvent, AuditWriteUpdateEvent); an SIEM weiterleiten |
| Firewall-Regeln | Eingehenden TCP 4840 nur von bekannten Client-IP-Adressen im OT-VLAN zulassen; vom IT-LAN blockieren |
| Zertifikatablauf-Überwachung | Benachrichtigung 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 →