HTTP
기본적으로 HTTP 서비스가 시작됩니다: http://localhost:10001.
이 포트는 서비스 설정에서 변경할 수 있습니다.
개요
이 섹션에서는 서비스에서 제공하는 HTTP 경로를 설명합니다.
아래의 모든 경로는 기본 기본 URL을 기준으로 합니다: http://localhost:10001.
표준 회신용 봉투
모든 엔드포인트는 다음 두 가지 형식의 응답 중 하나를 반환합니다:
데이터 없음 응답 (변이 전용 평가 지표에서 사용됨):
{ "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 | 인덱스(0부터 시작) Inverse3 첫 번째 Inverse3 |
inverse3/A14 | 장치 ID가 Inverse3 A14 |
inverse3/* | 모든 Inverse3 (일괄 지정) |
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> 세션을 식별하기 위한 쿼리 매개변수.
| 표현 | 뜻 |
|---|---|
| (생략) | 모든 세션 (삭제 전용) |
#123 또는 123 | ID가 123인 세션 |
:-1 | 인덱스별 최근 세션 |
:0 | 인덱스별 첫 번째 세션 |
예시: 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 본문에는 반드시 하나 이상의 필드가 포함되어야 합니다.
| 방법 | 경로 | 본문 | 답변 |
|---|---|---|---|
| 받기 | /{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= | -- | 둘 다 0으로 초기화됩니다 |
포스 게이트
| 방법 | 경로 | 본문 | 답변 |
|---|---|---|---|
| 받기 | /{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 작동합니다. 주의: 특정 기기에 적용할 수 있는 저장 횟수(약 10,000회 EEPROM 쓰기)가 제한되어 있으므로, 설정을 너무 자주 저장하지 마십시오.
방법: 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} (단일 신청)
단일 키에 새로운 값을 적용합니다.
권장되는 데이터 형식: 원시 JSON 값 또는 래핑된 값(가독성을 위해 래핑된 값을 권장합니다).
{
"value": 5
}
설정 초기화
삭제 /settings/{key}
키를 기본값으로 재설정합니다.
이는 "기본값으로 초기화"하는 것과 같습니다.
타입 힌트
이 서비스는 추론하여 type_hint 자동으로. GENERIC 복합형에 대한 대체값으로 사용됩니다.
지원되는 힌트:
BOOLINTFLOATSTRINGVEC2VEC3VEC4TRANSFORMARR_INTARR_FLOATARR_STRINGGENERIC
사용 중단된 레거시 엔드포인트
몇몇 POST 엔드포인트는 여전히 허용되지만 사용 중단 경고가 표시되며
향후 제거될 예정입니다 4.0. 참조: 3.5 버전 마이그레이션 가이드
전체 ‘사용 중단된 경로 → 대체 경로’ 표를 보려면.