Messages Serveur → Client

Format des messages

Chaque message est un objet JSON avec une seule clé de premier niveau. Cette clé encode le type d’événement et peut inclure une description lisible séparée par un tiret :

"aa-dump all data"   →  type d'événement = 2 premiers caractères = "aa"
"ea"                 →  type d'événement = "ea"
"d"                  →  type d'événement = "d" (caractère unique)

Les clients doivent comparer sur les 1 ou 2 premiers caractères de la clé, et non sur la chaîne complète, car la partie description peut changer.

Toutes les clés d’événements envoyées par le serveur sont en minuscules (ex. d, ea, ap, gc).


Index des types d’événements

CléDescription
dDump initial complet (réponse à DU)
aaDump complet d’un module (module chargé/rechargé)
apRemplacement complet d’une propriété
eaMise à jour de toutes les valeurs d’éléments d’une propriété
eeMise à jour d’une seule valeur d’élément
evMise à jour d’une valeur d’élément avec ses contraintes
psMise à jour du statut et de l’état activé d’une propriété
dmModule supprimé
dpPropriété supprimée
gcLigne de grille créée
guLigne de grille mise à jour
gdLigne de grille supprimée
grRéinitialisation de la grille (toutes les lignes effacées)
lcLOV créé ou fusionné
luLOV remplacé
ldLOV supprimé
fsProfil sauvegardé
flProfil chargé
fcProfil modifié (modifications non sauvegardées)
lEntrée de log
ucMise à jour des données du contrôleur
xxPong keepalive

d — Dump initial complet

Envoyé en réponse à une requête DU. Contient tout : tous les modules, les logs, les listes de fichiers et les données du contrôleur.

{
  "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": {} }
    }
  }
}
Abréviations du format wire

m = modules, p = properties, e = elements, l = globallovs, f = profile. Normaliser ces abréviations vers leurs noms complets lors du stockage interne.


aa — Dump complet d’un module (module chargé/rechargé)

Envoyé lorsqu’un module est chargé ou rechargé à l’exécution. Contient l’état complet du module. La clé commence par "aa".

{
  "aa-dump all data": {
    "Guider": {
      "infos": { "label": "Guider", "name": "Guider", "description": "..." },
      "f": { "name": "default", "changed": false },
      "l": {},
      "p": {
        "status": { ... }
      }
    }
  }
}

ap — Remplacement complet d’une propriété

Remplace entièrement une ou plusieurs propriétés. La clé commence par "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 — Mise à jour de toutes les valeurs d’éléments (niveau propriété)

Le message de mise à jour le plus courant. Envoie les valeurs courantes de tous les éléments d’une propriété. Contient uniquement les valeurs — sans métadonnées. La clé est exactement "ea".

{
  "ea": {
    "Allsky": {
      "p": {
        "coming": {
          "e": {
            "sunrise": { "hh": 7, "mm": 6, "ss": 51 },
            "sunset":  { "hh": 21, "mm": 15, "ss": 1 }
          }
        }
      }
    }
  }
}

Pour les types simples (int, float, bool, string, light), la valeur est un scalaire :

{
  "ea": {
    "Focus": {
      "p": {
        "parameters": {
          "e": {
            "iterations": 5,
            "exposure": 3.5,
            "active": true
          }
        }
      }
    }
  }
}

ee — Mise à jour d’une seule valeur d’élément

Met à jour la valeur d’un seul élément. Même format que ea mais pour un seul élément. La clé est exactement "ee".

{
  "ee": {
    "Focus": {
      "p": {
        "parameters": {
          "e": {
            "iterations": 7
          }
        }
      }
    }
  }
}

ev — Mise à jour d’un élément avec métadonnées

Met à jour la valeur d’un élément et ses contraintes (min, max, format). La clé commence par "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 — Mise à jour du statut d’une propriété

Met à jour uniquement les champs status et enabled d’une propriété. La clé commence par "ps".

{
  "ps-only property state": {
    "Focus": {
      "p": {
        "autofocus": {
          "status": 2,
          "enabled": true
        }
      }
    }
  }
}

Valeurs de statut : 0 Veille · 1 OK · 2 Occupé · 3 Erreur


dm — Module supprimé

Envoyé lorsqu’un module est déchargé. Le client doit supprimer toutes les données de ce module. La clé commence par "dm".

{
  "dm-delete/remove module": {
    "Focus": {}
  }
}

dp — Propriété supprimée

Envoyé lorsqu’une propriété est retirée d’un module. La clé commence par "dp".

{
  "dp-delete/remove property": {
    "Focus": {
      "p": {
        "oldProperty": ""
      }
    }
  }
}

gc — Ligne de grille créée

Envoyé après l’ajout d’une nouvelle ligne dans une propriété de type grille. La clé commence par "gc".

{
  "gc-grid new line ": {
    "Sequencer": {
      "p": {
        "sequence": {
          "i": 3,
          "values": {
            "target": "M31",
            "exposure": 120,
            "count": 10
          }
        }
      }
    }
  }
}

i est l’index de la ligne nouvellement créée. values est un objet indexé par nom d’élément.


gu — Ligne de grille mise à jour

Envoyé lorsqu’une ligne existante de la grille est modifiée. La clé commence par "gu".

{
  "gu-grid update line": {
    "Sequencer": {
      "p": {
        "sequence": {
          "i": 1,
          "values": {
            "target": "M42",
            "exposure": 60,
            "count": 20
          }
        }
      }
    }
  }
}

gd — Ligne de grille supprimée

Envoyé lorsqu’une ligne de la grille est retirée. La clé commence par "gd".

{
  "gd-grid delete line": {
    "Sequencer": {
      "p": {
        "sequence": {
          "i": 0
        }
      }
    }
  }
}

i est l’index (base zéro) de la ligne supprimée. Les lignes suivantes décalent d’un rang vers le haut.


gr — Réinitialisation de la grille

Efface l’intégralité de la grille d’une propriété. La clé commence par "gr".

{
  "gr-grid reset": {
    "Sequencer": {
      "p": {
        "sequence": {}
      }
    }
  }
}

lc / lu / ld — Événements LOV

lc — LOV créé/fusionné (clé commence par "lc") :

LOV de module :

{
  "lc-lov create": {
    "Focus": {
      "l": {
        "myLov": {
          "label": "My LOV",
          "type": "string",
          "values": { "a": "Option A", "b": "Option B" }
        }
      }
    }
  }
}

LOV du contrôleur (sans enveloppe module, utilise la clé lovs) :

{
  "lc-lov create": {
    "lovs": {
      "sharedLov": {
        "label": "Shared LOV",
        "type": "string",
        "values": { "x": "Value X" }
      }
    }
  }
}

lu — LOV remplacé (même format que lc, remplacement complet).

ld — LOV supprimé (clé commence par "ld") :

{
  "ld-lov delete": {
    "lovs": {
      "sharedLov": {}
    }
  }
}

fs / fl / fc — Événements de profil

Envoyés lorsqu’un profil est sauvegardé, chargé ou modifié.

{
  "fs-profile saved": {
    "Focus": {
      "f": { "name": "myProfile", "changed": false }
    }
  }
}
Préfixe de cléÉvénement
fsProfil sauvegardé
flProfil chargé
fcProfil avec modifications non sauvegardées

l — Entrée de log

Envoyé pour chaque message de log généré par le serveur. La clé est exactement "l".

{
  "l": {
    "d": "2024-01-01T12:00:00.000",
    "c": "Focus",
    "t": "Autofocus completed successfully",
    "l": 1
  }
}
ChampDescription
dDate/heure ISO 8601 avec millisecondes
cContexte/source (nom du module ou "WS")
tTexte du message (traduit dans la langue du client)
lNiveau : 0 Debug · 1 Info · 2 Avertissement · 3 Erreur · 4 Critique

uc — Mise à jour des données du contrôleur

Envoyé lorsque les données globales du contrôleur changent (ex. liste de fichiers, profils). La clé commence par "uc".

{
  "uc-update controller data": {
    "profiles": {
      "Focus": ["default", "highres"],
      "Guider": ["default"]
    }
  }
}

Le payload est {"clé": valeur}valeur peut être une chaîne, un tableau ou un objet.


xx — Pong keepalive

Envoyé par le serveur en réponse à un heartbeat client (XX). Pas de payload utile ; les clients peuvent l’ignorer.

{ "xx": {} }