本文へスキップ

00. デバイス一覧

HTTP REST API を通じて接続されているすべてのHaply デバイスを検索します — WebSocket を使用しなくても可能です。これは、ランタイムが実行中で、ハードウェアを検知できているかどうかを確認するための簡単なスモークテストです。

学習内容:

  • GET /devicesInverse3 、VerseGrip、ワイヤレスVerseGripデバイスの一覧を表示するには、以下を呼び出します。
  • JSONレスポンスからデバイスIDを読み取り、デバイスタイプごとにグループ化する
  • セッションセレクタを使用して、生のデバイス座標とセッションのアプリケーション空間ビューを切り替える

ワークフロー​

  1. GET http://localhost:10001/devices リクエストを送信します。
  2. JSONレスポンスを解析します — 最上位の配列は3つあります: inverse3, verse_grip, wireless_verse_grip.
  3. デバイスIDをタイプごとにグループ化して出力します。配列が空の場合は、そのタイプのデバイスが検出されていないことを意味します。
  4. セッションセレクタを ?session=<selector> 形式的に言えば、応答は当該セッションのデバイスにフィルタリングされ、座標はセッションのアプリケーション空間(basis、mount、workspaceが適用された状態)に変換されます。Pythonのサンプルでは、これを --session SELECTOR CLIによる買収を通じて提供します(:profile:instance, #id, :-1, :0, … 許可)。このフラグとヘルプテキストは チュートリアル 08(HTTP リモート設定)で使用されているものと同じであるため、ここで見つけたセレクタをそのままそこに貼り付けることができます。C++のサンプルでは、セレクタを使用せずに検索を行います。

パラメータ​

パラメータデフォルト値用途
サービスURLhttp://localhost:10001HTTPのデフォルトURL
エンドポイント/devicesデバイス検索エンドポイント
セッションセレクタ(なし)?session=:0, ?session=:-1, ?session=:my_profile:0, ?session=co.haply.hub::*:0 (Globワイルドカード対応) — セレクター 注:Pythonのサンプルでは --session SELECTORとして表示されます(チュートリアル 08(同じフラグ)。

主要なコード​

Pythonのサンプルでは、セッションセレクタを --session SELECTOR argparse の引数として公開されます。この引数が指定されない場合、デバイスは生デバイス空間座標として返されますが、引数を指定すると、選択したセッションのデバイスにフィルタリングされ、アプリケーション空間に変換されます。ヘルプテキストは チュートリアル 08(HTTP リモート設定)これと同じであるため、ここで見つけたセレクタをそのままそこに貼り付けることができます。

def parse_args():
parser = argparse.ArgumentParser(
description="List connected Haply Inverse devices via the HTTP API.")
parser.add_argument(
"--session", type=str, default="",
help=(
"Session selector. Formats:\n"
" :profile:instance by profile name (e.g. ':my_profile:0')\n"
" pattern:instance glob wildcard in profile (e.g. 'co.haply.hub::*:0')\n"
" '*' matches any sequence, '?' one character\n"
" #session_id by numeric id (e.g. '#42' — quote in shells to escape '#')\n"
" :-1 the last active session\n"
" :0 the first session"
))
return parser.parse_args()

def main():
args = parse_args()
session = args.session or None

url = f"{BASE_URL}/devices"
if session:
url += f"?session={session}"
print(f"Querying devices for session '{session}' (application space)\n")
else:
print("Querying all detected devices (device space)\n")

r = requests.get(url, timeout=3)
r.raise_for_status()
data = r.json()

print_devices("Inverse3", data.get("inverse3"))
print_devices("Wired Verse Grip", data.get("verse_grip"))
print_devices("Wireless Verse Grip", data.get("wireless_verse_grip"))
SDKインストーラーに含まれる

チュートリアル 00もSDKとともにローカルにインストールされています — サービスのインストールディレクトリ内の tutorials/00-haply-inverse-device-list/こちらでご確認ください。

出典: Python·C++·C++ Glaze

関連ドキュメント: JSONの規約·セレクタ·セッション