Modelo de datos

Visión general

Todos los datos se organizan según una jerarquía de tres niveles:

Module
  └─ Property (uno o varios por módulo)
       └─ Element (uno o varios por propiedad)

Conexión y estado inicial

Al conectarse, enviar una petición DU (ver Client → Server).
El servidor responde con un mensaje dump completo (d) que contiene todos los módulos, los datos del controlador y las listas de archivos.


Módulos

Un módulo representa un subsistema funcional (enfoque, guiado, cámara allsky, etc.).
Su identificador es su nombre interno (sin espacios).

CampoTipoDescripción
infos.labelstringNombre mostrado del módulo
infos.namestringNombre interno del módulo
infos.descriptionstringDescripción del módulo
infos.templatestringTipo de módulo (ej. "focus", "guider")
propertiesobjectMapa nombre de propiedad → objeto propiedad
globallovsobjectMapa clave LOV → objeto LOV (listas de valores a nivel módulo)
profile.namestringNombre del perfil activo
profile.changedboolIndica si el perfil tiene modificaciones no guardadas
Formato wire

En el formato JSON en la red, properties se abrevia como p, globallovs como l, y profile como f. Los clientes deben gestionar estas claves abreviadas.


Propiedades

Una propiedad agrupa elementos relacionados. Las propiedades se muestran jerárquicamente mediante level1 y level2.

CampoTipoDescripción
labelstringEtiqueta mostrada
orderstringOrden de clasificación en el mismo nivel
level1stringPrimer nivel jerárquico (ej. nombre de pestaña)
level2stringSegundo nivel jerárquico (ej. nombre de grupo)
statusint0 Reposo · 1 OK (verde) · 2 Ocupado (amarillo) · 3 Error (rojo)
permissionint0 Solo lectura · 1 Solo escritura · 2 Lectura-escritura
enabledboolIndica si se puede interactuar con la propiedad
badgeboolIndica si la propiedad está en la lista de favoritos
preicon1stringIcono antes de la etiqueta (nombre de icono Google Fonts)
preicon2stringSegundo icono antes de la etiqueta
posticon1stringIcono después de la etiqueta
posticon2stringSegundo icono después de la etiqueta
showEltsboolIndica si los valores de los elementos deben mostrarse en línea
hasprofileboolIndica si la propiedad se guarda en los perfiles
freevaluestringCampo de texto libre arbitrario
ruleintRegla de agrupación de los elementos bool: 0 UnoDeEntre (radio) · 1 AloSumoUno · 2 Cualquiera
elementsobjectMapa nombre de elemento → objeto elemento

Propiedades con cuadrícula (cuando hasGrid: true):

CampoTipoDescripción
hasGridboolLa propiedad contiene datos tabulares
showGridboolLa cuadrícula debe mostrarse por defecto
gridLimitintNúmero máximo de filas en la cuadrícula
gridheadersstring[]Orden de las columnas (nombres de los elementos)
gridarray de arraysFilas de la cuadrícula; cada fila es un array de valores en el orden de gridheaders

Propiedades con gráfico (cuando hasGraph: true):

CampoTipoDescripción
hasGraphboolLa propiedad contiene un gráfico
graphTypestring"XY" · "DY" (eje temporal) · "PHD" (guiado)
graphParamsobjectConfiguración del gráfico
Formato wire

En el formato JSON en la red, elements se abrevia como e.


Elementos

Un elemento contiene un valor tipado único. Existen 11 tipos de elementos.

Campos comunes (todos los elementos, en el dump completo)

CampoTipoDescripción
typestringTipo del elemento (ver lista abajo)
labelstringEtiqueta mostrada
orderstringOrden de clasificación dentro de la propiedad
hintstringTexto de ayuda / tooltip
autoupdateboolIndicador interno del backend; ignorado por los clientes
badgeboolIndica si el elemento está en la lista de favoritos
directeditbooltrue = enviar SV en cada modificación; false = agrupar con SA
preiconstringIcono antes del elemento (opcional)
posticonstringIcono después del elemento (opcional)
Actualizaciones parciales

En los mensajes de actualización ee y ea, los elementos contienen solo su valor — sin los campos de metadatos. Los clientes deben conservar los metadatos del último dump completo.


Tipo: int

CampoTipoDescripción
valueintValor entero actual
minintValor mínimo permitido
maxintValor máximo permitido
stepintPaso de incremento
formatstringCadena de formato de visualización
sliderint0 sin slider · 1 solo slider · 2 slider + entrada de valor
listOfValuesobjectOpcional: mapa {"clave": "Etiqueta"} de los valores permitidos
globallovstringOpcional: clave que referencia un LOV de módulo o de controlador
lovScopestring"module" o "controller" — dónde se define el globallov
lovConstrainedboolIndica si el valor debe pertenecer al LOV

Tipo: float

Mismos campos que int, con value, min, max, step en coma flotante.

Tipo: bool

CampoTipoDescripción
valuebooltrue o false

Tipo: string

CampoTipoDescripción
valuestringValor de texto
listOfValuesobjectOpcional: mapa {"clave": "Etiqueta"} de los valores permitidos
globallovstringOpcional: clave que referencia un LOV
lovScopestring"module" o "controller"

Tipo: date

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

Tipo: time

CampoTipoDescripción
valueobject{"hh": int, "mm": int, "ss": int, "ms": int}
usemsboolIndica si deben mostrarse los milisegundos

Tipo: datetime

CampoTipoDescripción
valueobject{"year": int, "month": int, "day": int, "hh": int, "mm": int, "ss": int, "ms": int}

Tipo: img

El campo value es un objeto que contiene los metadatos de la imagen:

CampoTipoDescripción
urljpegstringRuta relativa a la imagen JPEG (a usar con la URL base /ostmedia/)
urlfitsstringRuta relativa al archivo FITS
urlthumbnailstringRuta relativa a la miniatura
urloverlaystringRuta relativa a la imagen de superposición
channelsintNúmero de canales de color
width / heightintDimensiones de la imagen en píxeles
snrfloatRelación señal/ruido
hfravgfloatHFR medio (radio a mitad de flujo) de las estrellas detectadas
starsintNúmero de estrellas detectadas
issolvedboolIndica si la resolución de campo tuvo éxito
solverra / solverdefloatCoordenadas AR/Dec resueltas
solverorientationfloatÁngulo de rotación del campo resuelto
min / max / mean / median / stddevfloat[]Estadísticas por canal
histogramarrayDatos de histograma por canal
alternatesstring[]Opcional: versiones alternativas de la imagen
URLs de medios

Todas las rutas de imagen/vídeo son relativas. Añadir como prefijo http(s)://hostname/ostmedia/ para obtener la URL completa.
Ejemplo: "urljpeg": "Focus/frame.jpeg"http://hostname/ostmedia/Focus/frame.jpeg

Tipo: video

CampoTipoDescripción
valueobject{"url": "ruta/relativa/al/video.mp4"}

En los mensajes de actualización parcial (ea), el elemento de vídeo puede contener url directamente al nivel del elemento en lugar de anidado en value.

Tipo: light

CampoTipoDescripción
valueint0 Reposo · 1 OK · 2 Advertencia · 3 Error

Tipo: prg

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

Tipo: message (aún no implementado en el backend actual)

Reservado para la visualización de mensajes/logs.


Listas de valores (LOV)

Los LOV proporcionan un conjunto de valores permitidos para los elementos de tipo int, float y string.

LOV local — integrada en el elemento:

"listOfValues": {
  "1": "Opción Uno",
  "2": "Opción Dos"
}

LOV global — referenciada por clave:

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

El LOV en sí se define a nivel módulo (globallovs) o controlador (controllerlovs):

"myCameraModels": {
  "label": "Modelos de cámara",
  "type": "string",
  "values": {
    "ASI294MC": "ZWO ASI 294 MC",
    "ASI533MC": "ZWO ASI 533 MC"
  }
}

LOV integrados del controlador (siempre disponibles):

ClaveContenido
loadedModulesTodos los módulos cargados: {nombreModulo: etiqueta}
loadedModules-<template>Módulos filtrados por tipo (ej. loadedModules-focus)
profiles-<template>Perfiles disponibles para un tipo de módulo

Control de acceso

La respuesta dump contiene los valores grant-server y grant-client:

ValorSignificado
"1"Acceso completo lectura-escritura
"0"Solo lectura
"-1"Acceso denegado (autenticación requerida)

Si grant-client vale "-1", no se envía ningún dato de módulo. Usar el mensaje LO (login) para autenticarse.