ONVIF · KNX · Profile T · Home Assistant · xknx · Python · 12 Min. Lesezeit

ONVIF-zu-KNX-Integration: Automatisierung durch Kameraereignisse auslösen

ONVIF-Profil-T-Kameras veröffentlichen Bewegungserkennungs-, Linienüberschreitungs- und Objekterkennungsereignisse über einen standardisierten Ereignisdienst. Die Überbrückung dieser Ereignisse zu KNX-Gruppenadressen ermöglicht kameragesteuerte Gebäudeautomation – Eingangsbeleuchtung bei Türklingelerkennung, DALI-Szenenwechsel bei Perimeterverletzung, Alarmhornaktivierung – ohne Relaisverkabelung oder proprietäre APIs.

Anwendungsfallübersicht

Die drei häufigsten ONVIF-zu-KNX-Automatisierungsszenarien in intelligenten Gebäuden und gesicherten Einrichtungen sind die direkte Ereignisüberbrückung ohne Relais-Hardware:

Eingangsbeleuchtung bei Ankunft

Auslöser: Türklingelkamera erkennt sich nähernde Person

KNX-Aktion: KNX DALI Szene 3 (Eingang 100%, warmweiß) — automatische Abschaltung nach 5 Minuten über Treppenhaus-Timer

Perimetersicherheitsalarm

Auslöser: Außenkamera Linienüberschreitungsereignis (nördlicher Zaunbereich)

KNX-Aktion: KNX-Binärausgang → Alarmhorn 30s + DALI-Außenflutlicht auf 100% + BewO-E-Mail-Benachrichtigung

Parkhaus-Präsenzerkennung

Auslöser: ONVIF-Bewegungsereignis von der Überkopf-Parkkamera

KNX-Aktion: KNX DALI Zone 4 (Parkhaus) dimmt von 20% Bereitschaft auf 100% für 10 min

ONVIF-to-KNX ist eine Software-Brücke – keine Relaisverkabelung, keine Hardwareänderung an der Kamera erforderlich. Die Kamera benötigt Profile T oder Profile M Zertifizierung für standardisierte Ereignisübermittlung. Profile S Kameras haben keinen standardisierten Ereignisdienst und erfordern stattdessen herstellerspezifische APIs.

ONVIF Profile T Ereignisdienst

Profile T schreibt die Implementierung des ONVIF Event Service mit zwei Übermittlungsmechanismen vor: Pull-Point-Abonnement (Polling) und den neueren EventBroker (Push über MQTT, eingeführt in ONVIF-Spezifikation Release 21.12).

MechanismusProtokollFunktionsweiseMinimale Latenz
PullMessagesSOAP/HTTP PollingClient erstellt Pull-Point-Abonnement, ruft dann PullMessages in Intervallen auf – Kamera gibt bei jedem Aufruf die anstehenden Ereignisse zurück= Abfrageintervall (min. 500 ms)
WS-BaseNotificationSOAP/HTTP PushKamera sendet Notify-Nachricht an HTTP-Endpunkt des Clients, wenn ein Ereignis ausgelöst wird – erfordert, dass der Client einen HTTP-Server bereitstellt~100ms (Push, keine Polling-Verzögerung)
EventBroker (MQTT)MQTT 3.1.1/5.0 (21.12+)Camera publishes ONVIF events to external MQTT broker on topic pattern onvif/events/<topic>. Client subscribes. Broker decouples camera from KNX bridge~50ms (MQTT-Broker-Latenz)

Das ONVIF-Ereignisthema für Bewegungserkennung ist tns1:VideoAnalytics/tnsaxis:MotionDetection bei Axis-Kameras und tns1:RuleEngine/CellMotionDetector/Motion bei Hikvision. Themempfade variieren je nach Hersteller selbst innerhalb von Profile T – fragen Sie immer GetEventProperties auf dem spezifischen Gerät ab, um verfügbare Themen aufzulisten.

Methode 1: Home Assistant ONVIF + KNX-Integration

Home Assistant bietet eine native ONVIF-Integration und eine native KNX-Integration. Durch den Betrieb beider Integrationen in derselben HA-Instanz können ONVIF-Kameraereignisse über HA-Automatisierungen KNX-Gruppenadressen schreiben – ohne benutzerdefinierten Code.

Home Assistant configuration.yaml – ONVIF + KNX-Automatisierung

# configuration.yaml

knx:
  # KNX/IP interface on the network
  tunneling:
    host: 192.168.1.10      # KNX/IP gateway IP (e.g. MDT SCN-IP000.03)
    port: 3671

# ONVIF camera added via UI: Settings → Devices → Add Integration → ONVIF
# HA creates binary_sensor.camera_entrance_motion automatically

# automations.yaml

- alias: "ONVIF Entrance Motion → KNX DALI Scene 3"
  trigger:
    - platform: state
      entity_id: binary_sensor.camera_entrance_motion
      to: "on"
  action:
    - service: knx.send
      data:
        address: "3/0/3"     # DALI scene GA — scene 3 (entrance full)
        payload: 3            # DPT 5.001 scene number
        response: false
    - service: knx.send
      data:
        address: "3/0/10"    # DALI brightness GA
        payload: 255          # 100% brightness
        response: false

- alias: "ONVIF Motion OFF → KNX DALI return to standby (5 min)"
  trigger:
    - platform: state
      entity_id: binary_sensor.camera_entrance_motion
      to: "off"
      for: "00:05:00"
  action:
    - service: knx.send
      data:
        address: "3/0/10"
        payload: 77           # 30% brightness (standby)

Die Home Assistant ONVIF-Integration verwendet standardmäßig WS-BaseNotification-Push bei unterstützten Kameras und fällt auf PullMessages-Abfrage (Standardintervall 10 Sekunden) zurück. Für eine KNX-Antwort unter einer Sekunde setzen Sie das Abfrageintervall der ONVIF-Integration auf 1s oder verwenden Sie eine Kamera, die EventBroker MQTT unterstützt, damit HA über die MQTT-Integration abonnieren kann.

Methode 2: NVR mit nativer KNX-Ausgabe

Enterprise-VMS-Plattformen unterstützen die KNX-Integration über dedizierte Plugins, die eine direkte Ereignis-zu-KNX-Weiterleitung ohne separaten Middleware-Server ermöglichen.

Milestone XProtect + KNX-Plugin

Milestone XProtect Corporate und Expert unterstützen Integrationen von Drittanbietern über das MIP SDK. Das KNX-MIP-Plugin (erhältlich im Milestone Marketplace) ordnet XProtect-Alarmereignisse KNX-Gruppenadressen über ein KNX/IP-Gateway zu. Unterstützt DPT 1.001-Auslösetelegramme und Szenenabrufbefehle.

XProtect Management Client → Regeln und Ereignisse → Regel hinzufügen → Alarm ausgelöst → Befehl ausführen → KNX-Plugin → GA 3/0/3 = 3 schreiben (Szenenabruf)

Genetec Security Center + KNX-Connector

Genetec Security Center 5.10+ unterstützt benutzerdefinierte Ereignis-Connectors. Der KNX-Connector für Genetec (erhältlich von zertifizierten Genetec-Integratoren) ordnet Ereigniskategorien des Security Centers KNX-Gruppenadressen-Telegrammen zu. Unterstützt Videoanalyse-Ereignisse, Zutrittsverweigerungs-Ereignisse und Alarmquittierung.

Genetec Config Tool → System → Allgemeine Einstellungen → Erweiterungen → KNX-Connector hinzufügen → GA-Zuordnungstabelle pro Ereignistyp konfigurieren

Methode 3: Ajax Systems mit ONVIF-Kamerazufuhr

Ajax Hub 2 Plus unterstützt die ONVIF-Kameraintegration direkt – bis zu 25 IP-Kameras pro Hub in der Ajax-App. Ajax kann ONVIF-Bewegungsereignisse von verbundenen Kameras empfangen und als Ajax-Alarmereignisse weiterleiten. Wenn das Ajax-System über das Integreat- oder IQ Home-Gateway mit einem KNX-System verbunden ist, werden Ajax-Alarme in KNX-Telegramme umgesetzt.

Ajax Hub 2 Plus – ONVIF-Kamerakette zu KNX

  1. ONVIF-Kamera zu Ajax Hub 2 Plus in der Ajax PRO-App hinzufügen (Kamera-Menü → + → ONVIF)
  2. Bewegungserkennungsbenachrichtigungen auf dem Kamerakanal in Ajax aktivieren
  3. Ajax Hub löst Alarmereignis aus, wenn Kamerabewegung erkannt wird
  4. Ajax-System mit Integreat-Gateway (RS-485 oder IP) verbunden → KNX-Gruppenadresse schreiben bei Alarm
  5. KNX-Logikmodul reagiert: DALI-Szene, Hupe, BewO-Benachrichtigung

Python-Integration: onvif-zeep + xknx

Für benutzerdefinierte Bereitstellungen bietet ein Python-Skript mit der onvif-zeep -Bibliothek (ONVIF-SOAP-Client) und xknx (KNX/IP-Python-Bibliothek) eine direkte Brücke mit voller Kontrolle über Ereignisfilterung und KNX-Telegrammkonstruktion.

Python — ONVIF-Bewegungsereignis zu KNX-Telegramm

import asyncio
from onvif import ONVIFCamera
from xknx import XKNX
from xknx.dpt import DPTBinary

CAMERA_IP = "192.168.1.64"
CAMERA_PORT = 80
CAMERA_USER = "admin"
CAMERA_PASS = "yourpassword"

KNX_GATEWAY_IP = "192.168.1.10"
KNX_MOTION_GA = "8/0/1"   # Motion alarm group address (DPT 1.001)
KNX_SCENE_GA  = "3/0/3"   # DALI scene recall GA

async def main():
    # Connect to ONVIF camera
    cam = ONVIFCamera(CAMERA_IP, CAMERA_PORT, CAMERA_USER, CAMERA_PASS)
    await cam.update_xaddrs()
    events_service = cam.create_events_service()

    # Create pull-point subscription
    pullpoint = await events_service.CreatePullPointSubscription()
    manager = cam.create_pullpoint_service(pullpoint)

    # Connect to KNX/IP gateway
    xknx = XKNX(address_format="3/3/4")
    xknx.knx_ip_interface.gateway_ip = KNX_GATEWAY_IP
    await xknx.start()

    print(f"Polling ONVIF events from {CAMERA_IP}...")

    while True:
        try:
            messages = await manager.PullMessages({
                "MessageLimit": 100,
                "Timeout": "PT1S",  # 1-second long-poll timeout
            })
            for msg in messages.NotificationMessage or []:
                topic = str(msg.Topic._value_1)
                # Filter for motion detection topic
                if "MotionDetection" in topic or "CellMotionDetector" in topic:
                    data = msg.Message._value_1.Data
                    simple_items = data.SimpleItem or []
                    for item in simple_items:
                        if item.Name in ("IsMotion", "State", "Value"):
                            is_active = str(item.Value).lower() in ("true", "1")
                            # Send KNX telegram
                            await xknx.telegrams.put(
                                xknx.telegram_queue.telegram_received_cb
                            )
                            # Write DPT 1.001 to motion alarm GA
                            from xknx.telegram import Telegram, TelegramDirection
                            from xknx.telegram.address import GroupAddress
                            t = Telegram(
                                destination_address=GroupAddress(KNX_MOTION_GA),
                                payload=DPTBinary(1 if is_active else 0),
                            )
                            await xknx.telegrams.put(t)
                            print(f"KNX {KNX_MOTION_GA} = {1 if is_active else 0}")
        except Exception as e:
            print(f"Poll error: {e}")
            await asyncio.sleep(2)

asyncio.run(main())

Abhängigkeiten installieren: pip install onvif-zeep xknx. Die onvif-zeep-Bibliothek verwendet die offiziellen ONVIF-WSDL-Dateien – laden Sie sie einmal herunter mitpython -m onvif.generate_wsdl. Führen Sie dieses Skript als systemd-Dienst auf einem Raspberry Pi 4 oder einem kleinen Linux-Server im Gebäudeautomationsnetzwerksegment aus.

Latenzbetrachtungen

Die Gesamtlatenz von der physischen Bewegung bis zur Zustellung des KNX-Telegramms hängt von der Ereignisbereitstellungsmethode ab. Wählen Sie für sicherheitskritische Automatisierung Push- oder MQTT-Bereitstellung anstelle von Pull-Point-Abfragen.

SegmentPullMessages (500 ms Abfrage)MQTT EventBrokerWS-BaseNotification Push
Kamera-Videoanalyse50–200ms50–200ms50–200ms
Ereignisübermittlung an die Bridge0–500ms (Abfrageintervall)~20ms (MQTT-Broker)~30ms (HTTP-Push)
Bridge-Verarbeitung (Python)~5ms~5ms~5ms
KNX/IP-Telegramm an den Bus~20ms~20ms~20ms
Gesamt typisch~600ms~295ms~255ms

Für Einbruchmeldeanwendungen ist eine Gesamtlatenz von 600 ms akzeptabel – die Aktivierung eines KNX-Alarmhorns innerhalb einer Sekunde nach Bewegungserkennung ist in EN 50131 Grad 2 Systemen Standard. Für Lichtkomfortautomatisierung (Anwesenheitserkennung) ist 600 ms nicht wahrnehmbar. ONVIF-zu-KNX ist nicht für lebensrettende Brandmeldeanwendungen geeignet – verwenden Sie dafür dedizierte Brandmeldezentralen mit zertifizierten Schnittstellen.

Benötigen Sie ONVIF-Kameraereignisse, die in Ihre KNX-Gebäudeautomation eingebunden werden?

Wir entwerfen KNX-Schaltschränke mit ONVIF-Middleware-Integration, Home Assistant oder Python-Bridge-Bereitstellung und vollständiger ETS6-Alarmlogik – vor Ort in Betrieb genommen und getestet.

Angebot anfordern →
Loading...
Back to top