Zum Hauptinhalt springen
Version: 3.5.x

01. Inverse3 drucken

Stellt eine Verbindung zum Simulations-WebSocket her und überträgt die Cursorposition, Geschwindigkeit und Kraft des ersten Inverse3 Dienst meldet.

Was Sie lernen werden:

  • Eine WebSocket-Verbindung herstellen und die erste Full-State-Nachricht empfangen
  • Eine Kraft von Null senden set_cursor_force Keepalive, um die Sitzung aufrechtzuerhalten
  • Ein Sitzungsprofil registrieren, damit Haply Ihre Simulation erkennt
  • Das Handshake-Muster „Nur erste Nachricht“ – „strip session/configure“ nach dem ersten Sendevorgang
  • Die Konsolenausgabe auf ein überschaubares Maß drosseln

Arbeitsablauf

  1. Öffne einen WebSocket zu ws://localhost:10001. Der Dienst sendet umgehend eine Vollbild Auflistung der verbundenen Geräte.
  2. Wähle im ersten Frame die ersten Inverse3 aus device_id und erstellen Sie eine Anforderungsnachricht, die aus zwei Teilen besteht:
    • session.configure.profile.name — registriert die Simulation bei Haply Hub.
    • Pro Gerät set_cursor_force Befehl mit einem Nullvektor. Der Dienst nutzt dies als Keepalive – er sendet so lange Status-Frames, wie Befehle eingehen.
  3. Sende die Nachricht zurück. Entfernen Sie die session Feld vor dem nächsten Tick – das Sitzungsprofil ist ein einmaliger Handshake; bei den folgenden Ticks wird nur der Befehl gesendet.
  4. Bei jedem folgenden Status-Frame: Cursor anzeigen vec3 Felder (Position, Geschwindigkeit, Kraft), auf ca. 10 Hz gedrosselt, und das Keepalive-Signal für Nullkraft erneut senden.

Parameter

NameStandardZweck
URIws://localhost:10001WebSocket-URL des Simulationskanals
PRINT_EVERY_MS100Drosselung der Konsolenausgabe
Name des Sitzungsprofilsco.haply.inverse.tutorials:print-inverse3Identifiziert diese Simulation im Haply

Statusfelder gelesen

Von data.inverse3[0].state:

  • cursor_position, cursor_velocity, current_cursor_forcevec3 jeweils

Senden / Empfangen

Die WebSocket-Schleife: einen Status-Frame empfangen, einen Befehlsrahmen. Der erste Befehlsrahmen enthält den Sitzungs-Handshake und eine Nullkraft set_cursor_force Keepalive; jeder nachfolgende Frame enthält nur der Keepalive (die Sitzung wird beendet).

Einzelne asynchrone Schleife — recv() → Build-Befehl → send() → Wiederholen.

async with websockets.connect(URI) as websocket:
while True:
msg = await websocket.recv()
data = json.loads(msg)

if first_message:
first_message = False
device_id = data["inverse3"][0]["device_id"]
request_msg = {
"session": {"configure": {"profile": {
"name": "co.haply.inverse.tutorials:print-inverse3"}}},
"inverse3": [{
"device_id": device_id,
"commands": {"set_cursor_force":
{"vector": {"x": 0.0, "y": 0.0, "z": 0.0}}},
}]
}

await websocket.send(json.dumps(request_msg))
request_msg.pop("session", None) # one-shot handshake

Quelle: Python · C++ · C++ Glaze

Siehe auch: WebSocket-Protokoll · Steuerbefehle (set_cursor_force) · Sitzungen · Typen (vec3)