Integrazione ONVIF-KNX: Automazione attivata da eventi telecamera
Le telecamere ONVIF Profile T pubblicano eventi di rilevamento movimento, attraversamento linea e rilevamento oggetti tramite un servizio eventi standardizzato. Il bridging di questi eventi agli indirizzi di gruppo KNX consente l'automazione degli edifici attivata da telecamera — illuminazione d'ingresso su rilevamento campanello, cambi scena DALI su violazione perimetro, attivazione sirena allarme — senza cablaggio relè o API proprietarie.
Panoramica dei casi d'uso
I tre scenari di automazione ONVIF-KNX più comuni negli edifici intelligenti e negli impianti sicuri sono il bridging diretto degli eventi senza hardware di relè:
Illuminazione d'ingresso all'arrivo
Trigger: Videocitofono rileva persona in avvicinamento
Azione KNX: Scena KNX DALI 3 (ingresso 100%, bianco caldo) — spegnimento automatico dopo 5 min tramite timer scala
Allarme violazione perimetro
Trigger: Evento attraversamento linea telecamera esterna (zona recinzione nord)
Azione KNX: Uscita binaria KNX → sirena allarme 30s + faretti esterni DALI al 100% + avviso e-mail BewO
Rilevamento presenza nel parcheggio
Trigger: Evento di movimento ONVIF dalla telecamera di parcheggio sopraelevata
Azione KNX: KNX DALI zona 4 (parcheggio) dimmerazione dal 20% standby al 100% per 10 min
ONVIF-to-KNX è un ponte software — nessun cablaggio relè, nessuna modifica hardware alla telecamera richiesta. La telecamera necessita di certificazione Profile T o Profile M per la consegna standardizzata degli eventi. Le telecamere Profile S non hanno un servizio eventi standardizzato e richiedono invece API specifiche del produttore.
Servizio eventi ONVIF Profile T
Profile T impone l'implementazione del servizio eventi ONVIF con due meccanismi di consegna: sottoscrizione pull-point (polling) e il più recente EventBroker (push via MQTT, introdotto nella specifica ONVIF release 21.12).
| Meccanismo | Protocollo | Come funziona | Latenza minima |
|---|---|---|---|
| PullMessages | SOAP/HTTP polling | Il client crea una sottoscrizione pull-point, quindi chiama PullMessages a intervalli – la telecamera restituisce gli eventi in coda a ogni chiamata | = intervallo di polling (min 500 ms) |
| WS-BaseNotification | Push SOAP/HTTP | La telecamera invia un messaggio Notify all'endpoint HTTP del client quando si verifica un evento – richiede che il client esponga un server HTTP | ~100ms (push, nessun ritardo di 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 (latenza del broker MQTT) |
Il topic evento ONVIF per il rilevamento del movimento è tns1:VideoAnalytics/tnsaxis:MotionDetection sulle telecamere Axis e tns1:RuleEngine/CellMotionDetector/Motion su Hikvision. I percorsi dei topic variano a seconda del produttore anche all'interno del Profile T – interroga sempre GetEventProperties sul dispositivo specifico per elencare i topic disponibili.
Metodo 1: Integrazione Home Assistant ONVIF + KNX
Home Assistant fornisce un'integrazione ONVIF nativa e un'integrazione KNX nativa. Eseguendo entrambe le integrazioni nella stessa istanza HA, gli eventi della telecamera ONVIF possono attivare scritture di indirizzi di gruppo KNX tramite automazioni HA – senza necessità di codice personalizzato.
Home Assistant configuration.yaml – automazione 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'integrazione ONVIF di Home Assistant utilizza per impostazione predefinita il push WS-BaseNotification sulle telecamere supportate, con fallback al polling PullMessages (intervallo predefinito di 10 secondi). Per una risposta KNX sub-secondo, imposta l'intervallo di scansione dell'integrazione ONVIF su 1s o utilizza una telecamera che supporti EventBroker MQTT in modo che HA possa sottoscriversi tramite l'integrazione MQTT.
Metodo 2: NVR con uscita KNX nativa
Le piattaforme VMS aziendali supportano l'integrazione KNX tramite plugin dedicati, consentendo l'inoltro diretto degli eventi a KNX senza un server middleware separato.
Milestone XProtect + plugin KNX
Milestone XProtect Corporate ed Expert supportano integrazioni di terze parti tramite MIP SDK. Il plugin KNX MIP (disponibile su Milestone Marketplace) mappa gli eventi di allarme di XProtect su scritture di indirizzi di gruppo KNX tramite un gateway KNX/IP. Supporta telegrammi di attivazione DPT 1.001 e comandi di richiamo scena.
XProtect Management Client → Regole ed eventi → Aggiungi regola → Allarme attivato → Esegui comando → Plugin KNX → scrivi GA 3/0/3 = 3 (richiamo scena)
Genetec Security Center + connettore KNX
Genetec Security Center 5.10+ supporta connettori di eventi personalizzati. Il connettore KNX per Genetec (disponibile presso integratori Genetec certificati) mappa le categorie di eventi di Security Center su telegrammi di indirizzi di gruppo KNX. Supporta eventi di analisi video, eventi di accesso negato e riconoscimento allarme.
Genetec Config Tool → Sistema → Impostazioni generali → Estensioni → Aggiungi connettore KNX → configura tabella di mappatura GA per tipo di evento
Metodo 3: Ajax Systems con feed telecamera ONVIF
Ajax Hub 2 Plus supporta l'integrazione diretta di telecamere ONVIF – fino a 25 telecamere IP per hub nell'app Ajax. Ajax può ricevere eventi di movimento ONVIF dalle telecamere collegate e inoltrarli come eventi di allarme Ajax. Se il sistema Ajax è collegato a un sistema KNX tramite il gateway Integreat o IQ Home, gli allarmi Ajax vengono tradotti in telegrammi KNX.
Ajax Hub 2 Plus – catena telecamere ONVIF a KNX
- Aggiungi telecamera ONVIF ad Ajax Hub 2 Plus nell'app Ajax PRO (menu Telecamera → + → ONVIF)
- Abilita avvisi di rilevamento movimento sul canale telecamera in Ajax
- Ajax Hub attiva evento di allarme quando viene rilevato movimento dalla telecamera
- Sistema Ajax collegato al gateway Integreat (RS-485 o IP) → scrittura indirizzo di gruppo KNX su allarme
- Modulo logico KNX reagisce: scena DALI, uscita sirena, notifica BewO
Integrazione Python: onvif-zeep + xknx
Per distribuzioni personalizzate, uno script Python che utilizza la libreria onvif-zeep (client SOAP ONVIF) e xknx (libreria Python KNX/IP) fornisce un ponte diretto con pieno controllo sul filtraggio degli eventi e sulla costruzione dei telegrammi KNX.
Python — Evento di movimento ONVIF a telegramma 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())Installa le dipendenze: pip install onvif-zeep xknx. La libreria onvif-zeep utilizza i file WSDL ufficiali ONVIF — scaricali una volta conpython -m onvif.generate_wsdl. Esegui questo script come servizio systemd su un Raspberry Pi 4 o un piccolo server Linux nel segmento di rete dell'automazione dell'edificio.
Considerazioni sulla latenza
La latenza totale dal movimento fisico alla consegna del telegramma KNX dipende dal metodo di consegna degli eventi. Per l'automazione critica per la sicurezza, scegli la consegna push o MQTT anziché il polling pull-point.
| Segmento | PullMessages (polling 500 ms) | MQTT EventBroker | Push WS-BaseNotification |
|---|---|---|---|
| Analisi video della telecamera | 50–200ms | 50–200ms | 50–200ms |
| Consegna dell'evento al bridge | 0–500ms (intervallo di polling) | ~20ms (broker MQTT) | ~30ms (push HTTP) |
| Elaborazione del bridge (Python) | ~5ms | ~5ms | ~5ms |
| Telegramma KNX/IP al bus | ~20ms | ~20ms | ~20ms |
| Totale tipico | ~600ms | ~295ms | ~255ms |
Per i casi d'uso di allarme intrusione, una latenza totale di 600 ms è accettabile – l'attivazione della sirena d'allarme KNX entro 1 secondo dal rilevamento del movimento è standard nei sistemi di Grado 2 EN 50131. Per l'automazione dell'illuminazione di comfort (rilevamento presenza), 600 ms è impercettibile. ONVIF-to-KNX non è adatto per il rilevamento incendi per la salvaguardia della vita – utilizzare centrali antincendio dedicate con interfacce certificate per questo scopo.
Hai bisogno di eventi telecamera ONVIF cablati nella tua automazione KNX?
Progettiamo quadri KNX con integrazione middleware ONVIF, implementazione Home Assistant o bridge Python e logica di allarme ETS6 completa – commissionati e testati in loco.
Richiedi un preventivo →