HTTP
Par défaut, le service HTTP démarre sur : http://localhost:10001.
Le port peut être modifié dans la configuration du service.
Vue d'ensemble
Cette section décrit les routes HTTP mises à disposition par le service.
Toutes les routes ci-dessous utilisent l'URL de base par défaut : http://localhost:10001.
Enveloppe de réponse standard
Tous les points de terminaison renvoient l'une des deux enveloppes suivantes :
Réponse « aucune donnée » (utilisée pour les critères d'évaluation basés uniquement sur les mutations) :
{ "ok": true }
{ "ok": false, "error": "reason string" }
Réponse de données (utilisée par GET, ainsi que par POST/DELETE sur les points de terminaison de configuration qui renvoient la valeur appliquée) :
{ "ok": true, "data": { "..." : "..." } }
{ "ok": false, "error": "reason string" }
Syntaxe du sélecteur de périphériques
Les routes au niveau des périphériques utilisent le modèle /{device_type}/{id_or_index}/.... Le {device_type} et {id_or_index} Les segments de chemin identifient le ou les appareils cibles.
| Exemple de segment de chemin | Signification |
|---|---|
inverse3/0 | Premier Inverse3 index (à partir de 0) |
inverse3/A14 | Inverse3 l'identifiant de l'appareil A14 |
inverse3/* | Tous Inverse3 (symbolique) |
verse_grip/0 | Premier coup de main par l'index |
wireless_verse_grip/* | Toutes les poignées Verse sans fil |
*inverse/* | Tous les appareils de la gamme Inverse (Inverse3, Inverse3x, Minverse) |
*verse_grip/* | Tous les appareils de la gamme Verse Grip (Verse Grip, Wireless VG) |
Règles relatives aux caractères génériques :
GETrefuse les sélecteurs ambigus ou contenant des caractères génériques (renvoie400).POSTetDELETEaccepte les caractères génériques : l'opération s'applique à tous les périphériques correspondants.
Sélecteur de session
Les points de terminaison liés à la session (basis, mount, preset, transform, filters) nécessitent un ?session=<expr> paramètre de requête permettant d'identifier la session.
| Expression | Signification |
|---|---|
| (omission) | Toutes les sessions (suppression uniquement) |
#123 ou 123 | Session portant le numéro d'identification 123 |
:-1 | Dernière session par index |
:0 | Première session par index |
Exemple : GET /inverse3/0/config/basis?session=:0
Version
Méthode : GET
URL : http://localhost:10001/version
Exemple de réponse :
{
"build_time": "2024-08-07T16:01:53Z",
"git_branch": "main",
"git_describe": "3.5.0-2-gce34c39e",
"git_hash": "ce34c39e",
"git_tag": "3.5.0",
"project_name": "haply-inverse-service",
"project_version": "3.5.0"
}
Statut d'expert
Méthode : GET
URL : http://localhost:10001/expert/status
Renvoie des informations détaillées sur l'état, notamment concernant la détection, les appareils, les sessions et les paramètres généraux.
Dispositifs
Méthode : GET
URL : http://localhost:10001/devices
Renvoie l'inventaire actuel des périphériques, comprenant config, stateet status.
Vous pouvez, si vous le souhaitez, passer ?session=<expr> pour filtrer l'instantané selon la perspective d'une session spécifique (applique la base, le montage et les transformations de cette session aux valeurs renvoyées).
Exemple de réponse :
{
"inverse3": [
{
"device_id": "04BA",
"config": { "...": "..." },
"state": { "...": "..." },
"status": { "...": "..." }
}
]
}
Séances
| Méthode | Chemin | Description |
|---|---|---|
| OBTENIR | /sessions | Répertorier toutes les sessions v3.1 actives |
| OBTENIR | /sessions/{session_id} | Réservez une séance |
| OBTENIR | /sessions/{session_id}/profile | Récupérer le nom du profil de session |
| PUBLICATION | /sessions/{session_id}/profile | Définir le profil de session |
| SUPPRIMER | /sessions/{session_id}/profile | Réinitialiser le profil à "default" |
PUBLICATION /sessions/{session_id}/profile corps :
{
"name": "my_profile"
}
Ports
Méthode : POST
URL : http://localhost:10001/ports/{port}/reset
Débloque un port série. Renvoie { "ok": true }.
Configuration de l'appareil
Tous les points de terminaison de configuration suivent le modèle /{device_type}/{id_or_index}/config/{setting}.
Les points de terminaison liés à la session (basis, mount, preset) nécessitent en outre un ?session=<expr> paramètre de requête.
Latéralité (Inverse3 )
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/handedness | -- | "left" ou "right" |
| PUBLICATION | /{device_type}/{id}/config/handedness | "left" ou "right" | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/handedness | -- | "right" (par défaut) |
Mise à l'échelle du couple (Inverse3 )
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/torque_scaling | -- | { "enabled": bool } |
| PUBLICATION | /{device_type}/{id}/config/torque_scaling | { "enabled": bool } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/torque_scaling | -- | { "enabled": false } |
Compensation de la gravité (Inverse3 )
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/gravity_compensation | -- | { "enabled": bool, "scaling_factor": float } |
| PUBLICATION | /{device_type}/{id}/config/gravity_compensation | { "enabled": bool, "scaling_factor": float } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/gravity_compensation | -- | { "enabled": true, "scaling_factor": 1.0 } |
Base (tous les appareils, portée de session)
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/basis?session= | -- | { "permutation": "XYZ" } |
| PUBLICATION | /{device_type}/{id}/config/basis?session= | { "permutation": "ZXY" } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/basis?session= | -- | { "permutation": "XYZ" } |
Monter (tous les périphériques, au niveau de la session)
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/mount?session= | -- | { "transform": {...} } |
| PUBLICATION | /{device_type}/{id}/config/mount?session= | { "transform": {...} } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/mount?session= | -- | transformation d'identité |
Transformer la forme (utilisé par les fonctions `mount` et `state/transform`) :
{
"transform": {
"position": { "x": 0, "y": 0, "z": 0 },
"rotation": { "x": 0, "y": 0, "z": 0, "w": 1 },
"scale": { "x": 1, "y": 1, "z": 1 }
}
}
Préréglage (tous les appareils, au niveau de la session)
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/workspace_preset?session= | -- | { "preset": "arm_front_centered" } |
| PUBLICATION | /{device_type}/{id}/config/workspace_preset?session= | { "preset": "arm_front_centered" } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/workspace_preset?session= | -- | { "preset": "device_defaults" } |
Valeurs disponibles : device_defaults, arm_front, arm_front_centered, led_front, led_front_centered, custom.
Filtres de périphériques (Inverse3 , au niveau de la session)
Utilisation des points de terminaison de filtrage /{device_type}/{id}/config/filters/{filter}?session=<expr>.
Amortissement
Contrôle à la fois l'amortissement uniforme et l'amortissement directionnel. Au moins un champ doit être présent dans le corps de la balise POST.
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/filters/damping?session= | -- | { "scalar": float, "vector": { "x": f, "y": f, "z": f } } |
| PUBLICATION | /{device_type}/{id}/config/filters/damping?session= | { "scalar": float } ou { "vector": {...} } ou les deux | valeurs reprises |
| SUPPRIMER | /{device_type}/{id}/config/filters/damping?session= | -- | les deux sont remis à zéro |
Force Gate
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/config/filters/force_gate?session= | -- | { "gain": float } |
| PUBLICATION | /{device_type}/{id}/config/filters/force_gate?session= | { "gain": float } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/config/filters/force_gate?session= | -- | récupérer les paramètres par défaut |
État de l'appareil
Transformer (tous les appareils, au niveau de la session)
Transformation de l'espace de travail (de l'espace matériel à l'espace applicatif).
| Méthode | Chemin | Corps | Réponse |
|---|---|---|---|
| OBTENIR | /{device_type}/{id}/state/transform?session= | -- | { "transform": {...} } |
| PUBLICATION | /{device_type}/{id}/state/transform?session= | { "transform": {...} } | valeur renvoyée |
| SUPPRIMER | /{device_type}/{id}/state/transform?session= | -- | transformation d'identité |
Sauvegarder la configuration
Fonctionne uniquement avec Inverse3 . Attention : évitez d'enregistrer la configuration trop souvent, car le nombre d'enregistrements pouvant être effectués sur un appareil donné est limité (~10 000 écritures EEPROM).
Méthode : POST
URL : http://localhost:10001/save_configuration
Exemple de corps :
{
"device_id": "049D"
}
Exemple de réponse :
{
"ok": true
}
Paramètres
Les points de terminaison de configuration sont générés automatiquement pour :
- Liste de tous les paramètres (y compris les métadonnées)
- Lecture d'une valeur de paramètre
- Application des paramètres (individuellement ou par lots)
- Réinitialisation d'une clé à sa valeur par défaut
Vous trouverez ici toutes les références aux paramètres clés
Itinéraires
| Méthode | Itinéraire | Description |
|---|---|---|
| OBTENIR | /settings/ | Récupérer toutes les clés, valeurs et métadonnées des paramètres. |
| PUBLICATION | /settings/ | Appliquer plusieurs paramètres en une seule fois. |
| OBTENIR | /settings/{key} | Récupérer la valeur actuelle d'une clé de paramètre spécifique. |
| PUBLICATION | /settings/{key} | Attribuer une nouvelle valeur à une clé spécifique. |
| SUPPRIMER | /settings/{key} | Réinitialiser une clé à sa valeur par défaut. |
Forme de la réponse
OBTENIR /settings/ (tous les paramètres)
Renvoie un objet dont les clés correspondent aux paramètres. Chaque entrée comprend :
value: la valeur actuellemetadata: type + contraintes + état de verrouillage
Exemples d'entrées :
{
"devices/detection/timeout": {
"metadata": {
"constraint": {
"range": {
"max": 15,
"min": 1,
"step": 0
}
},
"locked": false,
"type_hint": "INT"
},
"value": 5
}
}
OBTENIR /settings/{key} (réglage unique)
Renvoie uniquement la valeur (sans métadonnées) associée à la clé demandée.
Appliquer les paramètres
PUBLICATION /settings/ (application groupée)
Appliquer plusieurs clés en une seule fois.
Format recommandé pour le corps du message : un objet JSON associant des clés à des valeurs.
{
"devices/detection/timeout": 5,
"devices/detection/advanced/wvg_description_filter": ["Haply USB Transceiver", "Haply Handle"]
}
PUBLICATION /settings/{key} (application unique)
Attribuer une nouvelle valeur à une seule clé.
Format recommandé pour le corps : soit une valeur JSON brute, soit une valeur encapsulée (privilégiez l'encapsulation pour plus de clarté).
{
"value": 5
}
Réinitialisation des paramètres
SUPPRIMER /settings/{key}
Rétablit la valeur par défaut de la clé.
Cela revient à « rétablir les paramètres par défaut ».
Indications de type
Le service en déduit type_hint automatiquement. GENERIC sert de solution de secours pour les types complexes.
Conseils pris en charge :
BOOLINTFLOATSTRINGVEC2VEC3VEC4TRANSFORMARR_INTARR_FLOATARR_STRINGGENERIC
Points de terminaison hérités obsolètes
Les points de terminaison suivants sont toujours acceptés, mais génèrent un avertissement de dépréciation. Ils seront supprimés dans la version 4.0. Veuillez utiliser les routes de remplacement à la place.
| Chemin obsolète | Remplacement |
|---|---|
POST /force_scale | POST /settings/devices/force_scale |
POST /gravity_compensation | POST /{type}/{id}/config/gravity_compensation |
POST /torque_scaling | POST /{type}/{id}/config/torque_scaling |
POST /device_handedness | POST /{type}/{id}/config/handedness |
POST /serial_enable | POST /settings/system/serial_enable |
POST /experimental/features/grip_dropped_simulation_stopper | POST /settings/features/grip_hook/enabled |
POST /experimental/features/screensaver_enable | POST /settings/features/screensaver/enabled |