Beispielsitzung
Diese Seite beschreibt eine realistische WebSocket-Sitzung im Detail: Verbindung, Dump, Login, Empfang von Updates, Senden von Befehlen und Keepalive.
Notation:
→Client → Server←Server → Client
1. Verbindung
Eine WebSocket-Verbindung zum Server öffnen.
→ WS connect to ws://server:9624
← (Verbindung akzeptiert)2. Vollständigen Dump anfordern
Unmittelbar nach der Verbindung zu senden. Die gewünschte Sprache für übersetzte Labels angeben.
→ {"DU": {"language": "fr"}}Der Server antwortet mit d, einer einzigen Nachricht, die alle Module, deren Properties und Elemente, die Dateiliste, die Logs, die Controller-LOVs und die Zugriffsrechte enthält.
← {
"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": {}
}
}Ist grant-client gleich "-1", verlangt der Server eine Authentifizierung, bevor er Befehle akzeptiert. Siehe Schritt 3.
Ist er "0" oder "1", werden Befehle direkt akzeptiert.
3. Login (falls erforderlich)
Nur nötig, wenn grant-client im Dump "-1" ist.
→ {"LO": {"user": "ADMIN", "pw": "admin", "language": "fr"}}Bei Erfolg sendet der Server einen neuen Dump (gleiches Format wie d) mit den aktualisierten Rechten zurück.
4. Empfang von Echtzeit-Updates
Der Server sendet Updates jederzeit. Kein Polling ist erforderlich.
Update der Elementwerte (ea)
Die häufigste Nachricht. Der Server sendet die aktuellen Werte, sobald eine Änderung eintritt.
← {
"ea": {
"MyFocuser": {
"p": {
"parameters": {
"e": {
"exposure": 3.5,
"abortfocus": false
}
}
}
}
}
}Statusänderung einer Property (ps)
Wird gesendet, wenn eine Property in den Zustand busy, idle oder disabled wechselt.
← {
"ps-only property state": {
"MyFocuser": {
"p": {
"parameters": {
"status": 2,
"enabled": true
}
}
}
}
}Statuswerte: 0 Ruhe · 1 OK · 2 Beschäftigt · 3 Fehler
Log-Eintrag (l)
← {"l": {"d": "2026-06-25T10:14:08.000", "c": "MyFocuser", "t": "Autofocus démarré", "l": 1}}5. Einen Befehl senden
Eine laufende Aktion abbrechen
Elemente mit directedit: true senden ihren Wert sofort über SV.
→ {"SV": {"m": {"MyFocuser": {"p": {"actions": {"e": {"abortfocus": true}}}}}}}Der Server bestätigt den Empfang, indem er Status- und Wert-Updates sendet:
← {"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}}}}}Eine Aktion starten
→ {"SV": {"m": {"MyPlanner": {"p": {"actions": {"e": {"start": true}}}}}}}Mehrere Werte gleichzeitig senden
SA für Properties verwenden, bei denen directedit false ist (Bearbeitung über Formular).
→ {
"SA": {
"m": {
"MyFocuser": {
"p": {
"parameters": {
"e": {
"exposure": 5.0,
"gain": 100
}
}
}
}
}
}
}6. Keepalive
Alle 30 Sekunden XX senden, um die Verbindung aktiv zu halten.
→ {"XX": {}}
← {"xx": {}}Vollständige Sequenz (Zusammenfassung)
→ WS connect
→ {"DU": {"language": "fr"}}
← {"d": { ... vollständiger Dump ... }}
← {"ea": { ... periodische Updates ... }}
→ {"SV": {"m": {"MyFocuser": {"p": {"actions": {"e": {"abortfocus": true}}}}}}}
← {"ps-...": { ... Status beschäftigt ... }}
← {"ea": { ... Werte ... }}
← {"ps-...": { ... Status Ruhe ... }}
→ {"XX": {}}
← {"xx": {}}