From 9218b95e6e756b01514f600c66cee7bef45a9929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Sat, 30 May 2026 08:52:10 +0200 Subject: [PATCH] =?UTF-8?q?Dreh-Speed=20Dropdown=20im=20Admin,=20Kalibrier?= =?UTF-8?q?ungsversuch=20r=C3=BCckg=C3=A4ngig=20gemacht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Auto-Rotate Speed wählbar: 20-50% in 5er-Schritten (Standard 20%) - BNO085 Magnetometer-Kalibrierung: calibration_status liefert immer 0, da der Sensor 3D-Bewegung benötigt die am Boden nicht möglich ist. Kalibrierungs-Feature vollständig entfernt. - Empfehlung: Nord-Offset nach jedem Neustart neu setzen. Co-Authored-By: Claude Sonnet 4.6 --- gui/admin.html | 19 ++++++++++++++++++- scripts/exomy_admin_api.py | 4 ++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gui/admin.html b/gui/admin.html index e7b66f8..a6cff26 100644 --- a/gui/admin.html +++ b/gui/admin.html @@ -189,6 +189,21 @@ ° (0=N, 90=O, 180=S, 270=W) +
+ + Dreh-Speed + + + +
@@ -2946,14 +2961,16 @@ async function startRotate() { var input = document.getElementById('rotate_target'); + var speedEl = document.getElementById('rotate_speed'); var target = parseFloat(input ? input.value : 0); + var speedPct = speedEl ? parseInt(speedEl.value) : 20; if (isNaN(target)) { alert('Ungültiger Winkel'); return; } setAdminStatus('Starte Drehung zu ' + target + '°…'); try { var response = await fetch(adminApiBase + '/api/imu/rotate-to', { method: 'POST', headers: {'Content-Type': 'application/json'}, - body: JSON.stringify({target_deg: target}) + body: JSON.stringify({target_deg: target, speed_pct: speedPct}) }); var data = await response.json(); if (!response.ok) throw new Error(data.status || ('status ' + response.status)); diff --git a/scripts/exomy_admin_api.py b/scripts/exomy_admin_api.py index 96abdae..588b1b0 100644 --- a/scripts/exomy_admin_api.py +++ b/scripts/exomy_admin_api.py @@ -2319,10 +2319,12 @@ class Handler(http.server.BaseHTTPRequestHandler): self.write_json(status_code, response) return + if self.path == '/api/imu/rotate-to': try: payload = json.loads(raw_body.decode('utf-8')) target_deg = float(payload.get('target_deg', 0)) + speed_pct = max(20, min(50, int(payload.get('speed_pct', 20)))) except (UnicodeDecodeError, json.JSONDecodeError, TypeError, ValueError): self.write_json(400, {'status': 'Ungültige Anfrage'}) return @@ -2333,10 +2335,12 @@ class Handler(http.server.BaseHTTPRequestHandler): return import imu_rotate heading_offset = read_imu_heading_calibration()['offset_deg'] + vel = max(1, int(100.0 * (speed_pct / 100.0) ** 2.0)) status = imu_rotate.start_rotate( target_deg=target_deg, heading_offset=heading_offset, restore_mode=LAST_LOCOMOTION_MODE, + vel=vel, ) self.write_json(200, {'status': 'Drehung gestartet', 'rotate': status}) return