Intégration ONVIF vers KNX : Déclencher l'automatisation depuis les événements caméra
Les caméras ONVIF Profile T publient les événements de détection de mouvement, de franchissement de ligne et de détection d'objet via un service d'événements standardisé. Le pontage de ces événements vers des adresses de groupe KNX permet l'automatisation du bâtiment déclenchée par caméra — éclairage d'entrée sur détection de sonnette, changements de scène DALI sur intrusion périmétrique, activation de sirène d'alarme — sans câblage de relais ni API propriétaires.
Aperçu des cas d'utilisation
Les trois scénarios d'automatisation ONVIF-KNX les plus courants dans les bâtiments intelligents et les installations sécurisées sont le pontage direct d'événements sans matériel de relais :
Éclairage d'entrée à l'arrivée
Déclencheur : Caméra de sonnette détecte une personne qui s'approche
Action KNX : Scène KNX DALI 3 (entrée 100%, blanc chaud) — extinction automatique après 5 min via minuterie d'escalier
Alarme d'intrusion périmétrique
Déclencheur : Événement de franchissement de ligne de caméra extérieure (zone de clôture nord)
Action KNX : Sortie binaire KNX → sirène d'alarme 30s + projecteurs extérieurs DALI à 100% + alerte e-mail BewO
Détection de présence dans le parking
Déclencheur : Événement de mouvement ONVIF depuis la caméra de parking aérienne
Action KNX : KNX DALI zone 4 (parking) gradation de 20% veille à 100% pendant 10 min
ONVIF-to-KNX est un pont logiciel — aucun câblage de relais, aucune modification matérielle de la caméra requise. La caméra doit être certifiée Profile T ou Profile M pour une livraison standardisée des événements. Les caméras Profile S n'ont pas de service d'événement standardisé et nécessitent des API spécifiques au fabricant.
Service d'événement ONVIF Profile T
Profile T impose l'implémentation du service d'événement ONVIF avec deux mécanismes de livraison : l'abonnement pull-point (polling) et le plus récent EventBroker (push via MQTT, introduit dans la spécification ONVIF version 21.12).
| Mécanisme | Protocole | Fonctionnement | Latence min |
|---|---|---|---|
| PullMessages | SOAP/HTTP polling | Le client crée un abonnement pull-point, puis appelle PullMessages à intervalles – la caméra renvoie les événements en attente à chaque appel | = intervalle d'interrogation (min 500 ms) |
| WS-BaseNotification | Push SOAP/HTTP | La caméra envoie un message Notify au point de terminaison HTTP du client lorsqu'un événement se déclenche – nécessite que le client expose un serveur HTTP | ~100ms (push, pas de délai d'interrogation) |
| 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 (latence du courtier MQTT) |
Le sujet d'événement ONVIF pour la détection de mouvement est tns1:VideoAnalytics/tnsaxis:MotionDetection sur les caméras Axis et tns1:RuleEngine/CellMotionDetector/Motion sur Hikvision. Les chemins des sujets varient selon le fabricant même au sein du Profile T – interrogez toujours GetEventProperties sur l'appareil spécifique pour énumérer les sujets disponibles.
Méthode 1 : Intégration Home Assistant ONVIF + KNX
Home Assistant fournit une intégration ONVIF native et une intégration KNX native. L'exécution des deux intégrations dans la même instance HA permet aux événements de caméra ONVIF de déclencher des écritures d'adresses de groupe KNX via les automatisations HA – sans code personnalisé requis.
Home Assistant configuration.yaml – automatisation 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)L'intégration ONVIF de Home Assistant utilise par défaut la notification push WS-BaseNotification sur les caméras prises en charge, avec repli sur l'interrogation PullMessages (intervalle par défaut de 10 secondes). Pour une réponse KNX inférieure à la seconde, définissez l'intervalle de balayage de l'intégration ONVIF sur 1s ou utilisez une caméra prenant en charge EventBroker MQTT afin que HA puisse s'abonner via l'intégration MQTT.
Méthode 2 : NVR avec sortie KNX native
Les plateformes VMS d'entreprise prennent en charge l'intégration KNX via des plugins dédiés, permettant un transfert direct d'événements vers KNX sans serveur middleware séparé.
Milestone XProtect + plugin KNX
Milestone XProtect Corporate et Expert prennent en charge les intégrations tierces via le SDK MIP. Le plugin KNX MIP (disponible sur Milestone Marketplace) mappe les événements d'alarme XProtect aux écritures d'adresses de groupe KNX via une passerelle KNX/IP. Prend en charge les télégrammes de déclenchement DPT 1.001 et les commandes de rappel de scène.
XProtect Management Client → Règles et événements → Ajouter une règle → Alarme déclenchée → Exécuter la commande → Plugin KNX → écrire GA 3/0/3 = 3 (rappel de scène)
Genetec Security Center + connecteur KNX
Genetec Security Center 5.10+ prend en charge les connecteurs d'événements personnalisés. Le connecteur KNX pour Genetec (disponible auprès d'intégrateurs Genetec certifiés) mappe les catégories d'événements de Security Center aux télégrammes d'adresses de groupe KNX. Prend en charge les événements d'analyse vidéo, les événements de refus d'accès et l'accusé de réception d'alarme.
Genetec Config Tool → Système → Paramètres généraux → Extensions → Ajouter un connecteur KNX → configurer la table de mappage GA par type d'événement
Méthode 3 : Ajax Systems avec flux caméra ONVIF
Ajax Hub 2 Plus prend en charge l'intégration directe de caméras ONVIF – jusqu'à 25 caméras IP par concentrateur dans l'application Ajax. Ajax peut recevoir les événements de mouvement ONVIF des caméras connectées et les transmettre comme événements d'alarme Ajax. Si le système Ajax est connecté à un système KNX via la passerelle Integreat ou IQ Home, les alarmes Ajax sont traduites en télégrammes KNX.
Ajax Hub 2 Plus – chaîne de caméras ONVIF vers KNX
- Ajouter une caméra ONVIF à Ajax Hub 2 Plus dans l'application Ajax PRO (menu Caméra → + → ONVIF)
- Activer les alertes de détection de mouvement sur le canal de la caméra dans Ajax
- Ajax Hub déclenche un événement d'alarme lorsqu'un mouvement de caméra est détecté
- Système Ajax connecté à la passerelle Integreat (RS-485 ou IP) → écriture d'adresse de groupe KNX sur alarme
- Module logique KNX réagit : scène DALI, sortie sirène, notification BewO
Intégration Python : onvif-zeep + xknx
Pour les déploiements personnalisés, un script Python utilisant la bibliothèque onvif-zeep (client SOAP ONVIF) et xknx (bibliothèque Python KNX/IP) fournit un pont direct avec un contrôle total sur le filtrage des événements et la construction des télégrammes KNX.
Python — Événement de mouvement ONVIF vers télégramme 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())Installer les dépendances : pip install onvif-zeep xknx. La bibliothèque onvif-zeep utilise les fichiers WSDL officiels d'ONVIF – téléchargez-les une fois avecpython -m onvif.generate_wsdl. Exécutez ce script en tant que service systemd sur un Raspberry Pi 4 ou un petit serveur Linux sur le segment réseau de l'automatisation du bâtiment.
Considérations sur la latence
La latence totale entre le mouvement physique et la livraison du télégramme KNX dépend de la méthode de livraison des événements. Pour l'automatisation critique pour la sécurité, choisissez la livraison push ou MQTT plutôt que l'interrogation pull-point.
| Segment | PullMessages (interrogation 500 ms) | MQTT EventBroker | Push WS-BaseNotification |
|---|---|---|---|
| Analyse vidéo de la caméra | 50–200ms | 50–200ms | 50–200ms |
| Livraison de l'événement au pont | 0–500ms (intervalle d'interrogation) | ~20ms (courtier MQTT) | ~30ms (push HTTP) |
| Traitement du pont (Python) | ~5ms | ~5ms | ~5ms |
| Télégramme KNX/IP vers le bus | ~20ms | ~20ms | ~20ms |
| Total typique | ~600ms | ~295ms | ~255ms |
Pour les cas d'utilisation d'alarme intrusion, une latence totale de 600 ms est acceptable – l'activation de la sirène d'alarme KNX dans la seconde suivant la détection de mouvement est standard dans les systèmes de grade 2 de la norme EN 50131. Pour l'automatisation de l'éclairage de confort (détection de présence), 600 ms est imperceptible. ONVIF vers KNX n'est pas adapté à la détection incendie pour la sécurité des personnes – utilisez des centrales de détection incendie dédiées avec des interfaces certifiées à cet effet.
Besoin d'événements de caméra ONVIF intégrés à votre automatisation KNX ?
Nous concevons des armoires KNX avec intégration middleware ONVIF, déploiement Home Assistant ou pont Python, et logique d'alarme ETS6 complète – mis en service et testés sur site.
Demander un devis →