HTTP
デフォルトでは、HTTPサービスはオンで起動する: http://localhost:10001.
ポートは、サービスの設定で変更できます。
概要
このセクションでは、本サービスが公開しているHTTPルートについて説明します。
以下のすべてのルートは、デフォルトのベースURLを使用することを前提としています: http://localhost:10001.
標準の返信用封筒
すべてのエンドポイントは、次の2つのエンベロープのいずれかを返します:
データなしの応答(変異のみを評価するエンドポイントで使用される):
{ "ok": true }
{ "ok": false, "error": "reason string" }
データ応答(GETで利用されるほか、適用された値を返す設定エンドポイントでのPOST/DELETEでも利用される):
{ "ok": true, "data": { "..." : "..." } }
{ "ok": false, "error": "reason string" }
デバイス選択子の構文
デバイスレベルのルートでは、次のパターンが使用されます /{device_type}/{id_or_index}/.... その {device_type} そして {id_or_index} パスセグメントは、対象となるデバイス(複数可)を特定します。
| パスセグメントの例 | 意味 |
|---|---|
inverse3/0 | インデックスInverse3 最初のInverse3 (0から始まる) |
inverse3/A14 | デバイスIDInverse3 A14 |
inverse3/* | すべてのInverse3Inverse3 (ワイルドカード) |
verse_grip/0 | 人差し指によるファースト・ヴァース・グリップ |
wireless_verse_grip/* | すべてのワイヤレス・バース・グリップ |
*inverse/* | Inverseシリーズ全機種(Inverse3、Inverse3x、Minverse) |
*verse_grip/* | Verse Grip シリーズの全デバイス(Verse Grip、Wireless VG) |
ワイルドカードのルール:
GETあいまいなセレクタやワイルドカードセレクタを拒否します(400).POSTそしてDELETEワイルドカードを受け付けます。この操作は、一致するすべてのデバイスに適用されます。
セッションセレクタ
セッションスコープのエンドポイント(basis、mount、preset、transform、filters)には、 ?session=<expr> セッションを識別するためのクエリパラメータ。
| 表現 | 意味 |
|---|---|
| (省略) | すべてのセッション(DELETEのみ) |
#123 または 123 | IDが123のセッション |
:-1 | インデックス別:前回のセッション |
:0 | インデックス別:第1回 |
例: GET /inverse3/0/config/basis?session=:0
バージョン
方法: GET
URL: http://localhost:10001/version
回答例
{
"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"
}
エキスパートステータス
方法: GET
URL: http://localhost:10001/expert/status
検出状況、デバイス、セッション、およびグローバル設定を含む詳細なステータス情報を返します。
デバイス
方法: GET
URL: http://localhost:10001/devices
現在のデバイス一覧を返します。これには以下が含まれます: config, stateそして status.
必要に応じて、以下を渡すことができます ?session=<expr> スナップショットを特定のセッションの視点にフィルタリングする(返される値に対して、そのセッションのベース、マウント、および変換を適用する)。
回答例
{
"inverse3": [
{
"device_id": "04BA",
"config": { "...": "..." },
"state": { "...": "..." },
"status": { "...": "..." }
}
]
}
セッション
| 方法 | パス | 説明 |
|---|---|---|
| 取得 | /sessions | v3.1のアクティブなセッションをすべて表示する |
| 取得 | /sessions/{session_id} | 1回分のセッションを予約する |
| 取得 | /sessions/{session_id}/profile | セッションプロファイル名を取得する |
| 投稿 | /sessions/{session_id}/profile | セッションプロファイルを設定する |
| 削除 | /sessions/{session_id}/profile | プロファイルをリセットして "default" |
投稿 /sessions/{session_id}/profile 本文:
{
"name": "my_profile"
}
ポート
方法: POST
URL: http://localhost:10001/ports/{port}/reset
シリアルポートの詰まりを解消します。戻り値 { "ok": true }.
デバイスの設定
すべての設定エンドポイントは、次のパターンを使用します /{device_type}/{id_or_index}/config/{setting}.
セッションスコープのエンドポイント(basis、mount、preset)には、さらに ?session=<expr> クエリパラメータ。
利き手(Inverse3 )
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/handedness | -- | "left" または "right" |
| 投稿 | /{device_type}/{id}/config/handedness | "left" または "right" | 返された値 |
| 削除 | /{device_type}/{id}/config/handedness | -- | "right" (既定値) |
トルクのスケーリング(Inverse3 )
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/torque_scaling | -- | { "enabled": bool } |
| 投稿 | /{device_type}/{id}/config/torque_scaling | { "enabled": bool } | 返された値 |
| 削除 | /{device_type}/{id}/config/torque_scaling | -- | { "enabled": false } |
重力補正(Inverse3 )
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/gravity_compensation | -- | { "enabled": bool, "scaling_factor": float } |
| 投稿 | /{device_type}/{id}/config/gravity_compensation | { "enabled": bool, "scaling_factor": float } | 返された値 |
| 削除 | /{device_type}/{id}/config/gravity_compensation | -- | { "enabled": true, "scaling_factor": 1.0 } |
基本(すべてのデバイス、セッションスコープ)
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/basis?session= | -- | { "permutation": "XYZ" } |
| 投稿 | /{device_type}/{id}/config/basis?session= | { "permutation": "ZXY" } | 返された値 |
| 削除 | /{device_type}/{id}/config/basis?session= | -- | { "permutation": "XYZ" } |
マウント(すべてのデバイス、セッションスコープ)
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/mount?session= | -- | { "transform": {...} } |
| 投稿 | /{device_type}/{id}/config/mount?session= | { "transform": {...} } | 返された値 |
| 削除 | /{device_type}/{id}/config/mount?session= | -- | アイデンティティ変換 |
形状の変換(マウントおよび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 }
}
}
プリセット(すべてのデバイス、セッションスコープ)
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/preset?session= | -- | { "preset": "arm_front_centered" } |
| 投稿 | /{device_type}/{id}/config/preset?session= | { "preset": "arm_front_centered" } | 返された値 |
| 削除 | /{device_type}/{id}/config/preset?session= | -- | { "preset": "device_defaults" } |
利用可能な値: device_defaults, arm_front, arm_front_centered, led_front, led_front_centered, custom.
デバイスフィルター(Inverse3 、セッションスコープ)
エンドポイントのフィルタリングの使用 /{device_type}/{id}/config/filters/{filter}?session=<expr>.
減衰
均一減衰と方向性減衰の両方を制御します。POSTリクエストの本文には、少なくとも1つのフィールドが含まれている必要があります。
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/filters/damping?session= | -- | { "scalar": float, "vector": { "x": f, "y": f, "z": f } } |
| 投稿 | /{device_type}/{id}/config/filters/damping?session= | { "scalar": float } または { "vector": {...} } またはその両方 | 反映された値 |
| 削除 | /{device_type}/{id}/config/filters/damping?session= | -- | どちらもゼロにリセットされる |
フォース・ゲート
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/config/filters/force_gate?session= | -- | { "gain": float } |
| 投稿 | /{device_type}/{id}/config/filters/force_gate?session= | { "gain": float } | 返された値 |
| 削除 | /{device_type}/{id}/config/filters/force_gate?session= | -- | 設定からデフォルト値を取得する |
デバイスの状態
変換(すべてのデバイス、セッションスコープ)
ワークスペース変換(デバイス空間からアプリケーション空間へ)。
| 方法 | パス | 本文 | 回答 |
|---|---|---|---|
| 取得 | /{device_type}/{id}/state/transform?session= | -- | { "transform": {...} } |
| 投稿 | /{device_type}/{id}/state/transform?session= | { "transform": {...} } | 返された値 |
| 削除 | /{device_type}/{id}/state/transform?session= | -- | アイデンティティ変換 |
設定の保存
Inverse3 み動作します。警告:特定のデバイスに適用できる保存回数は限られているため(EEPROMへの書き込み回数は約10,000回)、設定の保存は頻繁に行わないでください。
方法: POST
URL: http://localhost:10001/save_configuration
ボディの例:
{
"device_id": "049D"
}
回答例
{
"ok": true
}
設定
以下の設定エンドポイントは自動生成されます:
- すべての設定(メタデータを含む)を表示する
- 単一の設定値を読み取る
- 設定の適用(個別または一括)
- キーをデフォルト値にリセットする
すべての設定キーの参照はこちらでご確認いただけます
ルート
| 方法 | ルート | 説明 |
|---|---|---|
| 取得 | /settings/ | すべての設定キー、値、およびメタデータを取得します。 |
| 投稿 | /settings/ | 複数の設定をまとめて一度に適用します。 |
| 取得 | /settings/{key} | 特定の設定キーの現在の値を取得します。 |
| 投稿 | /settings/{key} | 特定のキーに新しい値を割り当てる。 |
| 削除 | /settings/{key} | キーをデフォルト値にリセットします。 |
応答形状
取得 /settings/ (すべての設定)
指定されたキーをキーとして持つオブジェクトを返します。各エントリには以下が含まれます:
value: 現在の値metadata: 型 + 制約 + ロック状態
入力例:
{
"devices/detection/timeout": {
"metadata": {
"constraint": {
"range": {
"max": 15,
"min": 1,
"step": 0
}
},
"locked": false,
"type_hint": "INT"
},
"value": 5
}
}
取得 /settings/{key} (単一設定)
指定されたキーの値のみ(メタデータは含まない)を返します。
設定の適用
投稿 /settings/ (一括適用)
複数のキーをまとめて適用します。
推奨されるデータ形式:キーと値を対応付けたJSONオブジェクト。
{
"devices/detection/timeout": 5,
"devices/detection/advanced/wvg_description_filter": ["Haply USB Transceiver", "Haply Handle"]
}
投稿 /settings/{key} (単品購入)
1つのキーに新しい値を割り当てます。
推奨されるデータ形式:生のJSON値、またはラップされた値(可読性を高めるため、ラップされた値を推奨します)。
{
"value": 5
}
設定のリセット
削除 /settings/{key}
キーをデフォルト値に戻します。
これは「デフォルト設定に戻す」ことと同じです。
型ヒント
このサービスは推論する type_hint 自動的に。 GENERIC は、複合型のフォールバックとして使用されます。
対応しているヒント:
BOOLINTFLOATSTRINGVEC2VEC3VEC4TRANSFORMARR_INTARR_FLOATARR_STRINGGENERIC
非推奨のレガシーエンドポイント
いくつか POST エンドポイントは引き続き受け入れられますが、非推奨の警告が表示されます
また、以下の時点で削除される予定です 4.0. 詳しくは 3.5 移行ガイド
非推奨パスから代替ルートへの対応表の全文については、