Mensajes Servidor → Cliente
Formato de los mensajes
Cada mensaje es un objeto JSON con una única clave de primer nivel. Esta clave codifica el tipo de evento y puede incluir una descripción legible separada por un guion:
"aa-dump all data" → tipo de evento = 2 primeros caracteres = "aa"
"ea" → tipo de evento = "ea"
"d" → tipo de evento = "d" (carácter único)Los clientes deben comparar los 1 o 2 primeros caracteres de la clave, no la cadena completa, ya que la parte de descripción puede cambiar.
Todas las claves de eventos enviadas por el servidor están en minúsculas (ej. d, ea, ap, gc).
Índice de tipos de eventos
| Clave | Descripción |
|---|---|
d | Dump inicial completo (respuesta a DU) |
aa | Dump completo de un módulo (módulo cargado/recargado) |
ap | Reemplazo completo de una propiedad |
ea | Actualización de todos los valores de elementos de una propiedad |
ee | Actualización de un solo valor de elemento |
ev | Actualización de un valor de elemento con sus restricciones |
ps | Actualización del estado y del estado activado de una propiedad |
dm | Módulo eliminado |
dp | Propiedad eliminada |
gc | Línea de cuadrícula creada |
gu | Línea de cuadrícula actualizada |
gd | Línea de cuadrícula eliminada |
gr | Reinicio de la cuadrícula (todas las líneas borradas) |
lc | LOV creado o fusionado |
lu | LOV reemplazado |
ld | LOV eliminado |
fs | Perfil guardado |
fl | Perfil cargado |
fc | Perfil modificado (modificaciones no guardadas) |
l | Entrada de log |
uc | Actualización de los datos del controlador |
xx | Pong keepalive |
d — Dump inicial completo
Enviado como respuesta a una petición DU. Contiene todo: todos los módulos, los logs, las listas de archivos y los datos del controlador.
{
"d": {
"grant-client": "1",
"grant-server": "0",
"serverlng": "en",
"m": {
"Focus": {
"infos": { "label": "Focus", "name": "Focus", "description": "..." },
"f": { "name": "default", "changed": false },
"l": {
"myLov": { "label": "My LOV", "type": "string", "values": { "a": "Option A" } }
},
"p": {
"parameters": {
"label": "Parameters",
"order": "10",
"level1": "Focus",
"level2": "Config",
"status": 0,
"permission": 2,
"enabled": true,
"showElts": true,
"hasGrid": false,
"hasGraph": false,
"rule": 0,
"badge": false,
"preicon1": "", "preicon2": "", "posticon1": "", "posticon2": "",
"hasprofile": true,
"freevalue": "",
"e": {
"iterations": {
"type": "int",
"label": "Iterations",
"order": "10",
"hint": "",
"autoupdate": false,
"badge": false,
"directedit": false,
"value": 5,
"min": 1,
"max": 20,
"step": 1,
"format": "",
"slider": 0
}
}
}
}
}
},
"files": {
"folders": ["Allsky/archives"],
"files": ["Allsky/archives/image.fits"],
"selectedfolder": ""
},
"logs": [
{ "d": "2024-01-01T12:00:00.000", "c": "Focus", "t": "Module loaded", "l": 1 }
],
"controllerdata": {
"profiles": {
"Focus": ["default", "test"]
}
},
"lovs": {
"sharedLov": { "label": "Shared LOV", "type": "string", "values": {} }
}
}
}m = modules, p = properties, e = elements, l = globallovs, f = profile.
Normalizar estas abreviaturas a sus nombres completos al almacenar internamente.
aa — Dump completo de un módulo (módulo cargado/recargado)
Enviado cuando un módulo se carga o recarga en tiempo de ejecución. Contiene el estado completo del módulo. La clave empieza por "aa".
{
"aa-dump all data": {
"Guider": {
"infos": { "label": "Guider", "name": "Guider", "description": "..." },
"f": { "name": "default", "changed": false },
"l": {},
"p": {
"status": { ... }
}
}
}
}ap — Reemplazo completo de una propiedad
Reemplaza por completo una o varias propiedades. La clave empieza por "ap".
{
"ap-dump all property data": {
"Focus": {
"p": {
"parameters": {
"label": "Parameters",
"status": 0,
"permission": 2,
"enabled": true,
"showElts": true,
"hasGrid": false,
"hasGraph": false,
"rule": 0,
"e": {
"iterations": {
"type": "int",
"value": 7,
"min": 1, "max": 20, "step": 1,
"label": "Iterations", "order": "10", "hint": "",
"autoupdate": false, "badge": false, "directedit": false,
"format": "", "slider": 0
}
}
}
}
}
}
}ea — Actualización de todos los valores de elementos (nivel propiedad)
El mensaje de actualización más común. Envía los valores actuales de todos los elementos de una propiedad. Solo contiene los valores — sin metadatos. La clave es exactamente "ea".
{
"ea": {
"Allsky": {
"p": {
"coming": {
"e": {
"sunrise": { "hh": 7, "mm": 6, "ss": 51 },
"sunset": { "hh": 21, "mm": 15, "ss": 1 }
}
}
}
}
}
}Para los tipos simples (int, float, bool, string, light), el valor es un escalar:
{
"ea": {
"Focus": {
"p": {
"parameters": {
"e": {
"iterations": 5,
"exposure": 3.5,
"active": true
}
}
}
}
}
}ee — Actualización de un solo valor de elemento
Actualiza el valor de un solo elemento. Mismo formato que ea pero para un solo elemento. La clave es exactamente "ee".
{
"ee": {
"Focus": {
"p": {
"parameters": {
"e": {
"iterations": 7
}
}
}
}
}
}ev — Actualización de un elemento con metadatos
Actualiza el valor de un elemento y sus restricciones (min, max, format). La clave empieza por "ev".
{
"ev-set one element value/min/max/format ": {
"Focus": {
"p": {
"parameters": {
"e": {
"temperature": {
"value": 12.5,
"min": -40.0,
"max": 80.0,
"format": "%.1f"
}
}
}
}
}
}
}ps — Actualización del estado de una propiedad
Actualiza únicamente los campos status y enabled de una propiedad. La clave empieza por "ps".
{
"ps-only property state": {
"Focus": {
"p": {
"autofocus": {
"status": 2,
"enabled": true
}
}
}
}
}Valores de estado: 0 Reposo · 1 OK · 2 Ocupado · 3 Error
dm — Módulo eliminado
Enviado cuando un módulo se descarga. El cliente debe eliminar todos los datos de ese módulo. La clave empieza por "dm".
{
"dm-delete/remove module": {
"Focus": {}
}
}dp — Propiedad eliminada
Enviado cuando una propiedad se elimina de un módulo. La clave empieza por "dp".
{
"dp-delete/remove property": {
"Focus": {
"p": {
"oldProperty": ""
}
}
}
}gc — Línea de cuadrícula creada
Enviado tras añadir una nueva línea en una propiedad de tipo cuadrícula. La clave empieza por "gc".
{
"gc-grid new line ": {
"Sequencer": {
"p": {
"sequence": {
"i": 3,
"values": {
"target": "M31",
"exposure": 120,
"count": 10
}
}
}
}
}
}i es el índice de la línea recién creada. values es un objeto indexado por nombre de elemento.
gu — Línea de cuadrícula actualizada
Enviado cuando se modifica una línea existente de la cuadrícula. La clave empieza por "gu".
{
"gu-grid update line": {
"Sequencer": {
"p": {
"sequence": {
"i": 1,
"values": {
"target": "M42",
"exposure": 60,
"count": 20
}
}
}
}
}
}gd — Línea de cuadrícula eliminada
Enviado cuando se elimina una línea de la cuadrícula. La clave empieza por "gd".
{
"gd-grid delete line": {
"Sequencer": {
"p": {
"sequence": {
"i": 0
}
}
}
}
}i es el índice (base cero) de la línea eliminada. Las líneas siguientes se desplazan una posición hacia arriba.
gr — Reinicio de la cuadrícula
Borra la totalidad de la cuadrícula de una propiedad. La clave empieza por "gr".
{
"gr-grid reset": {
"Sequencer": {
"p": {
"sequence": {}
}
}
}
}lc / lu / ld — Eventos LOV
lc — LOV creado/fusionado (clave empieza por "lc"):
LOV de módulo:
{
"lc-lov create": {
"Focus": {
"l": {
"myLov": {
"label": "My LOV",
"type": "string",
"values": { "a": "Option A", "b": "Option B" }
}
}
}
}
}LOV del controlador (sin envoltura de módulo, usa la clave lovs):
{
"lc-lov create": {
"lovs": {
"sharedLov": {
"label": "Shared LOV",
"type": "string",
"values": { "x": "Value X" }
}
}
}
}lu — LOV reemplazado (mismo formato que lc, reemplazo completo).
ld — LOV eliminado (clave empieza por "ld"):
{
"ld-lov delete": {
"lovs": {
"sharedLov": {}
}
}
}fs / fl / fc — Eventos de perfil
Enviados cuando un perfil se guarda, carga o modifica.
{
"fs-profile saved": {
"Focus": {
"f": { "name": "myProfile", "changed": false }
}
}
}| Prefijo de clave | Evento |
|---|---|
fs | Perfil guardado |
fl | Perfil cargado |
fc | Perfil con modificaciones no guardadas |
l — Entrada de log
Enviado para cada mensaje de log generado por el servidor. La clave es exactamente "l".
{
"l": {
"d": "2024-01-01T12:00:00.000",
"c": "Focus",
"t": "Autofocus completed successfully",
"l": 1
}
}| Campo | Descripción |
|---|---|
d | Fecha/hora ISO 8601 con milisegundos |
c | Contexto/origen (nombre del módulo o "WS") |
t | Texto del mensaje (traducido al idioma del cliente) |
l | Nivel: 0 Debug · 1 Info · 2 Advertencia · 3 Error · 4 Crítico |
uc — Actualización de los datos del controlador
Enviado cuando cambian los datos globales del controlador (ej. lista de archivos, perfiles). La clave empieza por "uc".
{
"uc-update controller data": {
"profiles": {
"Focus": ["default", "highres"],
"Guider": ["default"]
}
}
}El payload es {"clave": valor} donde valor puede ser una cadena, un array o un objeto.
xx — Pong keepalive
Enviado por el servidor en respuesta a un heartbeat de cliente (XX). Sin payload útil; los clientes pueden ignorarlo.
{ "xx": {} }