ConnectorTester : Assurer vos extensions
- Bien démarrer
Présentation de ConnectorTester
ConnectorTester est un outil conçu pour faciliter le développement et la validation des connecteurs Immersive. Il permet de lancer un connecteur en dehors du Hub complet afin de tester, en conditions contrôlées, son comportement face aux handles, aux valeurs échangées et aux commandes (écritures/scènes).
Formation
Le Hub Immersive représente la couche logicielle réalisant l’interface entre l’exposition de données et leur consommation par le Beholder.
Il représente une couche d’indirection universelle entre un consommateur (un player Immersive Beholder par exemple) et des données, quelques soient les protocoles d’accès à celles-ci.

Dans ce tutoriel nous repartons du projet MyCompany.Hub.Connectors.ConnectorToBuildingSensorSimulator décris précédemment ici.
Rôle de l’outil
- Isolation : exécuter un connecteur seul, sans déployer l’ensemble du Hub.
- Validation : vérifier que les handles sont correctement reconnus et enregistrés selon le
Patterndéfini. - Debug : observer les messages d’état (StateMessages) et les notifications publiées par le connecteur.
- Simulation : tester les cycles de vie (Initialize, Connect, Disconnect) et s’assurer que le connecteur réagit comme attendu.
Pourquoi utiliser ConnectorTester ?
Lorsqu’on développe un connecteur, plusieurs éléments doivent être testés avant intégration au Hub :
- Que la méthode
CanHandlefiltre bien les paths qui lui appartiennent. - Que
HandleHandlesenregistre correctement les couples Device/Property. - Que les mises à jour de valeurs soient publiées sous forme de
HandleSnapshot. - Que les écritures (
WriteValue) soient correctement traduites en appels vers la source (REST, OPC UA, etc.).
Avantages
- Réduit le temps de debug en offrant un environnement ciblé.
- Améliore la qualité des connecteurs avant leur intégration dans un Hub réel.
- Facilite la démonstration de connecteurs auprès d’équipes internes ou de clients (preuve de concept rapide).
En résumé, ConnectorTester est le compagnon indispensable pour tout développeur de connecteurs : il joue le rôle de laboratoire où l’on peut expérimenter, valider et affiner ses implémentations avant la mise en production.
Présentation de l'interface
L’interface de ConnectorTester est organisée en plusieurs panneaux qui permettent de piloter les connecteurs, visualiser leurs logs et observer en direct les valeurs des handles. Voici une description par zones principales :

1 : Le panneau des Logs
Le panneau de gauche liste tous les événements émis par le Hub et les connecteurs :
- Time (UTC) : l’horodatage de l’événement.
- Origine : le module ayant produit le message (Hub, BuildingSensorSimulatorConnector, etc.).
- Type : niveau du log (Information, Warning, Error).
- Message : description détaillée (ex. « Registered interests: 101/Floor »).
Il est associé à une toolbar, en haut, qui permet, de gauche à droite, d'effacer les logs et de réinitialiser cette console, ou d'exporter sous la forme d'un fichier la liste des logs courants.
2 : Panneau de session virtuelle
La partie 2 affiche les handles suivis en temps réel. Chaque mise à jour avec :
- Path du handle (ex.
BuildingSensor://101/floor). - Status (Good, Bad, etc.).
- Value : la valeur actuelle.
- ChangeDate : l’horodatage de la donnée telle que fournie par la source.
Deux modes de visions sont possibles et activables via le bouton de gauche de la toolbar associée à ce panneau :
- La vision par handles : Tous les handles gérés sont affichés de manière unitaire et seul leur état ou valeur est mis à jour.
- La vision par évènement : La liste affiche chaque évènement lié à une modification d'un handle sous la forme d'une liste de log.
La première vision donne une vue générale à un instant t de tous les handles. La seconde vision donne une historisation des évolutions valeurs/états des handles.
Il est associé à une toolbar, en haut, qui permet, de gauche à droite, de changer le mode de vision comme nous venons de le voir, d'effacer les logs du mode de vision associé et de réinitialiser cette console, ou d'exporter sous la forme d'un fichier la liste des logs courants de ce panneau.
3 : Liste des connecteurs
Dans le volet droit/supérieur, l’onglet Connectors affiche les connecteurs gérés. Ces connecteurs se trouvent dans le répertoire Connectors situé au même niveau que l'exécutable :
- Chaque connecteur est listé avec son nom et son namespace.
- Un interrupteur ON/OFF permet d’activer/désactiver individuellement le connecteur. On déclenche les méthodes
IConnector.InitializepuisIConnector.Connect. Off déclencheIConnector.Disconnect - L’état du connecteur (vert pour actif) reflète son
Status(Connected, Disconnected, etc.).
Ce panneau est associé à une toolbar, en haut, qui permet, de gauche à droite : de rafraichir la liste des connectors depuis le répertoire Connectors, d'ouvrir le répertoire connector dans l'explorateur Windows.
4 : Panneau des propriétés
En dessous, l’onglet Properties permet de définir des clés/valeurs propres qui seront associées à la propriété HubSettings.Properties de l'instance du Hub de test.
- Chaque ligne correspond à une clé de configuration (ex.
NewKey1,NewKey2). - Les valeurs peuvent être éditées directement.
- Un clic sur « Appliquer » pousse ces propriétés dans les HubSettings.
Ce panneau est associé à une toolbar, en haut, qui permet, de gauche à droite : de rajouter une nouvelle propriété, de supprimer la propriété selectionnée, d'appliquer les propriétés au Hub, d'exporer (sous la forme d'un json) la liste des propriétés du panneau.
5 : Onglets de contexte d'interface
Ces onglets permettent de passer de la gestion du Hub avec ses connectors et ses propriétés à la gestion des handles. Nous y reviendrons dans un instant.
6 : Menu global
Le menu global affiche, sous le titre une toolbar avec deux options :
- Un bouton permettant de cacher les onglets de contexte d'affichage, permettant de donner de la place aux panneaux logs et session virtuelle..
- Un accès à la fenetre "A propos".

7 : Panneau de gestion des Handles
En cliquant sur l'onget correspondant on affiche l'onglet permettant de gérer les Handles. Il sont associées à la propriété HubSettings.PreloadPaths de l'instance du Hub de test.
Le panneau affiche de haut en bas :
- Une toolbar permettant de copier, dans le presse papier le json des Handles gérés par le Hub de test
- Un formulaire avec un champ d'entrée pour rajouter un nouveau handle sous la forme d'un path.
- La liste des paths gérés par le Hub de test.
Chaque path affichés dans cette liste est associé à deux boutons :
- Un bouton permettant de soumettre le path au Hub qui sera ensuite soumi aux Connectors déjà chargés.
- Un bouton permettant de retirer le handle de la liste des handles gérés par le Hub de test.
Utiliser ConnectorTester avec un connecteur
Après avoir compris le rôle de ConnectorTester, voyons comment l’utiliser concrètement pour tester un connecteur. L’outil permet de charger dynamiquement une DLL de connecteur, de l’instancier, puis d’interagir avec lui comme le ferait le Hub.
Téléchargez ces trois projets Visual Studio :
- 📦 BuildingSensorSimulator — v1.0 • 1.8 MB • ZIP
- 🔌 Connector (BuildingSensor) — v1.0 • 8 KB • ZIP
- 🧪 ConnectorTester — v1.0 • 155 KB • ZIP
Téléchargez l'ensemble de ces ressources, lanchez les projets Visual studio liés pour :
- BuildingSensorSimulator : va exposer sous la forme d'un service Rest l'ensemble des devices à superviser.
- ConnectorTester : Permet de lancer l'exécutable de tests des connectors.
Étapes de tests d'un connector
- Ajoutez tout d'abord' à la solution du projet du ConnectorTester le projet MyCompany.Hub.Connectors.ConnectorToBuildingSensorSimulator.

De cette manière vous pourrez compiler et lancer les deux projets en une seule session vous permettant de débugguer plus facilement votre connector.
- Assurez-vous que le projet ConnectorTester est en projet de démarrage.
- Testez la compilation et corrigez les erreurs éventuelles.
- Lancez le ConnectorTester, et, dans le panneaux des connecteurs cliquez sur l'icone
. - Gardez le répertoire ouvert, nous utiliserons l'adresse plus tard.
- Ajoutez au projet ConnectorTester une référence projet vers la dll de votre connector (ici MyCompany.Hub.Connectors.ConnectorToBuildingSensorSimulator).

- Ouvrez les propriétés du projet MyCompany.Hub.Connectors.ConnectorToBuildingSensorSimulator.
- Rendez vous dans la partie Build/Evénements.
- En "Evénements post build" entrez la commande suivante :
copy $(TargetPath) C:\Users\valentin\source\repos\ConnectorTester\bin\Debug\net9.0-windows\Connectors
où C:\Users\valentin\source\repos\ConnectorTester\bin\Debug\net9.0-windows\Connectors est l'adresse du répertoire des connectors lus par le projet ConnectorTester que nous avons ouvert précédemment.

Cette commande va copier la DLL du connector dans le répertoire dédié du ConnectorTester à chaque compilation.
- Compilez maintenant le projet BuildingSensorSimulator.
- Exécutez-le, il doit se lancer sur
https://localhost:7003.

- Compilez maintenant le projet BuildingSensorSimulator.
- Exécutez-le, il doit se lancer sur
https://localhost:7003.
Nous sommes maintenant près à tester notre connector.
- Exécutez-le project ConnectorTester.
- Le panneau de Connectors doit afficher le connector ConnectorToBuildingSensorSimulator

- Placez un breakpoint dans la méthode
OnConnectde la classeBuildingSensorSimulatorConnector.

- Dans le panneau de connector, activez le connector BuildingSensorSimulatorConnector en cliquant sur le Switchbutton associé (qui doit devenir vert) :

Le breakpoint s'active et l'application make l'arret en débuggage :

Nous sommes aptes à débugguer notre connector.
Étapes de tests de handles
Nous partons ici du principe que nous avons lancé notre connector en débuggage depuis le ConnectorTester comme expliqué dans le point précédent.
- Cliquez sur l'onglet Handles après avoir activé le connector BuildingSensorSimulatorConnector.
- Dans le champ de saisie de cet onglet entrez le path tel que nous l'avons défini dans le tutoriel lié (voir point dédié)
BuildingSensor://101/floor

- Effectuez la meme opération pour les paths suivants :
BuildingSensor://201/door BuildingSensor://1/
- Validez avec la touche Enter ou via l'icone
. - Le path étant rajouté à la liste, on peut cliquer sur le bouton de validation
à sa droite pour demander au Hub de le prendre en compte

Les panneau de Logs et celui de Session précisent la bonne prise en charge du Handle :