M30: Experte-Tab Mode-Taste-Menü + SSH-Trust-/REST-Fixes
Neues Schema für /system routerboard mode-button (enabled/on-event/ hold-time), live gegen echte Hardware verifiziert. Dabei drei echte Bugs gefunden und gefixt: - SSH-Trust-Dead-End beim ersten Experte-Tab-Schreiben (Backup-vor- Schreiben-Pfad hatte keinen Weg, den Trust-Dialog auszulösen) — ConnectionService.noteUntrustedSSHHostKey - RouterOSFieldSchema.clearable: optionale Felder senden nie mehr einen expliziten Leer-Wert, wenn das RouterOS ablehnt - RouterOSMenuSchema.writesRequireSSH + ConnectionService.applyViaSSH: für Menüs ohne REST-Anbindung (bewiesen per direktem SSH-Test) wird zwingend eine dedizierte SSH-Verbindung genutzt statt REST Live Ende-zu-Ende bestätigt: Skript anlegen, Mode-Taste zuweisen, Tastendruck löst Skript korrekt aus. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+54
@@ -1897,3 +1897,57 @@ Infrastruktur, zuvor gab es nur den DE/EN-Toolbar-Schalter):
|
||||
|
||||
Build+alle 98 Unit-Tests grün nach jedem Schritt. Live bestätigt
|
||||
("passt, lassen wir so").
|
||||
|
||||
**M30: Experte-Tab — "Mode-Taste"-Menü (`/system routerboard mode-button`)**
|
||||
(2026-09-17, gegen echte Hardware live verifiziert):
|
||||
|
||||
1. Recherchiert (help.mikrotik.com, nicht geraten): drei echte Felder
|
||||
`enabled`/`on-event`/`hold-time` (Zeitspanne Min..Max, z.B.
|
||||
"3s..5s"). Als neuer Singleton-Schema-Eintrag in
|
||||
`RouterOSSchemaCatalog.systemFamily` gebaut, `on-event` als
|
||||
`.menuItemPick` auf `/system script` (wie beim bestehenden
|
||||
Zeitplaner). Warnhinweis ergänzt: ab RouterOS 7.1rc4 braucht jede
|
||||
Änderung zusätzlich eine physische Tastenbestätigung am Gerät.
|
||||
2. **Bug 41:** Speichern schlug mit `HTTP 500` fehl. Erste, falsche
|
||||
Spur: `hold-time=""` im gesendeten Befehl (leeres optionales Feld
|
||||
wurde trotzdem mitgeschickt) — dafür neuer
|
||||
`RouterOSFieldSchema.clearable`-Parameter (Default `true`, bricht
|
||||
bestehende Tests nicht), `hold-time` auf `clearable: false` gesetzt.
|
||||
Fix wirkte (Feld verschwand aus dem gesendeten Befehl), **derselbe
|
||||
HTTP-500-Fehler blieb aber** — Beweis, dass das nicht die
|
||||
eigentliche Ursache war. Nutzer führte denselben Befehl direkt per
|
||||
SSH-Terminal aus: lief dort sofort fehlerfrei, `print` bestätigte
|
||||
alle Felder korrekt gesetzt. Damit zweifelsfrei belegt: dieses
|
||||
RouterOS-Hardware-Menü hat schlicht keine REST-API-Anbindung auf
|
||||
diesem Router — eine echte RouterOS-Deckungslücke, kein App-Bug.
|
||||
Fix: neuer `RouterOSMenuSchema.writesRequireSSH`-Parameter +
|
||||
`ConnectionService.applyViaSSH(_:)` (dedizierte SSH-Verbindung,
|
||||
exakt das Muster von `BackupService`/`UpdateService`) —
|
||||
`ExpertViewModel.saveEditingItem()` nutzt sie für so markierte
|
||||
Schemas zwingend statt des Session-Transports. Mode-Taste
|
||||
entsprechend markiert. Live bestätigt: Speichern über die App läuft
|
||||
seitdem fehlerfrei.
|
||||
3. **Bug 42 (kein App-Bug, reines RouterOS-Verhalten, hier
|
||||
dokumentiert weil beim Live-Test dieser Funktion gefunden):**
|
||||
Tastendruck löste das Skript aus, aber
|
||||
`script,error executing script ... failed ... (not enough
|
||||
permissions)` im Log. Skripte, die vom Mode-Button (RouterOS-intern
|
||||
"sys2"-Kontext) ausgelöst werden, laufen mit eingeschränkten
|
||||
Rechten, nicht mit dem vollen Standard-Policy-Set eines manuell
|
||||
angelegten Skripts. Zwei erste Fix-Versuche (Policy einschränken,
|
||||
dann `dont-require-permissions=yes` setzen) zeigten scheinbar keine
|
||||
Wirkung — Ursache: Skriptname war tatsächlich "Button test" (großes
|
||||
B), die Terminal-Befehle zielten auf "button test"/nutzten
|
||||
ungültige `set`-Syntax ohne `[find ...]`/Index, trafen also nie den
|
||||
echten Eintrag (`print detail` bestätigte das: Werte unverändert).
|
||||
Mit korrektem Index-Befehl (`/system script set 0
|
||||
dont-require-permissions=yes`) griff es sofort. **Für jedes
|
||||
künftige Mode-Taste-Skript nötig:** `dont-require-permissions=yes`,
|
||||
sonst schlägt die Ausführung vom Button aus fehl, obwohl dasselbe
|
||||
Skript manuell/per Scheduler einwandfrei liefe. Die App hat dafür
|
||||
noch kein Feld im "Skripte"-Schema (`/system script` kennt nur
|
||||
Name+Inhalt) — für später vorgemerkt (`found.md` Punkt 6).
|
||||
|
||||
Build+alle 99 Unit-Tests grün. Live Ende-zu-Ende bestätigt: Skript
|
||||
anlegen → Mode-Taste zuweisen+speichern (über die App) → Tastendruck
|
||||
löst Skript korrekt aus, Log zeigt den Eintrag.
|
||||
|
||||
Reference in New Issue
Block a user