ONVIF un KNX integrācija: automatizācija no kameras notikumiem
ONVIF Profile T kameras publicē kustības, līnijas šķērsošanas un objektu atklāšanas notikumus, izmantojot standartizētu notikumu servisu. Savienojot šos notikumus ar KNX grupu adresēm, iespējams vadīt ēkas automatizāciju — ieslēgt ieejas apgaismojumu pēc durvju zvana kameras signāla, mainīt DALI ainas, aktivizēt signalizāciju — bez releju vadiem vai patentētiem API.
Lietošanas scenāriju pārskats
Trīs izplatītākie ONVIF-to-KNX automatizācijas scenāriji viedajās mājās un apsargājamos objektos — tieša notikumu pārsūtīšana bez releju aparatūras:
Ieejas apgaismojums ierašanās brīdī
Triggers: Durvju zvana kamera nosaka tuvojošos cilvēku
KNX darbība: KNX DALI aina 3 (ieeja 100%, silta balta) — automātiska izslēgšana pēc 5 min ar kāpņu telpas taimeri
Perimetra pārkāpuma signalizācija
Triggers: Āra kameras līnijas šķērsošanas notikums (ziemeļu žoga zona)
KNX darbība: KNX binārā izeja → sirēna 30s + DALI āra prožektori uz 100% + BewO e-pasta brīdinājums
Autostāvvietas klātbūtnes noteikšana
Triggers: ONVIF kustības notikums no griestu kameras autostāvvietā
KNX darbība: DALI zona 4 (autostāvvieta) — aptumšošana no 20% dežūras līdz 100% uz 10 min
ONVIF-to-KNX ir programmatūras tilts — nav nepieciešami releji vai kameras aparatūras izmaiņas. Kamerai jābūt sertificētai ar Profile T vai Profile M standartizētai notikumu piegādei. Profile S kamerām nav standarta notikumu servisa un tās prasa ražotāja specifiskus API.
ONVIF Profile T notikumu serviss
Profile T nosaka ONVIF notikumu servisa ieviešanu ar diviem piegādes mehānismiem: pull-point abonēšana (aptauja) un jaunākais EventBroker (nosūtīšana caur MQTT, ieviests ONVIF specifikācijas laidienā 21.12).
| Mehānisms | Protokols | Kā tas darbojas | Min. aizkave |
|---|---|---|---|
| PullMessages | SOAP/HTTP aptauja | Klients izveido pull-point abonementu, pēc tam periodiski izsauc PullMessages — kamera atgriež uzkrātos notikumus katrā izsaukumā | = aptaujas intervāls (min 500 ms) |
| WS-BaseNotification | SOAP/HTTP push | Kamera nosūta Notify ziņojumu uz klienta HTTP galapunktu, kad notikums iestājas — nepieciešams, lai klients paceltu HTTP serveri | ~100 ms (push, bez aptaujas aizkaves) |
| 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 | ~50 ms (MQTT brokera aizkave) |
ONVIF notikumu tēma kustības noteikšanai ir tns1:VideoAnalytics/tnsaxis:MotionDetection Axis kamerās un tns1:RuleEngine/CellMotionDetector/Motion Hikvision. Tēmu ceļi atšķiras pat viena ražotāja ietvaros Profile T — vienmēr pieprasiet GetEventProperties konkrētajā ierīcē, lai uzskaitītu pieejamās tēmas.
1. metode: Home Assistant ONVIF + KNX integrācija
Home Assistant nodrošina vietējo ONVIF integrāciju un vietējo KNX integrāciju. Abu integrāciju palaišana vienā HA instancē ļauj ONVIF kameras notikumiem aktivizēt KNX grupas adrešu rakstīšanu, izmantojot HA automatizācijas — bez papildu koda.
Home Assistant configuration.yaml — ONVIF + KNX automatizācija
# 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)Home Assistant ONVIF integrācija pēc noklusējuma izmanto WS-BaseNotification push atbalstītajās kamerās, atkāpjoties uz PullMessages aptauju (noklusējuma intervāls 10 sekundes). Lai KNX reaģētu mazāk par sekundi, iestatiet ONVIF integrācijas skenēšanas intervālu uz 1 s vai izmantojiet kameru, kas atbalsta EventBroker MQTT, lai HA varētu abonēt, izmantojot MQTT integrāciju.
2. metode: NVR ar vietējo KNX izeju
Uzņēmumu VMS platformas atbalsta KNX integrāciju, izmantojot īpašus spraudņus, ļaujot notikumus tieši pārsūtīt uz KNX bez atsevišķa starpposma servera.
Milestone XProtect + KNX spraudnis
Milestone XProtect Corporate un Expert atbalsta trešo pušu integrācijas, izmantojot MIP SDK. KNX MIP spraudnis (pieejams Milestone Marketplace) kartē XProtect trauksmes notikumus uz KNX grupas adrešu rakstīšanu, izmantojot KNX/IP vārteju. Atbalsta DPT 1.001 trigertelegrammas un ainu izsaukšanas komandas.
XProtect Management Client → Noteikumi un notikumi → Pievienot noteikumu → Trauksme aktivizēta → Izpildīt komandu → KNX spraudnis → rakstīt GA 3/0/3 = 3 (ainas izsaukšana)
Genetec Security Center + KNX savienotājs
Genetec Security Center 5.10+ atbalsta pielāgotus notikumu savienotājus. KNX savienotājs Genetec (pieejams no sertificētiem Genetec integratoriem) kartē Security Center notikumu kategorijas uz KNX grupas adrešu telegrammām. Atbalsta videoanalītikas notikumus, piekļuves lieguma notikumus un trauksmes apstiprināšanu.
Genetec Config Tool → Sistēma → Vispārīgie iestatījumi → Paplašinājumi → Pievienot KNX savienotāju → konfigurēt GA kartēšanas tabulu katram notikuma tipam
3. metode: Ajax Systems ar ONVIF kameras plūsmu
Ajax Hub 2 Plus atbalsta tiešu ONVIF kameru integrāciju — līdz 25 IP kamerām vienā centrmezglā Ajax lietotnē. Ajax var saņemt ONVIF kustības notikumus no pievienotajām kamerām un pārsūtīt tos kā Ajax trauksmes notikumus. Ja Ajax sistēma ir savienota ar KNX sistēmu, izmantojot Integreat vai IQ Home vārteju, Ajax trauksmes tiek pārveidotas par KNX telegrammām.
Ajax Hub 2 Plus — ONVIF kameras ķēde uz KNX
- Pievienojiet ONVIF kameru Ajax Hub 2 Plus Ajax PRO lietotnē (Kameras izvēlne → + → ONVIF)
- Iespējojiet kustības noteikšanas brīdinājumus kameras kanālā Ajax
- Ajax centrmezgls nosūta trauksmes notikumu, kad kamera nosaka kustību
- Ajax sistēma savienota ar Integreat vārteju (RS-485 vai IP) → KNX grupas adreses rakstīšana trauksmes gadījumā
- KNX loģikas modulis reaģē: DALI aina, sirēnas izeja, BewO paziņojums
Python integrācija: onvif-zeep + xknx
Pielāgotiem risinājumiem — Python skripts, izmantojot onvif-zeep bibliotēka (ONVIF SOAP klients) un xknx (KNX/IP Python bibliotēka) nodrošina tiešu tiltu ar pilnu kontroli pār notikumu filtrēšanu un KNX telegrammu veidošanu.
Python — ONVIF kustības notikums uz KNX telegrammu
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())Instalējiet atkarības: pip install onvif-zeep xknx. Onvif-zeep bibliotēka izmanto oficiālos ONVIF WSDL failus — lejupielādējiet tos vienreiz arpython -m onvif.generate_wsdl. Palaidiet šo skriptu kā systemd servisu uz Raspberry Pi 4 vai neliela Linux servera ēkas automatizācijas tīkla segmentā.
Aizkaves apsvērumi
Kopējā aizkave no fiziskas kustības līdz KNX telegrammas piegādei ir atkarīga no notikuma piegādes metodes. Drošībai kritiskai automatizācijai izvēlieties push vai MQTT piegādi, nevis pull-point polling.
| Segments | PullMessages (500 ms aptauja) | MQTT EventBroker | WS-BaseNotification push |
|---|---|---|---|
| Kameras video analīze | 50–200 ms | 50–200 ms | 50–200 ms |
| Notikuma piegāde tiltam | 0–500 ms (aptaujas intervāls) | ~20 ms (MQTT brokeris) | ~30 ms (HTTP push) |
| Tilta apstrāde (Python) | ~5 ms | ~5 ms | ~5 ms |
| KNX/IP telegramma uz kopni | ~20 ms | ~20 ms | ~20 ms |
| Kopējā tipiskā | ~600 ms | ~295 ms | ~255 ms |
Iebrukuma signalizācijas gadījumā 600 ms aizkave ir pieņemama — KNX signalizācijas sirēnas aktivizēšana 1 sekundes laikā pēc kustības noteikšanas atbilst EN 50131 Grade 2 standartam. Apgaismojuma automatizācijā (klātbūtnes sensori) 600 ms nav jūtami. ONVIF-to-KNX nav piemērots ugunsdrošībai — izmantojiet atsevišķus ugunsgrēka paneli ar sertificētām saskarnēm.
Nepieciešams savienot ONVIF kameras notikumus ar jūsu KNX sistēmu?
Mēs projektējam KNX paneļus ar ONVIF starpprogrammatūras integrāciju, Home Assistant vai Python tilta izvietošanu un pilnu ETS6 signalizācijas loģiku — uzstādītu un pārbaudītu uz vietas.
Pieprasīt piedāvājumu →