Zum Hauptinhalt springen

v3.5.1

3.5.1 ist eine Stabilisierungs- und Qualitätsversion. Die Schwerpunkte sind: automatische Zuordnung bei 1↔1-Konfigurationen mit „ Inverse3 “ und „Griff“, aktuelle Bewegungsdaten über GET /devices/{id} ohne eine offene WebSocket-Sitzung, ein Ende des Quietschens beim Wechsel zwischen Kraft- und Positionsmodus sowie einen selbstoptimierenden Scheduler für den Service-Tick unter Dauerlast.

Highlights​

  • Automatische Paarung für 1↔1-Installationen mit „ Inverse3 “ und Griff. Sobald ein „ Inverse3 “ und ein Griff bereit sind, erkennt das SDK automatisch eine Kopplung. pen_attached Die Freischaltung der „ Minverse “-Kalibrierung wird in Setups mit mehreren Geräten nicht mehr fehlgeleitet.
  • Aktuelle Einblicke in GET /devices/{id} ohne öffentliche Sitzung. Bei „ Inverse3 “, „Inverse3x“ und „ Minverse “ mit Firmware ab Version 7.5 wird der Bewegungsstatus nun unabhängig von der WebSocket-Aktivität mit einer Frequenz von 20 Hz abgefragt. Firmware-Versionen vor 7.5 überspringen die Abfrage und geben einmalig eine Warnung aus.
  • Beim Umschalten zwischen Kraft und Position gibt es kein Quietschen mehr. Das Umschalten zwischen set_cursor_force ↔ set_cursor_position ist slot-exklusiv: Zwischen zwei Ticks bleibt pro Gerät nur der jeweils neueste Befehl erhalten. Der Workaround für 200-ms-Leerlaufpausen in HARP ist nicht mehr erforderlich.
  • Selbstanpassender Tick-Scheduler. Die Hauptschleife passt ihre Sendefrequenz je nach Auslastung an, sodass ein langsamer Tick die Befehlswarteschlange nicht unbegrenzt anwachsen lässt.
  • Streaming-Antworten unter Last nach dem Prinzip „1 rein, 1 raus“. Streaming-Antworten pro WS-Nachricht sind pro Sitzung auf 1/ms begrenzt. Tritt diese Begrenzung ein, wird der vorherige Puffer erneut abgespielt, sodass Simulationsschleifen niemals an recv() blockieren.

Interne Verbesserungen​

Geräte​

  • Geräteweises Kopplungsregister für „ Inverse3 “ ↔ „VerseGrip“. GET|POST|DELETE /devices/{sel}/paired_with ist eine geräteweise 1:1-Zuordnung. POST beseitigt Konflikte auf beiden Seiten; DELETE Löscht den ausgewählten Eintrag; der Selektor muss auf genau eine ID abgeglichen werden.
  • Abfrage des Bewegungsstatus mit 20 Hz ab Firmware-Version 7.5+. GET /devices/{id} liefert alle 50 ms aktuelle Werte für cursor_position, cursor_velocity, angular_position und angular_velocity; ohne Auswirkungen auf aktive Sitzungen.
  • set_extension_data für VerseGrip mit funkgesteuerter Ausbringungsmenge. Die Pipeline verwirft ältere Werte, wiederholt im Leerlauf den letzten Wert und wird beim Service-Tick geleert. Zu häufiges Senden überlastet die Funkverbindung nicht mehr, zu seltenes Senden hinterlässt keinen veralteten Wert mehr.

Sitzungen​

  • Der neue WS-Empfangs-Schnellpfad für reine Steuerungs-Batches (Kraft/Position) umgeht die konfigurationsabhängige Pipeline; configure / set_profile und benutzerdefinierte Befehle werden weiterhin über den Race-Fix ausgeführt.

Beobachtbarkeit​

  • Der Erkennungsrhythmus wird pro Port gesteuert und berücksichtigt, wie lange eine Meldung andauert. Jeder Port auf der Sperrliste wird unabhängig gedrosselt; die wiederkehrende Zeile "...blacklisted: skipping" trägt nun (×N) für Ticks, die zwischen zwei Auslösungen unterdrückt wurden.
  • Die Funkerkennung von VerseGrip überflutet das Protokoll nicht mehr, wenn ein Gerät abgefragt wird, das nicht dem WVG entspricht.

Fehlerbehebungen​

  • POST /device.config.preset mit defaults oder arm_front Setzt nun die Halterung des Geräts auf die Werkseinstellung zurück (zuvor eine stille No-Op). basis bleibt erhalten, damit die in der App konfigurierten Basen Änderungen an der Voreinstellung der Halterung überdauern.
  • force_render_full_state liefert keinen Snapshot mehr mit fehlendem config-Block, wenn die entsprechende Konfiguration in derselben WS-Nachricht eingegangen ist – der Konfigurationspfad wird vor dem Snapshot synchron abgearbeitet.
  • Sitzungsübergreifend force_render_full_state liefert einen vollständigen Snapshot des Ziels. Sowohl A als auch B erhalten nun eine vollständige Nutzlast (zuvor erhielt A nur Streaming-Daten).
  • Sitzungsübergreifende Befehle mit unbekannter target_session_id blockieren die Request-Reply-Schleife nicht mehr. Der Anfragende erhält seinen eigenen Snapshot sowie ein Ereignis session-command-dropped (cross-session-unknown-target).
  • Freischaltungen der „ Minverse “-Kalibrierung über mehrere Geräte werden nicht mehr fehlgeleitet. Die Kalibrierung von „ Minverse “ A schaltet „ Minverse “ B nicht mehr frei; dieselbe Korrektur gilt für den Heading-Broadcast bei „inkwell-success“.
  • Geräteselektor von HTTP akzeptiert #1234 und 1234 als Geräte-ID; Selektorklassen (inverse3, verse_grip) funktionieren in Verbindung mit dem Index; 404-Meldungen behalten den ursprünglichen Selektorausdruck bei.
  • Das ready-Flag bei VerseGrip per Funk wird nun erst nach dem anfänglichen Geräteinfo-Handshake gesetzt – zuvor konnte es auf bestimmten Re-Attach-Pfaden springen, bevor sich das Gerät vollständig angemeldet hatte.
  • Änderungen an den Laufzeiten von „Keyed-Rate-Gate“-basierten Einstellungen werden nun beim nächsten Zugriff wirksam (bisher wurden sie beim ersten „Emplace“ eingefroren; nur neue Sitzungen übernahmen die Änderung).

Mögliche Breaking Changes​

  • 404-Meldungen von HTTP vereinheitlicht über basis, preset, mount, transform, force_gate hinweg: "{type} device #{id} not found" → "no device matches selector '{expr}'". Die 404-Meldung für Sitzungen wurde entsprechend angepasst.
  • Einstellungen – Allgemein devices/inverse*/... → devices/*inverse/... für die Verstärkung der Kraftskalierung, die Verstärkung des Kraft-Gates, das Steuer-Timeout und safeties/expose_in_snapshot. Die Einstellungsdateien aus Version 3.5.0 mit dem alten Literal führen beim Binden zu Fehlern.
  • Einstellungen: Serialisierungs-Globals verschoben nach session/serialization/* (explicit_fields, force_complete_transforms, preview/*). Alte serialization/*- Pfade werden weiterhin über veraltete Aliase aufgelöst; Entfernung in Version 4.0.
  • Verhalten: Clients, die die WS-Antwort pro Nachricht als Tick-Sync-Handshake nutzen, erhalten unter Dauerlast höchstens eine Antwort pro Millisekunde und Sitzung. Vollständige Snapshots bei Konfigurationsänderungen bleiben davon unberührt.

Veraltete Funktionen​

Keine in 3.5.1. Der Preview-Hauptschalter bildet die Grundlage für die kommende Pipeline in 3.6, die stille Hinweise in Warnungen umwandelt; die erste Deprecation-Runde ist für 3.5.2 geplant.