Modello dati

Panoramica

Tutti i dati sono organizzati secondo una gerarchia a tre livelli:

Module
  └─ Property (una o più per modulo)
       └─ Element (uno o più per proprietà)

Connessione e stato iniziale

Alla connessione, inviare una richiesta DU (vedi Client → Server).
Il server risponde con un messaggio dump completo (d) contenente tutti i moduli, i dati del controller e gli elenchi di file.


Moduli

Un modulo rappresenta un sottosistema funzionale (messa a fuoco, guida, camera allsky, ecc.).
Il suo identificatore è il suo nome interno (senza spazi).

CampoTipoDescrizione
infos.labelstringNome visualizzato del modulo
infos.namestringNome interno del modulo
infos.descriptionstringDescrizione del modulo
infos.templatestringTipo di modulo (es. "focus", "guider")
propertiesobjectMappa nome proprietà → oggetto proprietà
globallovsobjectMappa chiave LOV → oggetto LOV (liste di valori a livello modulo)
profile.namestringNome del profilo attivo
profile.changedboolIndica se il profilo ha modifiche non salvate
Formato wire

Nel formato JSON di rete, properties è abbreviato in p, globallovs in l, e profile in f. I client devono gestire queste chiavi abbreviate.


Proprietà

Una proprietà raggruppa elementi collegati. Le proprietà sono mostrate in modo gerarchico tramite level1 e level2.

CampoTipoDescrizione
labelstringEtichetta visualizzata
orderstringOrdine di ordinamento allo stesso livello
level1stringPrimo livello gerarchico (es. nome della scheda)
level2stringSecondo livello gerarchico (es. nome del gruppo)
statusint0 Standby · 1 OK (verde) · 2 Occupato (giallo) · 3 Errore (rosso)
permissionint0 Solo lettura · 1 Solo scrittura · 2 Lettura-scrittura
enabledboolIndica se è possibile interagire con la proprietà
badgeboolIndica se la proprietà è nell’elenco dei preferiti
preicon1stringIcona prima dell’etichetta (nome icona Google Fonts)
preicon2stringSeconda icona prima dell’etichetta
posticon1stringIcona dopo l’etichetta
posticon2stringSeconda icona dopo l’etichetta
showEltsboolIndica se i valori degli elementi devono essere mostrati in linea
hasprofileboolIndica se la proprietà è salvata nei profili
freevaluestringCampo di testo libero arbitrario
ruleintRegola di raggruppamento degli elementi bool: 0 UnoTra (radio) · 1 AlPiùUno · 2 Qualsiasi
elementsobjectMappa nome elemento → oggetto elemento

Proprietà con griglia (quando hasGrid: true):

CampoTipoDescrizione
hasGridboolLa proprietà contiene dati tabulari
showGridboolLa griglia deve essere mostrata di default
gridLimitintNumero massimo di righe nella griglia
gridheadersstring[]Ordine delle colonne (nomi degli elementi)
gridarray di arrayRighe della griglia; ogni riga è un array di valori nell’ordine di gridheaders

Proprietà con grafico (quando hasGraph: true):

CampoTipoDescrizione
hasGraphboolLa proprietà contiene un grafico
graphTypestring"XY" · "DY" (asse temporale) · "PHD" (guida)
graphParamsobjectConfigurazione del grafico
Formato wire

Nel formato JSON di rete, elements è abbreviato in e.


Elementi

Un elemento contiene un unico valore tipizzato. Esistono 11 tipi di elementi.

Campi comuni (tutti gli elementi, nel dump completo)

CampoTipoDescrizione
typestringTipo dell’elemento (vedi elenco più sotto)
labelstringEtichetta visualizzata
orderstringOrdine di ordinamento all’interno della proprietà
hintstringTesto di aiuto / tooltip
autoupdateboolIndicatore interno del backend; ignorato dai client
badgeboolIndica se l’elemento è nell’elenco dei preferiti
directeditbooltrue = inviare SV a ogni modifica; false = raggruppare con SA
preiconstringIcona prima dell’elemento (opzionale)
posticonstringIcona dopo l’elemento (opzionale)
Aggiornamenti parziali

Nei messaggi di aggiornamento ee e ea, gli elementi contengono solo il loro valore — senza i campi di metadati. I client devono conservare i metadati dell’ultimo dump completo.


Tipo: int

CampoTipoDescrizione
valueintValore intero corrente
minintValore minimo consentito
maxintValore massimo consentito
stepintPasso di incremento
formatstringStringa di formattazione per la visualizzazione
sliderint0 nessuno slider · 1 solo slider · 2 slider + inserimento valore
listOfValuesobjectOpzionale: mappa {"chiave": "Etichetta"} dei valori consentiti
globallovstringOpzionale: chiave che fa riferimento a un LOV di modulo o di controller
lovScopestring"module" o "controller" — dove è definito il globallov
lovConstrainedboolIndica se il valore deve appartenere al LOV

Tipo: float

Stessi campi di int, con value, min, max, step in virgola mobile.

Tipo: bool

CampoTipoDescrizione
valuebooltrue o false

Tipo: string

CampoTipoDescrizione
valuestringValore testo
listOfValuesobjectOpzionale: mappa {"chiave": "Etichetta"} dei valori consentiti
globallovstringOpzionale: chiave che fa riferimento a un LOV
lovScopestring"module" o "controller"

Tipo: date

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

Tipo: time

CampoTipoDescrizione
valueobject{"hh": int, "mm": int, "ss": int, "ms": int}
usemsboolIndica se i millisecondi devono essere mostrati

Tipo: datetime

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

Tipo: img

Il campo value è un oggetto contenente i metadati dell’immagine:

CampoTipoDescrizione
urljpegstringPercorso relativo verso l’immagine JPEG (da usare con l’URL di base /ostmedia/)
urlfitsstringPercorso relativo verso il file FITS
urlthumbnailstringPercorso relativo verso la miniatura
urloverlaystringPercorso relativo verso l’immagine di sovrapposizione
channelsintNumero di canali colore
width / heightintDimensioni dell’immagine in pixel
snrfloatRapporto segnale/rumore
hfravgfloatHFR medio (raggio a mezzo flusso) delle stelle rilevate
starsintNumero di stelle rilevate
issolvedboolIndica se la risoluzione di campo è riuscita
solverra / solverdefloatCoordinate RA/DEC risolte
solverorientationfloatAngolo di rotazione del campo risolto
min / max / mean / median / stddevfloat[]Statistiche per canale
histogramarrayDati dell’istogramma per canale
alternatesstring[]Opzionale: versioni alternative dell’immagine
URL media

Tutti i percorsi immagine/video sono relativi. Aggiungere il prefisso http(s)://hostname/ostmedia/ per ottenere l’URL completo.
Esempio: "urljpeg": "Focus/frame.jpeg"http://hostname/ostmedia/Focus/frame.jpeg

Tipo: video

CampoTipoDescrizione
valueobject{"url": "percorso/relativo/verso/video.mp4"}

Nei messaggi di aggiornamento parziale (ea), l’elemento video può contenere url direttamente a livello dell’elemento invece che annidato in value.

Tipo: light

CampoTipoDescrizione
valueint0 Standby · 1 OK · 2 Avviso · 3 Errore

Tipo: prg

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

Tipo: message (non ancora implementato nel backend attuale)

Riservato per la visualizzazione di messaggi/log.


Liste di valori (LOV)

I LOV forniscono un insieme di valori consentiti per gli elementi di tipo int, float e string.

LOV locale — integrata nell’elemento:

"listOfValues": {
  "1": "Opzione Uno",
  "2": "Opzione Due"
}

LOV globale — referenziata per chiave:

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

Il LOV stesso è definito a livello modulo (globallovs) o controller (controllerlovs):

"myCameraModels": {
  "label": "Modelli di camera",
  "type": "string",
  "values": {
    "ASI294MC": "ZWO ASI 294 MC",
    "ASI533MC": "ZWO ASI 533 MC"
  }
}

LOV integrati del controller (sempre disponibili):

ChiaveContenuto
loadedModulesTutti i moduli caricati: {nomeModulo: etichetta}
loadedModules-<template>Moduli filtrati per tipo (es. loadedModules-focus)
profiles-<template>Profili disponibili per un tipo di modulo

Controllo degli accessi

La risposta dump contiene i valori grant-server e grant-client:

ValoreSignificato
"1"Accesso completo lettura-scrittura
"0"Solo lettura
"-1"Accesso negato (autenticazione richiesta)

Se grant-client vale "-1", non viene inviato alcun dato di modulo. Usare il messaggio LO (login) per autenticarsi.