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_attachedDie 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_positionist 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_withist eine geräteweise 1:1-Zuordnung.POSTbeseitigt Konflikte auf beiden Seiten;DELETELö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ürcursor_position,cursor_velocity,angular_positionundangular_velocity; ohne Auswirkungen auf aktive Sitzungen. set_extension_datafü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_profileund 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.presetmitdefaultsoderarm_frontSetzt nun die Halterung des Geräts auf die Werkseinstellung zurück (zuvor eine stille No-Op).basisbleibt erhalten, damit die in der App konfigurierten Basen Änderungen an der Voreinstellung der Halterung überdauern.force_render_full_stateliefert keinen Snapshot mehr mit fehlendemconfig-Block, wenn die entsprechende Konfiguration in derselben WS-Nachricht eingegangen ist – der Konfigurationspfad wird vor dem Snapshot synchron abgearbeitet.- Sitzungsübergreifend
force_render_full_stateliefert 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_idblockieren die Request-Reply-Schleife nicht mehr. Der Anfragende erhält seinen eigenen Snapshot sowie ein Ereignissession-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
#1234und1234als 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_gatehinweg:"{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 undsafeties/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/*). Alteserialization/*- 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.