Mensajes Cliente → Servidor

Formato de los mensajes

Cada mensaje es un objeto JSON con una única clave de primer nivel que identifica el comando. El valor es un objeto cuya estructura depende del comando.

Todas las claves de comandos de cliente están en MAYÚSCULAS (ej. DU, SV, SA, GC).


Índice de comandos

ClaveDescripción
DUSolicitar el dump completo
XXHeartbeat / keepalive
LOConexión
ILCambiar el idioma
SVEnviar el valor de un solo elemento
SAEnviar todos los valores de elementos
I1Clic en preicon1 de propiedad
I2Clic en preicon2 de propiedad
I3Clic en posticon1 de propiedad
I4Clic en posticon2 de propiedad
J1Clic en preicon de elemento
J2Clic en posticon de elemento
PLCargar un perfil
PSGuardar un perfil
GCCrear una línea de cuadrícula
GUActualizar una línea de cuadrícula
GDEliminar una línea de cuadrícula
GFSeleccionar una línea de cuadrícula
GHSubir una línea de cuadrícula
GBBajar una línea de cuadrícula
MLCargar un módulo
MKDescargar un módulo
YAIniciar el servidor INDI embebido
YZDetener el servidor INDI embebido
YLCargar un driver INDI
YRRecargar un driver INDI
YSDetener un driver INDI

Todos los mensajes dirigidos a un módulo o a una propiedad usan la siguiente envoltura:

{
  "COMANDO": {
    "m": {
      "NombreDelModulo": {
        "p": {
          "nombreDeLaPropiedad": { ... }
        }
      }
    }
  }
}

donde m designa modules y p designa properties.


Gestión de sesión

DU — Solicitar el dump completo

Debe enviarse inmediatamente tras la conexión. El servidor responde con un mensaje d que contiene todos los módulos.

{ "DU": { "language": "es" } }
CampoDescripción
languageIdioma preferido para las etiquetas traducidas ("en", "fr", etc.)

XX — Heartbeat

Enviar cada 30 segundos para mantener la conexión activa. El servidor responde con xx.

{ "XX": {} }

LO — Conexión

Requerido cuando el servidor tiene activado el control de acceso (grant-client vale "-1" en la respuesta dump).

{
  "LO": {
    "user": "username",
    "pw": "password",
    "language": "es"
  }
}

IL — Cambiar el idioma

Modifica el idioma de las etiquetas traducidas sin reconectar.

{ "IL": { "language": "es" } }

Actualización de los valores de propiedad

SV — Enviar el valor de un solo elemento

A usar cuando directedit es true en el elemento — envía inmediatamente el valor de un solo elemento.

{
  "SV": {
    "m": {
      "Focus": {
        "p": {
          "parameters": {
            "e": {
              "iterations": 7
            }
          }
        }
      }
    }
  }
}

e contiene un único par nombreElemento: valor.


SA — Enviar todos los valores de elementos

Usado para enviar todos los elementos editables de una propiedad de una vez (ej. desde un formulario). También usado cuando directedit es false.

{
  "SA": {
    "m": {
      "Focus": {
        "p": {
          "parameters": {
            "e": {
              "iterations": 7,
              "exposure": 3.5,
              "active": true
            }
          }
        }
      }
    }
  }
}

Acciones sobre los iconos

Los iconos de propiedad (preicon / posticon) desencadenan acciones de backend como el guardado de un perfil, la carga de un perfil o el lanzamiento de un proceso. Los eventos de clic se envían mediante los siguientes comandos.

I1 — Clic en preicon1 de propiedad

{
  "I1": {
    "m": {
      "Focus": {
        "p": {
          "saveprofile": {}
        }
      }
    }
  }
}

I2 — Clic en preicon2 de propiedad

{
  "I2": {
    "m": {
      "Focus": {
        "p": {
          "loadprofile": {}
        }
      }
    }
  }
}

I3 — Clic en posticon1 de propiedad

Misma estructura que I1 / I2.

I4 — Clic en posticon2 de propiedad

Misma estructura que I1 / I2.


J1 — Clic en preicon de elemento

{
  "J1": {
    "m": {
      "Focus": {
        "p": {
          "devices": {
            "e": {
              "myDevice": {}
            }
          }
        }
      }
    }
  }
}

J2 — Clic en posticon de elemento

Misma estructura que J1.


Gestión de perfiles

PL — Cargar un perfil

{
  "PL": {
    "m": {
      "Focus": {
        "profile": "myProfile"
      }
    }
  }
}

El servidor responde con un mensaje fl (perfil cargado) y luego envía los valores de propiedades actualizados.


PS — Guardar un perfil

{
  "PS": {
    "m": {
      "Focus": {
        "profile": "myProfile"
      }
    }
  }
}

El servidor responde con un mensaje fs (perfil guardado).


Operaciones sobre cuadrículas

Los comandos de cuadrícula apuntan a una propiedad específica dentro de un módulo. Todos usan la envoltura m / p.

GC — Crear una línea de cuadrícula

Añade una nueva línea a la cuadrícula con los valores de elementos proporcionados.

{
  "GC": {
    "m": {
      "Sequencer": {
        "p": {
          "sequence": {
            "e": {
              "target": "M31",
              "exposure": 120,
              "count": 10
            }
          }
        }
      }
    }
  }
}

El servidor responde con un mensaje gc confirmando el índice de la nueva línea.


GU — Actualizar una línea de cuadrícula

Actualiza una línea específica (índice base cero i) con nuevos valores de elementos.

{
  "GU": {
    "m": {
      "Sequencer": {
        "p": {
          "sequence": {
            "i": 1,
            "e": {
              "target": "M42",
              "exposure": 60
            }
          }
        }
      }
    }
  }
}

GD — Eliminar una línea de cuadrícula

Elimina la línea en el índice i (base cero).

{
  "GD": {
    "m": {
      "Sequencer": {
        "p": {
          "sequence": {
            "i": 0
          }
        }
      }
    }
  }
}

GF — Seleccionar una línea de cuadrícula

Solicita al servidor que cargue una línea de la cuadrícula en los elementos editables de la propiedad (usado al hacer clic en una línea para editarla).

{
  "GF": {
    "m": {
      "Sequencer": {
        "p": {
          "sequence": {
            "i": 2
          }
        }
      }
    }
  }
}

GH — Subir una línea de cuadrícula

Desplaza la línea en el índice i una posición hacia arriba.

{
  "GH": {
    "m": {
      "Sequencer": {
        "p": {
          "sequence": {
            "i": 3
          }
        }
      }
    }
  }
}

GB — Bajar una línea de cuadrícula

Desplaza la línea en el índice i una posición hacia abajo.

{
  "GB": {
    "m": {
      "Sequencer": {
        "p": {
          "sequence": {
            "i": 2
          }
        }
      }
    }
  }
}

Ciclo de vida de los módulos

ML — Cargar un módulo

Solicita al servidor cargar dinámicamente un módulo.

{
  "ML": {
    "m": {
      "ModuleName": {}
    }
  }
}

MK — Descargar un módulo

Solicita al servidor descargar un módulo en ejecución.

{
  "MK": {
    "m": {
      "ModuleName": {}
    }
  }
}

Control del servidor INDI embebido

Estos comandos solo están disponibles cuando el servidor dispone de una instancia INDI embebida.

ComandoDescripción
YAIniciar el servidor INDI embebido
YZDetener el servidor INDI embebido
YLCargar un driver INDI
YRRecargar un driver INDI
YSDetener un driver INDI

Resumen del control de acceso

Valor grant servidorComandos permitidos
grant-client: "1"Todos los comandos
grant-client: "0"Solo DU, LO, IL
grant-client: "-1"Solo LO (autenticación requerida)

Los comandos enviados sin permisos suficientes son ignorados silenciosamente por el servidor.