ONVIF · KNX · Profile T · Home Assistant · xknx · Python · 12 min czytania

Integracja ONVIF z KNX: Automatyzacja wyzwalana zdarzeniami z kamer

Kamery ONVIF Profile T publikują zdarzenia detekcji ruchu, przekroczenia linii i wykrywania obiektów za pomocą ustandaryzowanej usługi zdarzeń. Połączenie tych zdarzeń z adresami grupowymi KNX umożliwia automatyzację budynku wyzwalaną przez kamerę – oświetlenie wejścia po wykryciu dzwonka, zmiana scen DALI po naruszeniu obwodu, aktywacja syreny alarmowej – bez okablowania przekaźników lub zastrzeżonych interfejsów API.

Przegląd przypadków użycia

Trzy najczęstsze scenariusze automatyzacji ONVIF-KNX w inteligentnych budynkach i obiektach chronionych to bezpośrednie łączenie zdarzeń bez sprzętu przekaźnikowego:

Oświetlenie wejścia po przybyciu

Wyzwalacz: Kamera domofonowa wykrywa osobę zbliżającą się

Akcja KNX: Scena KNX DALI 3 (wejście 100%, ciepła biel) — automatyczne wyłączenie po 5 minutach przez timer klatki schodowej

Alarm naruszenia obwodu

Wyzwalacz: Zdarzenie przekroczenia linii kamery zewnętrznej (strefa północnego ogrodzenia)

Akcja KNX: Wyjście binarne KNX → syrena alarmowa 30s + zewnętrzne reflektory DALI na 100% + alert e-mail BewO

Detekcja obecności na parkingu

Wyzwalacz: Zdarzenie ruchu ONVIF z kamery parkingowej nad głową

Akcja KNX: KNX DALI strefa 4 (parking) ściemnienie z 20% czuwania do 100% na 10 min

ONVIF-to-KNX to most programowy – bez okablowania przekaźników, bez modyfikacji sprzętu kamery. Kamera wymaga certyfikacji Profile T lub Profile M dla ustandaryzowanego dostarczania zdarzeń. Kamery Profile S nie mają ustandaryzowanej usługi zdarzeń i wymagają zamiast tego API specyficznych dla producenta.

Usługa zdarzeń ONVIF Profile T

Profile T wymusza implementację usługi zdarzeń ONVIF z dwoma mechanizmami dostarczania: subskrypcją pull-point (polling) i nowszym EventBroker (push przez MQTT, wprowadzonym w specyfikacji ONVIF wydanie 21.12).

MechanizmProtokółJak to działaMin. opóźnienie
PullMessagesSOAP/HTTP pollingKlient tworzy subskrypcję punktu odczytu, a następnie w odstępach czasu wywołuje PullMessages – kamera zwraca oczekujące zdarzenia przy każdym wywołaniu= interwał odpytywania (min. 500 ms)
WS-BaseNotificationSOAP/HTTP pushKamera wysyła wiadomość Notify do punktu końcowego HTTP klienta po wystąpieniu zdarzenia – wymaga, aby klient udostępniał serwer HTTP~100ms (push, brak opóźnienia pollingu)
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 (opóźnienie brokera MQTT)

Temat zdarzenia ONVIF dla detekcji ruchu to tns1:VideoAnalytics/tnsaxis:MotionDetection w kamerach Axis oraz tns1:RuleEngine/CellMotionDetector/Motion w Hikvision. Ścieżki tematów różnią się w zależności od producenta nawet w ramach Profile T – zawsze odpytuj GetEventProperties na konkretnym urządzeniu, aby wyliczyć dostępne tematy.

Metoda 1: Integracja Home Assistant ONVIF + KNX

Home Assistant zapewnia natywną integrację ONVIF oraz natywną integrację KNX. Uruchomienie obu integracji w tej samej instancji HA umożliwia zdarzeniom z kamer ONVIF wyzwalanie zapisów do adresów grupowych KNX za pomocą automatyzacji HA – bez potrzeby pisania własnego kodu.

Home Assistant configuration.yaml – automatyzacja ONVIF + KNX

# 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)

Integracja ONVIF w Home Assistant domyślnie używa pushowania WS-BaseNotification na obsługiwanych kamerach, z powrotem do odpytywania PullMessages (domyślny interwał 10 sekund). Aby uzyskać odpowiedź KNX poniżej sekundy, ustaw interwał skanowania integracji ONVIF na 1s lub użyj kamery obsługującej EventBroker MQTT, aby HA mogło subskrybować przez integrację MQTT.

Metoda 2: Rejestrator NVR z natywnym wyjściem KNX

Korporacyjne platformy VMS obsługują integrację KNX za pomocą dedykowanych wtyczek, umożliwiając bezpośrednie przekazywanie zdarzeń do KNX bez osobnego serwera pośredniczącego.

Milestone XProtect + wtyczka KNX

Milestone XProtect Corporate i Expert obsługują integracje firm trzecich za pośrednictwem MIP SDK. Wtyczka KNX MIP (dostępna w Milestone Marketplace) mapuje zdarzenia alarmowe XProtect na zapisy adresów grupowych KNX za pośrednictwem bramy KNX/IP. Obsługuje telegramy wyzwalające DPT 1.001 i polecenia przywoływania scen.

XProtect Management Client → Reguły i zdarzenia → Dodaj regułę → Alarm uruchomiony → Wykonaj polecenie → Wtyczka KNX → zapisz GA 3/0/3 = 3 (przywołanie sceny)

Genetec Security Center + łącznik KNX

Genetec Security Center 5.10+ obsługuje niestandardowe łączniki zdarzeń. Łącznik KNX dla Genetec (dostępny u certyfikowanych integratorów Genetec) mapuje kategorie zdarzeń Security Center na telegramy adresów grupowych KNX. Obsługuje zdarzenia analizy wideo, zdarzenia odmowy dostępu i potwierdzenia alarmu.

Genetec Config Tool → System → Ustawienia ogólne → Rozszerzenia → Dodaj łącznik KNX → skonfiguruj tabelę mapowania GA dla każdego typu zdarzenia

Metoda 3: Ajax Systems z kamerą ONVIF

Ajax Hub 2 Plus obsługuje bezpośrednią integrację kamer ONVIF – do 25 kamer IP na koncentrator w aplikacji Ajax. Ajax może odbierać zdarzenia ruchu ONVIF z podłączonych kamer i przekazywać je jako zdarzenia alarmowe Ajax. Jeśli system Ajax jest połączony z systemem KNX za pośrednictwem bramy Integreat lub IQ Home, alarmy Ajax są tłumaczone na telegramy KNX.

Ajax Hub 2 Plus – łańcuch kamer ONVIF do KNX

  1. Dodaj kamerę ONVIF do Ajax Hub 2 Plus w aplikacji Ajax PRO (Menu Kamera → + → ONVIF)
  2. Włącz powiadomienia o wykryciu ruchu na kanale kamery w Ajax
  3. Ajax Hub uruchamia zdarzenie alarmowe po wykryciu ruchu przez kamerę
  4. System Ajax podłączony do bramy Integreat (RS-485 lub IP) → zapis adresu grupowego KNX przy alarmie
  5. Moduł logiczny KNX reaguje: scena DALI, syrena, powiadomienie BewO

Integracja Pythona: onvif-zeep + xknx

W przypadku niestandardowych wdrożeń skrypt Pythona wykorzystujący bibliotekę onvif-zeep (klient SOAP ONVIF) oraz xknx (biblioteka Pythona dla KNX/IP) zapewnia bezpośrednie połączenie z pełną kontrolą nad filtrowaniem zdarzeń i konstrukcją telegramów KNX.

Python — zdarzenie ruchu ONVIF do telegramu KNX

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())

Zainstaluj zależności: pip install onvif-zeep xknx. Biblioteka onvif-zeep korzysta z oficjalnych plików WSDL ONVIF – pobierz je raz za pomocąpython -m onvif.generate_wsdl. Uruchom ten skrypt jako usługę systemd na Raspberry Pi 4 lub małym serwerze Linux w segmencie sieci automatyki budynkowej.

Uwagi dotyczące opóźnień

Całkowite opóźnienie od ruchu fizycznego do dostarczenia telegramu KNX zależy od metody dostarczania zdarzeń. W przypadku automatyki krytycznej dla bezpieczeństwa wybierz dostarczanie push lub MQTT zamiast odpytywania pull-point.

SegmentPullMessages (odpytywanie co 500 ms)MQTT EventBrokerWS-BaseNotification push
Analiza wideo z kamery50–200ms50–200ms50–200ms
Dostarczenie zdarzenia do bridge'a0–500ms (interwał odpytywania)~20ms (broker MQTT)~30ms (HTTP push)
Przetwarzanie w bridge'u (Python)~5ms~5ms~5ms
Telegram KNX/IP do magistrali~20ms~20ms~20ms
Całkowity typowy~600ms~295ms~255ms

W przypadku zastosowań sygnalizacji włamania całkowite opóźnienie 600 ms jest akceptowalne – aktywacja syreny alarmowej KNX w ciągu 1 sekundy od wykrycia ruchu jest standardem w systemach stopnia 2 normy EN 50131. W automatyce oświetlenia komfortowego (detekcja obecności) 600 ms jest niezauważalne. ONVIF-KNX nie nadaje się do wykrywania pożaru w systemach ochrony życia – należy w tym celu używać dedykowanych central pożarowych z certyfikowanymi interfejsami.

Potrzebujesz zdarzeń z kamer ONVIF podłączonych do automatyki budynkowej KNX?

Projektujemy szafy KNX z integracją middleware ONVIF, wdrożeniem Home Assistant lub mostka Python oraz pełną logiką alarmową ETS6 – uruchamiane i testowane na miejscu.

Poproś o wycenę →
Loading...
Back to top