Nachrichten Client → Server
Nachrichtenformat
Jede Nachricht ist ein JSON-Objekt mit genau einem Schlüssel der obersten Ebene, der den Befehl identifiziert. Der Wert ist ein Objekt, dessen Struktur vom Befehl abhängt.
Alle Client-Befehlsschlüssel stehen in GROSSBUCHSTABEN (z. B. DU, SV, SA, GC).
Befehlsübersicht
| Schlüssel | Beschreibung |
|---|---|
DU | Vollständigen Dump anfordern |
XX | Heartbeat / Keepalive |
LO | Anmeldung |
IL | Sprache ändern |
SV | Wert eines einzelnen Elements senden |
SA | Alle Elementwerte senden |
I1 | Klick auf preicon1 der Property |
I2 | Klick auf preicon2 der Property |
I3 | Klick auf posticon1 der Property |
I4 | Klick auf posticon2 der Property |
J1 | Klick auf preicon des Elements |
J2 | Klick auf posticon des Elements |
PL | Profil laden |
PS | Profil speichern |
GC | Grid-Zeile erstellen |
GU | Grid-Zeile aktualisieren |
GD | Grid-Zeile löschen |
GF | Grid-Zeile auswählen |
GH | Grid-Zeile nach oben verschieben |
GB | Grid-Zeile nach unten verschieben |
ML | Modul laden |
MK | Modul entladen |
YA | Eingebetteten INDI-Server starten |
YZ | Eingebetteten INDI-Server stoppen |
YL | INDI-Treiber laden |
YR | INDI-Treiber neu laden |
YS | INDI-Treiber stoppen |
Alle Nachrichten, die ein Modul oder eine Property ansprechen, verwenden folgende Struktur:
{
"COMMANDE": {
"m": {
"NomDuModule": {
"p": {
"nomDeLaPropriété": { ... }
}
}
}
}
}wobei m für modules und p für properties steht.
Sitzungsverwaltung
DU — Vollständigen Dump anfordern
Muss unmittelbar nach der Verbindung gesendet werden. Der Server antwortet mit einer d-Nachricht, die alle Module enthält.
{ "DU": { "language": "fr" } }| Feld | Beschreibung |
|---|---|
language | Bevorzugte Sprache für übersetzte Bezeichnungen ("en", "fr", usw.) |
XX — Heartbeat
Alle 30 Sekunden zu senden, um die Verbindung aktiv zu halten. Der Server antwortet mit xx.
{ "XX": {} }LO — Anmeldung
Erforderlich, wenn der Server die Zugriffskontrolle aktiviert hat (grant-client ist "-1" in der Dump-Antwort).
{
"LO": {
"user": "username",
"pw": "password",
"language": "fr"
}
}IL — Sprache ändern
Ändert die Sprache der übersetzten Bezeichnungen ohne erneute Verbindung.
{ "IL": { "language": "fr" } }Aktualisierung von Property-Werten
SV — Wert eines einzelnen Elements senden
Zu verwenden, wenn directedit beim Element true ist — sendet den Wert eines einzelnen Elements sofort.
{
"SV": {
"m": {
"Focus": {
"p": {
"parameters": {
"e": {
"iterations": 7
}
}
}
}
}
}
}e enthält genau ein Paar Elementname: Wert.
SA — Alle Elementwerte senden
Wird verwendet, um alle editierbaren Elemente einer Property auf einmal zu übermitteln (z. B. aus einem Formular). Wird auch verwendet, wenn directedit false ist.
{
"SA": {
"m": {
"Focus": {
"p": {
"parameters": {
"e": {
"iterations": 7,
"exposure": 3.5,
"active": true
}
}
}
}
}
}
}Icon-Aktionen
Die Icons einer Property (preicon / posticon) lösen Backend-Aktionen aus, etwa das Speichern eines Profils, das Laden eines Profils oder das Starten eines Prozesses. Klick-Ereignisse werden über folgende Befehle gesendet.
I1 — Klick auf preicon1 der Property
{
"I1": {
"m": {
"Focus": {
"p": {
"saveprofile": {}
}
}
}
}
}I2 — Klick auf preicon2 der Property
{
"I2": {
"m": {
"Focus": {
"p": {
"loadprofile": {}
}
}
}
}
}I3 — Klick auf posticon1 der Property
Gleiche Struktur wie I1 / I2.
I4 — Klick auf posticon2 der Property
Gleiche Struktur wie I1 / I2.
J1 — Klick auf preicon des Elements
{
"J1": {
"m": {
"Focus": {
"p": {
"devices": {
"e": {
"myDevice": {}
}
}
}
}
}
}
}J2 — Klick auf posticon des Elements
Gleiche Struktur wie J1.
Profilverwaltung
PL — Profil laden
{
"PL": {
"m": {
"Focus": {
"profile": "myProfile"
}
}
}
}Der Server antwortet mit einer fl-Nachricht (Profil geladen) und sendet anschließend die aktualisierten Property-Werte.
PS — Profil speichern
{
"PS": {
"m": {
"Focus": {
"profile": "myProfile"
}
}
}
}Der Server antwortet mit einer fs-Nachricht (Profil gespeichert).
Grid-Operationen
Grid-Befehle betreffen eine bestimmte Property innerhalb eines Moduls. Alle verwenden die m / p-Struktur.
GC — Grid-Zeile erstellen
Fügt der Grid eine neue Zeile mit den übergebenen Elementwerten hinzu.
{
"GC": {
"m": {
"Sequencer": {
"p": {
"sequence": {
"e": {
"target": "M31",
"exposure": 120,
"count": 10
}
}
}
}
}
}
}Der Server antwortet mit einer gc-Nachricht, die den Index der neuen Zeile bestätigt.
GU — Grid-Zeile aktualisieren
Aktualisiert eine bestimmte Zeile (nullbasierter Index i) mit neuen Elementwerten.
{
"GU": {
"m": {
"Sequencer": {
"p": {
"sequence": {
"i": 1,
"e": {
"target": "M42",
"exposure": 60
}
}
}
}
}
}
}GD — Grid-Zeile löschen
Löscht die Zeile mit Index i (nullbasiert).
{
"GD": {
"m": {
"Sequencer": {
"p": {
"sequence": {
"i": 0
}
}
}
}
}
}GF — Grid-Zeile auswählen
Fordert den Server auf, eine Grid-Zeile in die editierbaren Elemente der Property zu laden (wird verwendet, wenn eine Zeile zur Bearbeitung angeklickt wird).
{
"GF": {
"m": {
"Sequencer": {
"p": {
"sequence": {
"i": 2
}
}
}
}
}
}GH — Grid-Zeile nach oben verschieben
Verschiebt die Zeile mit Index i um eine Position nach oben.
{
"GH": {
"m": {
"Sequencer": {
"p": {
"sequence": {
"i": 3
}
}
}
}
}
}GB — Grid-Zeile nach unten verschieben
Verschiebt die Zeile mit Index i um eine Position nach unten.
{
"GB": {
"m": {
"Sequencer": {
"p": {
"sequence": {
"i": 2
}
}
}
}
}
}Modul-Lebenszyklus
ML — Modul laden
Fordert den Server auf, ein Modul dynamisch zu laden.
{
"ML": {
"m": {
"ModuleName": {}
}
}
}MK — Modul entladen
Fordert den Server auf, ein laufendes Modul zu entladen.
{
"MK": {
"m": {
"ModuleName": {}
}
}
}Steuerung des eingebetteten INDI-Servers
Diese Befehle sind nur verfügbar, wenn der Server über eine eingebettete INDI-Instanz verfügt.
| Befehl | Beschreibung |
|---|---|
YA | Eingebetteten INDI-Server starten |
YZ | Eingebetteten INDI-Server stoppen |
YL | INDI-Treiber laden |
YR | INDI-Treiber neu laden |
YS | INDI-Treiber stoppen |
Zusammenfassung der Zugriffskontrolle
| Grant-Wert des Servers | Erlaubte Befehle |
|---|---|
grant-client: "1" | Alle Befehle |
grant-client: "0" | Nur DU, LO, IL |
grant-client: "-1" | Nur LO (Authentifizierung erforderlich) |
Befehle, die ohne ausreichende Rechte gesendet werden, werden vom Server stillschweigend ignoriert.