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üsselBeschreibung
DUVollständigen Dump anfordern
XXHeartbeat / Keepalive
LOAnmeldung
ILSprache ändern
SVWert eines einzelnen Elements senden
SAAlle Elementwerte senden
I1Klick auf preicon1 der Property
I2Klick auf preicon2 der Property
I3Klick auf posticon1 der Property
I4Klick auf posticon2 der Property
J1Klick auf preicon des Elements
J2Klick auf posticon des Elements
PLProfil laden
PSProfil speichern
GCGrid-Zeile erstellen
GUGrid-Zeile aktualisieren
GDGrid-Zeile löschen
GFGrid-Zeile auswählen
GHGrid-Zeile nach oben verschieben
GBGrid-Zeile nach unten verschieben
MLModul laden
MKModul entladen
YAEingebetteten INDI-Server starten
YZEingebetteten INDI-Server stoppen
YLINDI-Treiber laden
YRINDI-Treiber neu laden
YSINDI-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" } }
FeldBeschreibung
languageBevorzugte 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.

BefehlBeschreibung
YAEingebetteten INDI-Server starten
YZEingebetteten INDI-Server stoppen
YLINDI-Treiber laden
YRINDI-Treiber neu laden
YSINDI-Treiber stoppen

Zusammenfassung der Zugriffskontrolle

Grant-Wert des ServersErlaubte 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.