Интеграция 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).
| Механизм | Протокол | Как работает | Мин. задержка |
|---|---|---|---|
| PullMessages | SOAP/HTTP опрос | Клиент создает подписку pull-point, затем вызывает PullMessages с заданным интервалом — камера возвращает накопленные события при каждом вызове | = интервал опроса (мин. 500 мс) |
| WS-BaseNotification | SOAP/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
- Добавить ONVIF-камеру в Ajax Hub 2 Plus в приложении Ajax PRO (меню Камеры → + → ONVIF)
- Включить оповещения о обнаружении движения на канале камеры в Ajax
- Ajax Hub запускает событие тревоги при обнаружении движения камерой
- Система Ajax подключена к шлюзу Integreat (RS-485 или IP) → запись в групповой адрес KNX при тревоге
- Логический модуль 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 EventBroker | WS-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 — смонтировано и протестировано на объекте.
Запросить расчёт →