Datenmodell

Überblick

Alle Daten sind in einer dreistufigen Hierarchie organisiert:

Module
  └─ Property (eine oder mehrere pro Modul)
       └─ Element (eines oder mehrere pro Property)

Verbindung und Anfangszustand

Bei der Verbindung eine DU-Anfrage senden (siehe Client → Server).
Der Server antwortet mit einer vollständigen Dump-Nachricht (d), die alle Module, die Controller-Daten und die Dateilisten enthält.


Module

Ein Modul repräsentiert ein funktionales Subsystem (Fokussierung, Guiding, Allsky-Kamera usw.).
Seine Kennung ist sein interner Name (ohne Leerzeichen).

FeldTypBeschreibung
infos.labelstringAngezeigter Name des Moduls
infos.namestringInterner Name des Moduls
infos.descriptionstringBeschreibung des Moduls
infos.templatestringModultyp (z. B. "focus", "guider")
propertiesobjectMap von Property-Name → Property-Objekt
globallovsobjectMap von LOV-Schlüssel → LOV-Objekt (Wertelisten auf Modulebene)
profile.namestringName des aktiven Profils
profile.changedboolZeigt an, ob das Profil nicht gespeicherte Änderungen hat
Wire-Format

Im JSON-Format über das Netzwerk wird properties zu p, globallovs zu l und profile zu f abgekürzt. Clients müssen diese abgekürzten Schlüssel verarbeiten können.


Properties

Eine Property gruppiert zusammengehörige Elemente. Properties werden hierarchisch über level1 und level2 angezeigt.

FeldTypBeschreibung
labelstringAngezeigte Bezeichnung
orderstringSortierreihenfolge innerhalb derselben Ebene
level1stringErste Hierarchieebene (z. B. Tab-Name)
level2stringZweite Hierarchieebene (z. B. Gruppenname)
statusint0 Ruhe · 1 OK (grün) · 2 Beschäftigt (gelb) · 3 Fehler (rot)
permissionint0 Nur Lesen · 1 Nur Schreiben · 2 Lesen-Schreiben
enabledboolZeigt an, ob mit der Property interagiert werden kann
badgeboolZeigt an, ob die Property in der Favoritenliste steht
preicon1stringIcon vor der Bezeichnung (Name eines Google-Fonts-Icons)
preicon2stringZweites Icon vor der Bezeichnung
posticon1stringIcon nach der Bezeichnung
posticon2stringZweites Icon nach der Bezeichnung
showEltsboolZeigt an, ob die Elementwerte inline angezeigt werden sollen
hasprofileboolZeigt an, ob die Property in Profilen gespeichert wird
freevaluestringBeliebiges Freitextfeld
ruleintGruppierungsregel für bool-Elemente: 0 GenauEines (Radio) · 1 HöchstensEines · 2 Beliebig
elementsobjectMap von Elementname → Element-Objekt

Properties mit Grid (wenn hasGrid: true):

FeldTypBeschreibung
hasGridboolDie Property enthält tabellarische Daten
showGridboolDie Grid soll standardmäßig angezeigt werden
gridLimitintMaximale Anzahl an Zeilen in der Grid
gridheadersstring[]Spaltenreihenfolge (Elementnamen)
gridArray von ArraysZeilen der Grid; jede Zeile ist ein Array von Werten in der Reihenfolge von gridheaders

Properties mit Graph (wenn hasGraph: true):

FeldTypBeschreibung
hasGraphboolDie Property enthält einen Graph
graphTypestring"XY" · "DY" (Zeitachse) · "PHD" (Guiding)
graphParamsobjectKonfiguration des Graphen
Wire-Format

Im JSON-Format über das Netzwerk wird elements zu e abgekürzt.


Elemente

Ein Element enthält einen einzigen typisierten Wert. Es gibt 11 Elementtypen.

Gemeinsame Felder (alle Elemente, im vollständigen Dump)

FeldTypBeschreibung
typestringTyp des Elements (siehe Liste unten)
labelstringAngezeigte Bezeichnung
orderstringSortierreihenfolge innerhalb der Property
hintstringHilfetext / Tooltip
autoupdateboolInterner Backend-Indikator; von Clients ignoriert
badgeboolZeigt an, ob das Element in der Favoritenliste steht
directeditbooltrue = bei jeder Änderung SV senden; false = mit SA gruppieren
preiconstringIcon vor dem Element (optional)
posticonstringIcon nach dem Element (optional)
Teilweise Updates

In den Update-Nachrichten ee und ea enthalten Elemente nur ihren Wert — ohne die Metadatenfelder. Clients müssen die Metadaten des letzten vollständigen Dumps behalten.


Typ: int

FeldTypBeschreibung
valueintAktueller Ganzzahlwert
minintMinimal erlaubter Wert
maxintMaximal erlaubter Wert
stepintSchrittweite
formatstringAnzeige-Formatierungsstring
sliderint0 kein Slider · 1 nur Slider · 2 Slider + Werteingabe
listOfValuesobjectOptional: Map {"Schlüssel": "Bezeichnung"} der erlaubten Werte
globallovstringOptional: Schlüssel, der auf eine Modul- oder Controller-LOV verweist
lovScopestring"module" oder "controller" — wo die globallov definiert ist
lovConstrainedboolZeigt an, ob der Wert zur LOV gehören muss

Typ: float

Gleiche Felder wie int, mit value, min, max, step als Gleitkommazahl.

Typ: bool

FeldTypBeschreibung
valuebooltrue oder false

Typ: string

FeldTypBeschreibung
valuestringTextwert
listOfValuesobjectOptional: Map {"Schlüssel": "Bezeichnung"} der erlaubten Werte
globallovstringOptional: Schlüssel, der auf eine LOV verweist
lovScopestring"module" oder "controller"

Typ: date

FeldTypBeschreibung
valueobject{"year": int, "month": int (1-12), "day": int (1-31)}

Typ: time

FeldTypBeschreibung
valueobject{"hh": int, "mm": int, "ss": int, "ms": int}
usemsboolZeigt an, ob Millisekunden angezeigt werden sollen

Typ: datetime

FeldTypBeschreibung
valueobject{"year": int, "month": int, "day": int, "hh": int, "mm": int, "ss": int, "ms": int}

Typ: img

Das Feld value ist ein Objekt mit den Bild-Metadaten:

FeldTypBeschreibung
urljpegstringRelativer Pfad zum JPEG-Bild (mit der Basis-URL /ostmedia/ zu verwenden)
urlfitsstringRelativer Pfad zur FITS-Datei
urlthumbnailstringRelativer Pfad zum Thumbnail
urloverlaystringRelativer Pfad zum Overlay-Bild
channelsintAnzahl der Farbkanäle
width / heightintBildabmessungen in Pixeln
snrfloatSignal-Rausch-Verhältnis
hfravgfloatDurchschnittlicher HFR (Half-Flux-Radius) der erkannten Sterne
starsintAnzahl der erkannten Sterne
issolvedboolZeigt an, ob die Plate-Solving-Auflösung erfolgreich war
solverra / solverdefloatAufgelöste RA/Dec-Koordinaten
solverorientationfloatRotationswinkel des aufgelösten Feldes
min / max / mean / median / stddevfloat[]Statistiken pro Kanal
histogramarrayHistogrammdaten pro Kanal
alternatesstring[]Optional: alternative Versionen des Bildes
Media-URLs

Alle Bild-/Video-Pfade sind relativ. Mit http(s)://hostname/ostmedia/ voranstellen, um die vollständige URL zu erhalten.
Beispiel: "urljpeg": "Focus/frame.jpeg"http://hostname/ostmedia/Focus/frame.jpeg

Typ: video

FeldTypBeschreibung
valueobject{"url": "relativer/pfad/zum/video.mp4"}

In Nachrichten mit teilweisem Update (ea) kann das Video-Element url direkt auf Elementebene enthalten, statt in value verschachtelt.

Typ: light

FeldTypBeschreibung
valueint0 Ruhe · 1 OK · 2 Warnung · 3 Fehler

Typ: prg

FeldTypBeschreibung
valueobject{"value": float (0–100), "dynlabel": string}
prgtypestring"bar" oder "spinner"

Typ: message (im aktuellen Backend noch nicht implementiert)

Reserviert für die Anzeige von Nachrichten/Logs.


Wertelisten (LOV)

LOVs stellen eine Menge erlaubter Werte für Elemente vom Typ int, float und string bereit.

Lokale LOV — direkt im Element eingebettet:

"listOfValues": {
  "1": "Option Un",
  "2": "Option Deux"
}

Globale LOV — per Schlüssel referenziert:

"globallov": "myCameraModels",
"lovScope": "module"

Die LOV selbst wird auf Modulebene (globallovs) oder Controller-Ebene (controllerlovs) definiert:

"myCameraModels": {
  "label": "Modèles de caméra",
  "type": "string",
  "values": {
    "ASI294MC": "ZWO ASI 294 MC",
    "ASI533MC": "ZWO ASI 533 MC"
  }
}

Eingebaute Controller-LOVs (immer verfügbar):

SchlüsselInhalt
loadedModulesAlle geladenen Module: {Modulname: Bezeichnung}
loadedModules-<template>Module gefiltert nach Typ (z. B. loadedModules-focus)
profiles-<template>Verfügbare Profile für einen Modultyp

Zugriffskontrolle

Die Dump-Antwort enthält die Werte grant-server und grant-client:

WertBedeutung
"1"Vollständiger Lese-Schreib-Zugriff
"0"Nur Lesen
"-1"Zugriff verweigert (Authentifizierung erforderlich)

Ist grant-client gleich "-1", werden keine Moduldaten gesendet. Die LO-Nachricht (Login) zur Authentifizierung verwenden.