Exemple de session
Cette page détaille une session WebSocket réaliste : connexion, dump, login, réception des mises à jour, envoi de commandes et keepalive.
Notation :
→Client → Serveur←Serveur → Client
1. Connexion
Ouvrir une connexion WebSocket vers le serveur.
→ WS connect to ws://server:9624
← (connexion acceptée)2. Demander le dump complet
À envoyer immédiatement après la connexion. Préciser la langue souhaitée pour les labels traduits.
→ {"DU": {"language": "fr"}}Le serveur répond avec d, un message unique contenant tous les modules, leurs propriétés et éléments, la liste de fichiers, les logs, les LOV du contrôleur et les droits d’accès.
← {
"d": {
"grant-client": "1",
"grant-server": "0",
"serverlng": "fr",
"m": {
"MyFocuser": {
"infos": {"label": "MyFocuser", "name": "MyFocuser", "description": ""},
"f": {"name": "default", "changed": false},
"l": {},
"p": {
"parameters": {
"label": "Paramètres", "order": "10",
"level1": "MyFocuser", "level2": "Config",
"status": 0, "permission": 2, "enabled": true,
"showElts": true, "hasGrid": false, "hasGraph": false,
"rule": 0, "badge": false,
"preicon1": "", "preicon2": "", "posticon1": "", "posticon2": "",
"hasprofile": true, "freevalue": "",
"e": {
"exposure": {
"type": "float", "label": "Exposition", "order": "10",
"hint": "", "autoupdate": false, "badge": false,
"directedit": true,
"value": 3.5, "min": 0.1, "max": 30.0, "step": 0.1,
"format": "%.1f", "slider": 0
},
"abortfocus": {
"type": "bool", "label": "Annuler", "order": "90",
"hint": "", "autoupdate": false, "badge": false,
"directedit": true, "value": false
}
}
}
}
}
},
"files": {"folders": [], "files": [], "selectedfolder": ""},
"logs": [],
"controllerdata": {"profiles": {"MyFocuser": ["default"]}},
"lovs": {}
}
}Si grant-client vaut "-1", le serveur exige une authentification avant d’accepter des commandes. Voir étape 3.
S’il vaut "0" ou "1", les commandes sont acceptées directement.
3. Login (si requis)
Nécessaire uniquement si grant-client vaut "-1" dans le dump.
→ {"LO": {"user": "ADMIN", "pw": "admin", "language": "fr"}}En cas de succès, le serveur renvoie un nouveau dump (même format que d) avec les droits mis à jour.
4. Réception des mises à jour en temps réel
Le serveur envoie des mises à jour à tout moment. Aucun polling n’est nécessaire.
Mise à jour des valeurs d’éléments (ea)
Le message le plus fréquent. Le serveur envoie les valeurs courantes dès qu’un changement survient.
← {
"ea": {
"MyFocuser": {
"p": {
"parameters": {
"e": {
"exposure": 3.5,
"abortfocus": false
}
}
}
}
}
}Changement de statut d’une propriété (ps)
Envoyé quand une propriété passe en mode occupé, inactif ou désactivé.
← {
"ps-only property state": {
"MyFocuser": {
"p": {
"parameters": {
"status": 2,
"enabled": true
}
}
}
}
}Valeurs de statut : 0 Veille · 1 OK · 2 Occupé · 3 Erreur
Entrée de log (l)
← {"l": {"d": "2026-06-25T10:14:08.000", "c": "MyFocuser", "t": "Autofocus démarré", "l": 1}}5. Envoyer une commande
Annuler une action en cours
Les éléments avec directedit: true envoient leur valeur immédiatement via SV.
→ {"SV": {"m": {"MyFocuser": {"p": {"actions": {"e": {"abortfocus": true}}}}}}}Le serveur accuse réception en envoyant des mises à jour de statut et de valeurs :
← {"ps-only property state": {"MyFocuser": {"p": {"actions": {"status": 2, "enabled": true}}}}}
← {"ea": {"MyFocuser": {"p": {"actions": {"e": {"abortfocus": false}}}}}}
← {"ps-only property state": {"MyFocuser": {"p": {"actions": {"status": 0, "enabled": true}}}}}Démarrer une action
→ {"SV": {"m": {"MyPlanner": {"p": {"actions": {"e": {"start": true}}}}}}}Envoyer plusieurs valeurs à la fois
Utiliser SA pour les propriétés où directedit est false (édition par formulaire).
→ {
"SA": {
"m": {
"MyFocuser": {
"p": {
"parameters": {
"e": {
"exposure": 5.0,
"gain": 100
}
}
}
}
}
}
}6. Keepalive
Envoyer XX toutes les 30 secondes pour maintenir la connexion active.
→ {"XX": {}}
← {"xx": {}}Séquence complète (résumé)
→ WS connect
→ {"DU": {"language": "fr"}}
← {"d": { ... dump complet ... }}
← {"ea": { ... mises à jour périodiques ... }}
→ {"SV": {"m": {"MyFocuser": {"p": {"actions": {"e": {"abortfocus": true}}}}}}}
← {"ps-...": { ... statut occupé ... }}
← {"ea": { ... valeurs ... }}
← {"ps-...": { ... statut veille ... }}
→ {"XX": {}}
← {"xx": {}}