ONVIF · KNX · Profile T · Home Assistant · xknx · Python · 12 min lasīšanai

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ānismsProtokolsKā tas darbojasMin. aizkave
PullMessagesSOAP/HTTP aptaujaKlients izveido pull-point abonementu, pēc tam periodiski izsauc PullMessages — kamera atgriež uzkrātos notikumus katrā izsaukumā= aptaujas intervāls (min 500 ms)
WS-BaseNotificationSOAP/HTTP pushKamera 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

  1. Pievienojiet ONVIF kameru Ajax Hub 2 Plus Ajax PRO lietotnē (Kameras izvēlne → + → ONVIF)
  2. Iespējojiet kustības noteikšanas brīdinājumus kameras kanālā Ajax
  3. Ajax centrmezgls nosūta trauksmes notikumu, kad kamera nosaka kustību
  4. Ajax sistēma savienota ar Integreat vārteju (RS-485 vai IP) → KNX grupas adreses rakstīšana trauksmes gadījumā
  5. 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.

SegmentsPullMessages (500 ms aptauja)MQTT EventBrokerWS-BaseNotification push
Kameras video analīze50–200 ms50–200 ms50–200 ms
Notikuma piegāde tiltam0–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 →
Ielādējas...
Uz augšu