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

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

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

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

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

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

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

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

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

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

Действие KNX: Бинарный выход KNX → сирена 30с + прожекторы DALI на 100% + email-уведомление BewO

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

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

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

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

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

Профиль T требует реализации службы событий ONVIF с двумя механизмами доставки: pull-point подписка (опрос) и более новый EventBroker (отправка через 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 — без написания кода.

Файл configuration.yaml Home Assistant — автоматизация 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 отправляет событие тревоги при обнаружении движения камерой
  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 polling.

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

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

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

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

Запросить предложение →
Загрузка ...
Наверх