跳转至正文

00. 设备列表

通过 HTTP REST API 检索所有已连接的Haply 设备——无需 WebSocket 即可实现。这是一个简单的烟雾测试,用于验证运行时是否正在运行且能否检测到硬件。

学习内容:

  • GET /devices调用Inverse3 查询 VerseGrip 和无线 VerseGrip 设备列表
  • 从 JSON 响应中读取设备 ID,并按设备类型进行分组
  • 使用会话选择器在原始设备坐标与会话的应用程序空间视图之间切换

工作流​

  1. GET http://localhost:10001/devices 发送请求。
  2. 解析 JSON 响应——共有三个顶级数组: 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++示例在查询时不使用选择器。

参数​

参数默认值用途
服务网址http://localhost:10001HTTP 默认 URL
端点/devices设备搜索端点
会话选择器(无)?session=:0, ?session=:-1, ?session=:my_profile:0, ?session=co.haply.hub::*:0 (支持通配符)— 选择器 注:在 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 规范·选择器·会话