Modèle de données

Vue d’ensemble

Toutes les données sont organisées selon une hiérarchie à trois niveaux :

Module
  └─ Property (une ou plusieurs par module)
       └─ Element (un ou plusieurs par propriété)

Connexion et état initial

À la connexion, envoyer une requête DU (voir Client → Serveur).
Le serveur répond avec un message dump complet (d) contenant tous les modules, les données du contrôleur et les listes de fichiers.


Modules

Un module représente un sous-système fonctionnel (mise au point, guidage, caméra allsky, etc.).
Son identifiant est son nom interne (sans espaces).

ChampTypeDescription
infos.labelstringNom affiché du module
infos.namestringNom interne du module
infos.descriptionstringDescription du module
infos.templatestringType de module (ex. "focus", "guider")
propertiesobjectMap nom de propriété → objet propriété
globallovsobjectMap clé LOV → objet LOV (listes de valeurs au niveau module)
profile.namestringNom du profil actif
profile.changedboolIndique si le profil a des modifications non sauvegardées
Format wire

Dans le format JSON sur le réseau, properties est abrégé en p, globallovs en l, et profile en f. Les clients doivent gérer ces clés abrégées.


Propriétés

Une propriété regroupe des éléments liés. Les propriétés sont affichées hiérarchiquement via level1 et level2.

ChampTypeDescription
labelstringLibellé affiché
orderstringOrdre de tri dans le même niveau
level1stringPremier niveau hiérarchique (ex. nom d’onglet)
level2stringDeuxième niveau hiérarchique (ex. nom de groupe)
statusint0 Veille · 1 OK (vert) · 2 Occupé (jaune) · 3 Erreur (rouge)
permissionint0 Lecture seule · 1 Écriture seule · 2 Lecture-écriture
enabledboolIndique si la propriété peut être interagie
badgeboolIndique si la propriété est dans la liste des favoris
preicon1stringIcône avant le libellé (nom d’icône Google Fonts)
preicon2stringDeuxième icône avant le libellé
posticon1stringIcône après le libellé
posticon2stringDeuxième icône après le libellé
showEltsboolIndique si les valeurs des éléments doivent être affichées en ligne
hasprofileboolIndique si la propriété est sauvegardée dans les profils
freevaluestringChamp texte libre arbitraire
ruleintRègle de groupement des éléments bool : 0 UnParmi (radio) · 1 AuPlusUn · 2 Quelconque
elementsobjectMap nom d’élément → objet élément

Propriétés avec grille (quand hasGrid: true) :

ChampTypeDescription
hasGridboolLa propriété contient des données tabulaires
showGridboolLa grille doit être affichée par défaut
gridLimitintNombre maximum de lignes dans la grille
gridheadersstring[]Ordre des colonnes (noms des éléments)
gridtableau de tableauxLignes de la grille ; chaque ligne est un tableau de valeurs dans l’ordre de gridheaders

Propriétés avec graphe (quand hasGraph: true) :

ChampTypeDescription
hasGraphboolLa propriété contient un graphe
graphTypestring"XY" · "DY" (axe temporel) · "PHD" (guidage)
graphParamsobjectConfiguration du graphe
Format wire

Dans le format JSON sur le réseau, elements est abrégé en e.


Éléments

Un élément contient une valeur typée unique. Il existe 11 types d’éléments.

Champs communs (tous les éléments, dans le dump complet)

ChampTypeDescription
typestringType de l’élément (voir liste ci-dessous)
labelstringLibellé affiché
orderstringOrdre de tri au sein de la propriété
hintstringTexte d’aide / infobulle
autoupdateboolIndicateur interne du backend ; ignoré par les clients
badgeboolIndique si l’élément est dans la liste des favoris
directeditbooltrue = envoyer SV à chaque modification ; false = grouper avec SA
preiconstringIcône avant l’élément (optionnel)
posticonstringIcône après l’élément (optionnel)
Mises à jour partielles

Dans les messages de mise à jour ee et ea, les éléments ne contiennent que leur valeur — sans les champs de métadonnées. Les clients doivent conserver les métadonnées du dernier dump complet.


Type : int

ChampTypeDescription
valueintValeur entière courante
minintValeur minimale autorisée
maxintValeur maximale autorisée
stepintPas d’incrément
formatstringChaîne de formatage d’affichage
sliderint0 pas de slider · 1 slider seul · 2 slider + saisie de valeur
listOfValuesobjectOptionnel : map {"clé": "Libellé"} des valeurs autorisées
globallovstringOptionnel : clé référençant un LOV de module ou de contrôleur
lovScopestring"module" ou "controller" — où est défini le globallov
lovConstrainedboolIndique si la valeur doit appartenir au LOV

Type : float

Mêmes champs que int, avec value, min, max, step en virgule flottante.

Type : bool

ChampTypeDescription
valuebooltrue ou false

Type : string

ChampTypeDescription
valuestringValeur texte
listOfValuesobjectOptionnel : map {"clé": "Libellé"} des valeurs autorisées
globallovstringOptionnel : clé référençant un LOV
lovScopestring"module" ou "controller"

Type : date

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

Type : time

ChampTypeDescription
valueobject{"hh": int, "mm": int, "ss": int, "ms": int}
usemsboolIndique si les millisecondes doivent être affichées

Type : datetime

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

Type : img

Le champ value est un objet contenant les métadonnées de l’image :

ChampTypeDescription
urljpegstringChemin relatif vers l’image JPEG (à utiliser avec l’URL de base /ostmedia/)
urlfitsstringChemin relatif vers le fichier FITS
urlthumbnailstringChemin relatif vers la vignette
urloverlaystringChemin relatif vers l’image de superposition
channelsintNombre de canaux de couleur
width / heightintDimensions de l’image en pixels
snrfloatRapport signal sur bruit
hfravgfloatHFR moyen (rayon à mi-flux) des étoiles détectées
starsintNombre d’étoiles détectées
issolvedboolIndique si la résolution de champ a réussi
solverra / solverdefloatCoordonnées AR/Déc résolues
solverorientationfloatAngle de rotation du champ résolu
min / max / mean / median / stddevfloat[]Statistiques par canal
histogramarrayDonnées d’histogramme par canal
alternatesstring[]Optionnel : versions alternatives de l’image
URLs media

Tous les chemins image/vidéo sont relatifs. Préfixer avec http(s)://hostname/ostmedia/ pour obtenir l’URL complète.
Exemple : "urljpeg": "Focus/frame.jpeg"http://hostname/ostmedia/Focus/frame.jpeg

Type : video

ChampTypeDescription
valueobject{"url": "chemin/relatif/vers/video.mp4"}

Dans les messages de mise à jour partielle (ea), l’élément vidéo peut contenir url directement au niveau de l’élément plutôt qu’imbriqué dans value.

Type : light

ChampTypeDescription
valueint0 Veille · 1 OK · 2 Avertissement · 3 Erreur

Type : prg

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

Type : message (non encore implémenté dans le backend actuel)

Réservé pour l’affichage de messages/logs.


Listes de valeurs (LOV)

Les LOV fournissent un ensemble de valeurs autorisées pour les éléments de type int, float et string.

LOV locale — intégrée dans l’élément :

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

LOV globale — référencée par clé :

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

Le LOV lui-même est défini au niveau module (globallovs) ou contrôleur (controllerlovs) :

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

LOV intégrés du contrôleur (toujours disponibles) :

CléContenu
loadedModulesTous les modules chargés : {nomModule: libellé}
loadedModules-<template>Modules filtrés par type (ex. loadedModules-focus)
profiles-<template>Profils disponibles pour un type de module

Contrôle d’accès

La réponse dump contient les valeurs grant-server et grant-client :

ValeurSignification
"1"Accès complet lecture-écriture
"0"Lecture seule
"-1"Accès refusé (authentification requise)

Si grant-client vaut "-1", aucune donnée de module n’est envoyée. Utiliser le message LO (login) pour s’authentifier.