ONVIF · KNX · Profile T · Home Assistant · xknx · Python · 12 min de lectura

Integración ONVIF a KNX: Activación de automatización desde eventos de cámara

Las cámaras ONVIF Profile T publican eventos de detección de movimiento, cruce de línea y detección de objetos a través de un servicio de eventos estandarizado. Puentear estos eventos a direcciones de grupo KNX permite la automatización de edificios activada por cámara — iluminación de entrada al detectar timbre, cambios de escena DALI en violación de perímetro, activación de sirena de alarma — sin cableado de relés ni API propietarias.

Resumen de casos de uso

Los tres escenarios de automatización ONVIF a KNX más comunes en edificios inteligentes e instalaciones seguras son el puente directo de eventos sin hardware de relé:

Iluminación de entrada al llegar

Disparador: Cámara de timbre detecta persona que se acerca

Acción KNX: Escena KNX DALI 3 (entrada 100%, blanco cálido) — apagado automático tras 5 min mediante temporizador de escalera

Alarma de intrusión perimetral

Disparador: Evento de cruce de línea de cámara exterior (zona de valla norte)

Acción KNX: Salida binaria KNX → sirena de alarma 30s + reflectores exteriores DALI al 100% + alerta por correo electrónico BewO

Detección de presencia en el estacionamiento

Disparador: Evento de movimiento ONVIF desde la cámara de estacionamiento elevada

Acción KNX: KNX DALI zona 4 (estacionamiento) atenuación de 20% standby a 100% durante 10 min

ONVIF-to-KNX es un puente de software — sin cableado de relés, sin modificación de hardware de la cámara requerida. La cámara necesita certificación Profile T o Profile M para la entrega estandarizada de eventos. Las cámaras Profile S no tienen un servicio de eventos estandarizado y requieren API específicas del fabricante.

Servicio de eventos ONVIF Profile T

Profile T exige la implementación del servicio de eventos ONVIF con dos mecanismos de entrega: suscripción pull-point (polling) y el más reciente EventBroker (push vía MQTT, introducido en la especificación ONVIF release 21.12).

MecanismoProtocoloCómo funcionaLatencia mínima
PullMessagesSOAP/HTTP pollingEl cliente crea una suscripción pull-point, luego llama a PullMessages en intervalos – la cámara devuelve los eventos en cola en cada llamada= intervalo de sondeo (mín. 500 ms)
WS-BaseNotificationPush SOAP/HTTPLa cámara envía un mensaje Notify al endpoint HTTP del cliente cuando se dispara un evento – requiere que el cliente exponga un servidor HTTP~100ms (push, sin retardo de polling)
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~50ms (latencia del broker MQTT)

El tema de evento ONVIF para detección de movimiento es tns1:VideoAnalytics/tnsaxis:MotionDetection en cámaras Axis y tns1:RuleEngine/CellMotionDetector/Motion en Hikvision. Las rutas de los temas varían según el fabricante incluso dentro del Profile T – consulte siempre GetEventProperties en el dispositivo específico para enumerar los temas disponibles.

Método 1: Integración Home Assistant ONVIF + KNX

Home Assistant proporciona una integración ONVIF nativa y una integración KNX nativa. Ejecutar ambas integraciones en la misma instancia de HA permite que los eventos de la cámara ONVIF activen escrituras de direcciones de grupo KNX a través de automatizaciones de HA – sin necesidad de código personalizado.

Home Assistant configuration.yaml – automatización 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)

La integración ONVIF de Home Assistant utiliza por defecto el push WS-BaseNotification en cámaras compatibles, con respaldo al sondeo PullMessages (intervalo predeterminado de 10 segundos). Para una respuesta KNX de menos de un segundo, establezca el intervalo de escaneo de la integración ONVIF en 1s o use una cámara que admita EventBroker MQTT para que HA pueda suscribirse a través de la integración MQTT.

Método 2: NVR con salida KNX nativa

Las plataformas VMS empresariales admiten la integración KNX mediante plugins dedicados, lo que permite el reenvío directo de eventos a KNX sin un servidor middleware separado.

Milestone XProtect + plugin KNX

Milestone XProtect Corporate y Expert admiten integraciones de terceros a través del SDK MIP. El plugin KNX MIP (disponible en Milestone Marketplace) asigna eventos de alarma de XProtect a escrituras de direcciones de grupo KNX a través de una puerta de enlace KNX/IP. Admite telegramas de disparo DPT 1.001 y comandos de recuperación de escenas.

XProtect Management Client → Reglas y eventos → Agregar regla → Alarma activada → Ejecutar comando → Plugin KNX → escribir GA 3/0/3 = 3 (recuperación de escena)

Genetec Security Center + conector KNX

Genetec Security Center 5.10+ admite conectores de eventos personalizados. El conector KNX para Genetec (disponible a través de integradores Genetec certificados) asigna categorías de eventos de Security Center a telegramas de direcciones de grupo KNX. Admite eventos de análisis de video, eventos de denegación de acceso y acuse de recibo de alarma.

Genetec Config Tool → Sistema → Configuración general → Extensiones → Agregar conector KNX → configurar tabla de asignación GA por tipo de evento

Método 3: Ajax Systems con alimentación de cámara ONVIF

Ajax Hub 2 Plus admite la integración directa de cámaras ONVIF – hasta 25 cámaras IP por concentrador en la aplicación Ajax. Ajax puede recibir eventos de movimiento ONVIF de las cámaras conectadas y reenviarlos como eventos de alarma Ajax. Si el sistema Ajax está conectado a un sistema KNX a través de la puerta de enlace Integreat o IQ Home, las alarmas Ajax se traducen en telegramas KNX.

Ajax Hub 2 Plus – cadena de cámara ONVIF a KNX

  1. Agregar cámara ONVIF a Ajax Hub 2 Plus en la aplicación Ajax PRO (menú Cámara → + → ONVIF)
  2. Habilitar alertas de detección de movimiento en el canal de la cámara en Ajax
  3. Ajax Hub dispara evento de alarma cuando se detecta movimiento de la cámara
  4. Sistema Ajax conectado a la puerta de enlace Integreat (RS-485 o IP) → escritura de dirección de grupo KNX en alarma
  5. Módulo lógico KNX reacciona: escena DALI, salida de bocina, notificación BewO

Integración Python: onvif-zeep + xknx

Para implementaciones personalizadas, un script Python que utiliza la biblioteca onvif-zeep (cliente SOAP ONVIF) y xknx (biblioteca Python KNX/IP) proporciona un puente directo con control total sobre el filtrado de eventos y la construcción de telegramas KNX.

Python — Evento de movimiento ONVIF a telegrama 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())

Instalar dependencias: pip install onvif-zeep xknx. La biblioteca onvif-zeep utiliza los archivos WSDL oficiales de ONVIF — descárguelos una vez conpython -m onvif.generate_wsdl. Ejecute este script como un servicio systemd en una Raspberry Pi 4 o un pequeño servidor Linux en el segmento de red de automatización del edificio.

Consideraciones de latencia

La latencia total desde el movimiento físico hasta la entrega del telegrama KNX depende del método de entrega de eventos. Para automatización crítica de seguridad, elija entrega push o MQTT en lugar de sondeo pull-point.

SegmentoPullMessages (sondeo de 500 ms)MQTT EventBrokerPush WS-BaseNotification
Análisis de video de la cámara50–200ms50–200ms50–200ms
Entrega de eventos al puente0–500ms (intervalo de sondeo)~20ms (broker MQTT)~30ms (push HTTP)
Procesamiento del puente (Python)~5ms~5ms~5ms
Telegrama KNX/IP al bus~20ms~20ms~20ms
Total típico~600ms~295ms~255ms

Para casos de uso de alarma de intrusión, una latencia total de 600 ms es aceptable – la activación de la sirena de alarma KNX dentro de 1 segundo de la detección de movimiento es estándar en sistemas Grado 2 de EN 50131. Para automatización de iluminación de confort (detección de presencia), 600 ms es imperceptible. ONVIF a KNX no es adecuado para detección de incendios de seguridad vital – utilice paneles de alarma contra incendios dedicados con interfaces certificadas para ese propósito.

¿Necesita eventos de cámara ONVIF integrados en su automatización KNX?

Diseñamos paneles KNX con integración de middleware ONVIF, implementación de Home Assistant o puente Python, y lógica de alarma ETS6 completa – puestos en marcha y probados en sitio.

Solicitar presupuesto →
Loading...
Back to top