FEAT: Découverte mDNS/HomeKit — probe multicast _hap._tcp (agent) #62

Closed
opened 2026-08-11 21:53:18 +02:00 by nonobis · 0 comments
Owner

Contexte

Strix (pkg/probe/mdns.go) et go2rtc détectent les caméras et sonnettes HomeKit par mDNS multicast _hap._tcp.local. (UDP 224.0.0.251:5353) avec filtrage catégorie camera (ci=17) / doorbell (ci=18). Heimdall a les champs HomeKitName/HomeKitDeviceId/HomeKitModel dans AgentDiscoveredDevice mais aucun code ne les remplit jamais : le central gère le type HomeKit dans ClassifyAgentDevice, mais il ne reçoit aucune donnée → aucun device HomeKit détecté.

État actuel

  • NetworkCameraScanner.ProbeHostAsync crée les devices avec HomeKitName: null, HomeKitDeviceId: null, HomeKitModel: null
  • Aucun probe mDNS n'existe (ni multicast global, ni unicast)
  • Le champ AgentDiscoveredDevice.HomeKit* est toujours null → ClassifyAgentDevice HomeKit inaccessible

À faire

  1. Transposer QueryHAP (Strix pkg/probe/mdns.go) en C# :
    • Construire un paquet DNS brut (header : ID aléatoire, QDCOUNT=1 ; question PTR _hap._tcp.local., QTYPE=PTR, QCLASS=IN)
    • Envoyer en multicast UDP sur 224.0.0.251:5353 (multicast global, en parallèle du scan comme le WS-Discovery)
    • Écouter ~2 s (timeout explicite Task.WhenAny — jamais Socket.ReceiveTimeout async, cf. 491a253)
    • Parser les réponses : PTR (nom d'instance), SRV (port), TXT (ci=catégorie, id=deviceID, md=modèle, sf=status flags)
  2. Filtrer : garder ci=17 (camera) et ci=18 (doorbell) ; sf=0 = non apparié (Strix garde camera/doorbell)
  3. Intégrer : un seul probe multicast global par scan (comme DiscoverOnvifMulticastAsync), dédup par IP, enrichir HomeKitName/HomeKitDeviceId/HomeKitModel + Type HomeKit
  4. Remplir les champs dans le device final (le DTO le supporte déjà)

Critères d'acceptation

  • Une caméra/sonnette HomeKit sur le LAN est détectée avec name/deviceId/model
  • Elle est classée HomeKit dans la liste des découvertes
  • Le flux HomeKit est testé (dépend des tickets screenshots/multi-protocoles)
  • Aucun hang du scan (timeout explicite)

Fichiers concernés

  • src/Heimdall.Agent/Services/NetworkCameraScanner.cs (+ service mDNS dédié si besoin)
  • src/Heimdall.Application/DTOs/SiteCredentialDto.cs (champs déjà présents)

Référence

  • Strix pkg/probe/mdns.go (QueryHAP, catégories ci=17/18, sf)
  • go2rtc internal/homekit/homekit.go (mDNS ServiceHAP)
  • ONVIF/HAP : catégories HomeKit Accessory Protocol
## Contexte Strix (pkg/probe/mdns.go) et go2rtc détectent les caméras et sonnettes **HomeKit** par mDNS multicast `_hap._tcp.local.` (UDP 224.0.0.251:5353) avec filtrage catégorie camera (ci=17) / doorbell (ci=18). Heimdall a les champs `HomeKitName`/`HomeKitDeviceId`/`HomeKitModel` dans `AgentDiscoveredDevice` mais **aucun code ne les remplit jamais** : le central gère le type HomeKit dans `ClassifyAgentDevice`, mais il ne reçoit aucune donnée → aucun device HomeKit détecté. ## État actuel - `NetworkCameraScanner.ProbeHostAsync` crée les devices avec `HomeKitName: null, HomeKitDeviceId: null, HomeKitModel: null` - Aucun probe mDNS n'existe (ni multicast global, ni unicast) - Le champ `AgentDiscoveredDevice.HomeKit*` est toujours null → `ClassifyAgentDevice` HomeKit inaccessible ## À faire 1. Transposer `QueryHAP` (Strix pkg/probe/mdns.go) en C# : - Construire un paquet DNS brut (header : ID aléatoire, QDCOUNT=1 ; question PTR `_hap._tcp.local.`, QTYPE=PTR, QCLASS=IN) - Envoyer en multicast UDP sur 224.0.0.251:5353 (multicast global, en parallèle du scan comme le WS-Discovery) - Écouter ~2 s (timeout explicite `Task.WhenAny` — jamais `Socket.ReceiveTimeout` async, cf. 491a253) - Parser les réponses : PTR (nom d'instance), SRV (port), TXT (`ci`=catégorie, `id`=deviceID, `md`=modèle, `sf`=status flags) 2. Filtrer : garder `ci=17` (camera) et `ci=18` (doorbell) ; `sf=0` = non apparié (Strix garde camera/doorbell) 3. Intégrer : un seul probe multicast global par scan (comme `DiscoverOnvifMulticastAsync`), dédup par IP, enrichir `HomeKitName`/`HomeKitDeviceId`/`HomeKitModel` + Type HomeKit 4. Remplir les champs dans le device final (le DTO le supporte déjà) ## Critères d'acceptation - Une caméra/sonnette HomeKit sur le LAN est détectée avec name/deviceId/model - Elle est classée **HomeKit** dans la liste des découvertes - Le flux HomeKit est testé (dépend des tickets screenshots/multi-protocoles) - Aucun hang du scan (timeout explicite) ## Fichiers concernés - `src/Heimdall.Agent/Services/NetworkCameraScanner.cs` (+ service mDNS dédié si besoin) - `src/Heimdall.Application/DTOs/SiteCredentialDto.cs` (champs déjà présents) ## Référence - Strix `pkg/probe/mdns.go` (QueryHAP, catégories ci=17/18, sf) - go2rtc `internal/homekit/homekit.go` (mDNS ServiceHAP) - ONVIF/HAP : catégories HomeKit Accessory Protocol
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#62
No description provided.