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).
| Mechanizm | Protokół | Jak to działa | Min. opóźnienie |
|---|---|---|---|
| PullMessages | SOAP/HTTP polling | Klient 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-BaseNotification | SOAP/HTTP push | Kamera 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
- Dodaj kamerę ONVIF do Ajax Hub 2 Plus w aplikacji Ajax PRO (Menu Kamera → + → ONVIF)
- Włącz powiadomienia o wykryciu ruchu na kanale kamery w Ajax
- Ajax Hub uruchamia zdarzenie alarmowe po wykryciu ruchu przez kamerę
- System Ajax podłączony do bramy Integreat (RS-485 lub IP) → zapis adresu grupowego KNX przy alarmie
- 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.
| Segment | PullMessages (odpytywanie co 500 ms) | MQTT EventBroker | WS-BaseNotification push |
|---|---|---|---|
| Analiza wideo z kamery | 50–200ms | 50–200ms | 50–200ms |
| Dostarczenie zdarzenia do bridge'a | 0–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ę →