ONVIF · KNX · Profile T · Home Assistant · xknx · Python · 12 мин чтения

Интеграция ONVIF с KNX: запуск автоматизации по событиям с камер

Камеры ONVIF Profile T публикуют события обнаружения движения, пересечения линии и обнаружения объектов через стандартизированный сервис событий. Мост этих событий к групповым адресам KNX позволяет реализовать автоматизацию здания, запускаемую камерами — включение освещения входа при обнаружении дверного звонка, смену сцен DALI при нарушении периметра, активацию сигнализации — без релейных соединений или проприетарных API.

Обзор вариантов использования

Три наиболее распространенных сценария автоматизации ONVIF-to-KNX в интеллектуальных зданиях и охраняемых объектах — это прямое bridging событий без релейного оборудования:

Освещение входа при прибытии

Триггер: Камера дверного звонка обнаруживает приближающегося человека

Действие KNX: Сцена DALI 3 KNX (вход 100%, теплый белый) — автоматическое выключение через 5 мин по таймеру лестницы

Сигнализация нарушения периметра

Триггер: Событие пересечения линии уличной камеры (зона северного забора)

Действие KNX: Двоичный выход KNX → сигнализация 30 с + прожекторы DALI снаружи на 100% + email-оповещение BewO

Обнаружение присутствия на парковке

Триггер: Событие движения ONVIF от потолочной камеры парковки

Действие KNX: Зона DALI 4 KNX (парковка) диммирование с 20% дежурного до 100% на 10 мин

ONVIF-to-KNX — это программный мост — не требуется релейных соединений или аппаратной модификации камеры. Камере требуется сертификация Profile T или Profile M для стандартизированной доставки событий. Камеры Profile S не имеют стандартизированного сервиса событий и требуют вместо этого проприетарных API производителя.

Сервис событий ONVIF Profile T

Профиль T требует реализации службы событий ONVIF с двумя механизмами доставки: подписка pull-point (опрос) и более новый EventBroker (push через MQTT, введен в спецификации ONVIF версии 21.12).

МеханизмПротоколКак работаетМин. задержка
PullMessagesSOAP/HTTP опросКлиент создает подписку pull-point, затем вызывает PullMessages с заданным интервалом — камера возвращает накопленные события при каждом вызове= интервал опроса (мин. 500 мс)
WS-BaseNotificationSOAP/HTTP pushКамера отправляет сообщение Notify на HTTP-конечную точку клиента при возникновении события — требуется, чтобы клиент предоставлял HTTP-сервер~100 мс (push, без задержки опроса)
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 мс (задержка MQTT-брокера)

Топик ONVIF для обнаружения движения — tns1:VideoAnalytics/tnsaxis:MotionDetection на камерах Axis и tns1:RuleEngine/CellMotionDetector/Motion на Hikvision. Пути топиков различаются у разных производителей даже в рамках Profile T — всегда запрашивайте GetEventProperties на конкретном устройстве для перечисления доступных топиков.

Метод 1: Интеграция Home Assistant ONVIF + KNX

Home Assistant предоставляет нативную интеграцию ONVIF и нативную интеграцию KNX. Запуск обеих интеграций в одном экземпляре HA позволяет событиям ONVIF-камеры инициировать запись в групповые адреса KNX через автоматизации HA — без необходимости в пользовательском коде.

Home Assistant configuration.yaml — автоматизация 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)

Интеграция ONVIF в Home Assistant по умолчанию использует push-уведомления WS-BaseNotification на поддерживаемых камерах, с переходом на опрос PullMessages (интервал по умолчанию 10 секунд). Для реакции KNX за доли секунды установите интервал сканирования интеграции ONVIF на 1 с или используйте камеру, поддерживающую EventBroker MQTT, чтобы HA мог подписаться через интеграцию MQTT.

Метод 2: NVR с нативным выводом KNX

Корпоративные VMS-платформы поддерживают интеграцию KNX через выделенные плагины, обеспечивая прямую передачу событий в KNX без промежуточного сервера.

Milestone XProtect + плагин KNX

Milestone XProtect Corporate и Expert поддерживают сторонние интеграции через MIP SDK. Плагин KNX MIP (доступен на Milestone Marketplace) сопоставляет события тревоги XProtect с записью в групповые адреса KNX через шлюз KNX/IP. Поддерживает телеграммы-триггеры DPT 1.001 и команды вызова сцен.

XProtect Management Client → Правила и события → Добавить правило → Сработала тревога → Выполнить команду → Плагин KNX → запись GA 3/0/3 = 3 (вызов сцены)

Genetec Security Center + коннектор KNX

Genetec Security Center 5.10+ поддерживает пользовательские коннекторы событий. Коннектор KNX для Genetec (доступен у сертифицированных интеграторов Genetec) сопоставляет категории событий Security Center с телеграммами групповых адресов KNX. Поддерживает события видеоаналитики, события отказа в доступе и подтверждение тревог.

Genetec Config Tool → Система → Общие настройки → Расширения → Добавить коннектор KNX → настроить таблицу сопоставления GA для каждого типа события

Метод 3: Ajax Systems с потоком ONVIF-камеры

Ajax Hub 2 Plus поддерживает прямую интеграцию ONVIF-камер — до 25 IP-камер на хаб в приложении Ajax. Ajax может получать ONVIF-события движения от подключенных камер и передавать их как события тревоги Ajax. Если система Ajax подключена к системе KNX через шлюз Integreat или IQ Home, тревоги Ajax преобразуются в телеграммы KNX.

Ajax Hub 2 Plus — цепочка ONVIF-камеры к KNX

  1. Добавить ONVIF-камеру в Ajax Hub 2 Plus в приложении Ajax PRO (меню Камеры → + → ONVIF)
  2. Включить оповещения о обнаружении движения на канале камеры в Ajax
  3. Ajax Hub запускает событие тревоги при обнаружении движения камерой
  4. Система Ajax подключена к шлюзу Integreat (RS-485 или IP) → запись в групповой адрес KNX при тревоге
  5. Логический модуль KNX реагирует: сцена DALI, выход сирены, уведомление BewO

Интеграция на Python: onvif-zeep + xknx

Для пользовательских развертываний скрипт Python, использующий onvif-zeep библиотека (ONVIF SOAP-клиент) и xknx (библиотека KNX/IP для Python) обеспечивает прямой мост с полным контролем над фильтрацией событий и построением KNX-телеграмм.

Python — событие движения ONVIF в 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())

Установка зависимостей: pip install onvif-zeep xknx. Библиотека onvif-zeep использует официальные WSDL-файлы ONVIF — загрузите их один раз с помощьюpython -m onvif.generate_wsdl. Запустите этот скрипт как systemd-сервис на Raspberry Pi 4 или небольшом Linux-сервере в сегменте сети автоматизации здания.

Соображения по задержке

Общая задержка от физического движения до доставки KNX-телеграммы зависит от способа доставки событий. Для критичной к безопасности автоматизации выбирайте push или MQTT вместо опроса pull-point.

СегментPullMessages (опрос 500 мс)MQTT EventBrokerWS-BaseNotification push
Анализ видео с камеры50–200 мс50–200 мс50–200 мс
Доставка события до моста0–500 мс (интервал опроса)~20 мс (MQTT-брокер)~30 мс (HTTP push)
Обработка мостом (Python)~5 мс~5 мс~5 мс
Телеграмма KNX/IP в шину~20 мс~20 мс~20 мс
Общая типичная~600 мс~295 мс~255 мс

Для сценариев охранной сигнализации задержка в 600 мс приемлема — активация звукового оповещателя KNX в течение 1 секунды после обнаружения движения является стандартной для систем уровня 2 по EN 50131. Для автоматизации комфортного освещения (обнаружение присутствия) 600 мс незаметно. ONVIF-to-KNX не подходит для пожарной сигнализации, связанной с безопасностью жизни — используйте выделенные пожарные панели с сертифицированными интерфейсами.

Нужно подключить события камер ONVIF к вашей системе автоматизации здания KNX?

Мы проектируем щиты KNX с интеграцией ONVIF-промежуточного ПО, развертыванием Home Assistant или Python-моста и полной логикой сигнализации ETS6 — смонтировано и протестировано на объекте.

Запросить расчёт →
Loading...
Back to top