MndpDiscovery (UDP 5678, Broadcast-Anfrage + Antworten 4 s sammeln, TLV-Parser wie
Mac v1.6.0) findet Router ueber die MAC-Adresse, auch ohne passende IP. Treffer
zeigen Name/Modell/IP/MAC; 'IP uebernehmen' fuellt die Adresse, 'MAC kopieren' mit
Hinweis auf WinBox bei Routern ohne IP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Demo-Geraete nicht mehr nur in Debug-Builds: Abschnitt 'Testumgebung' im
Verbindungs-Schritt, abschaltbar in den Einstellungen (Mac v1.8.0)
- Ein simuliertes Geraet je Host fuer die App-Laufzeit, Aenderungen ueberstehen
Wiederverbinden (z. B. simulierter Neustart)
- Hauptfenster startet maximiert, Startbildschirm ca. 2,5 s (Mac v1.7.0/v1.8.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 'Passwort merken' (aus = gespeichertes Passwort wird geloescht), Fehler beim Speichern
in der Anmeldeinformationsverwaltung wird angezeigt (Mac v1.11.4)
- Benutzername/Passwort nebeneinander, damit 'Verbindung testen' ohne Scrollen sichtbar ist
- Schnittstellenliste mit Punkt gruen/grau fuer den Link-Status (Mac v1.3.0)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nutzer-Feedback: Seit dem Sidebar-Umbau gab es "Bekannte Router" doppelt —
als vollständige Bearbeitungsliste im Verbindungs-Schritt (Hauptfenster) und
als Kurzauswahl in der Sidebar. Der Verbindungs-Schritt zeigt jetzt nur noch
das Formular für ein neues, unbekanntes Gerät.
Rückfrage zur Konsequenz: Bearbeiten (Name/Standort) und Entfernen gab es
bisher nur in der jetzt entfernten Liste. Auf Nutzerwunsch zieht "Entfernen"
kompakt in die Sidebar (kleines Papierkorb-Symbol neben jedem Eintrag);
Umbenennen entfällt bewusst — der Name kommt weiterhin automatisch vom
Gerätemodell.
Aufgeräumt: UseSavedRouterCommand (kein eigenes Kommando mehr nötig, nur noch
intern von ConnectToSavedRouterAsync genutzt) und SavedRouterEntry.ToSavedRouter
(war ausschließlich für die jetzt entfernte Bearbeiten-Persistenz da) entfernt.
Core-Suite unverändert grün (138 Tests). Nicht-destruktiver Smoke-Test
bestätigt, dass die Sidebar weiterhin alle bekannten Router korrekt lädt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nutzer-Wunsch "Optik-Renew": Sidebar zeigt jetzt unabhängig vom aktuellen
Schritt eine Verbindungs-Karte statt nur Logo + Schritt-Liste.
- Nicht verbunden: kompakte Liste bekannter Router (Name + Host/Benutzername),
ein Klick verbindet direkt und springt bei Erfolg automatisch weiter
(ConnectionStepViewModel.ConnectToSavedRouterCommand kombiniert
UseSavedRouter+TestConnectionAsync; MainViewModel.QuickConnectCommand ruft
das auf und geht bei Erfolg per GoNextCommand weiter).
- Verbunden: grüner Punkt + Gerätename/-modell (MainViewModel.
ConnectedDeviceLabel — fällt auf den Host zurück, bis die Geräte-Erkennung
gelaufen ist) + "Wechseln"-Button (trennt Verbindung, setzt session.Device
zurück, springt zum Verbindungs-Schritt).
Manuelle Formular-Eingabe für neue Geräte bleibt bewusst auf der
Verbindungs-Schritt-Seite — passt nicht kompakt in die schmale Sidebar.
Als eigener Entwurf umgesetzt (kein Referenz-Screenshot vorgegeben), im
bestehenden WPF-UI/Fluent-Stil. WPF-Smoke-Test für ConnectedDeviceLabel-
Übergänge und den Wechseln-Ablauf; QuickConnect selbst per Code-Review
verifiziert (dünner Wrapper um bereits getestete Pfade, im Scratch-Harness
nicht end-to-end testbar wegen internem WindowsCredentialStore-Zugriffs).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Nach erfolgreicher Verbindung wird Host/Benutzername/Modellname lokal
gemerkt (SavedRoutersStore, JSON unter %AppData%), mit editierbarem
Namen und Standort-Feld. Das Passwort liegt separat im Windows-
Anmeldeinformationsspeicher (WindowsCredentialStore, P/Invoke auf
advapi32.dll) statt im Klartext -- bewusst in App statt Core, da Core
plattformneutral bleibt.
Da viele MikroTik-Geraete werksseitig dieselbe Standardadresse nutzen
(192.168.88.1/admin), waere Host+Benutzername allein nicht eindeutig:
RouterDevice liest jetzt zusaetzlich die Seriennummer aus
(/system/routerboard), SavedRoutersStore legt bei Host+Benutzername-
Treffer mit unterschiedlicher Seriennummer einen eigenen Eintrag an
statt den bestehenden zu ueberschreiben. Ansatz 1:1 von der parallel
entwickelten Mac-Version uebernommen (dort M26/M27), vom Nutzer live
bestaetigt.
README zusaetzlich um den auf dem mac-version-merge-Branch liegen
gebliebenen Ablaufplan/M-*-Milestone-Katalog ergaenzt, der bisher nicht
in main uebernommen war, und auf den aktuellen Stand gebracht (v1.2,
CI/CD, M-Bekannte-Router als abgeschlossen markiert).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
DeviceDiscoveryService liest /system/resource, /system/identity,
/system/routerboard und /interface über IRouterOsClient aus und baut
daraus ein RouterDevice-Modell (inkl. Erkennung, ob WLAN-Schnittstellen
vorhanden sind). Anfragen laufen bewusst sequenziell, da die binäre API
auf einer TCP-Verbindung immer nur einen Befehl gleichzeitig verarbeitet.
WizardSession hält die einmal hergestellte Geräteverbindung über den
gesamten Assistenten hinweg (bisher wurde sie nach dem Verbindungstest
sofort wieder geschlossen). Der Verbindungs-Schritt übergibt den Client
jetzt an die Session statt ihn zu verwerfen; das Hauptfenster schließt
die Verbindung beim Beenden der App sauber.
Neuer Geräte-Erkennungs-Schritt lädt beim Betreten automatisch die
Gerätedaten (WizardStepViewModelBase.OnActivatedAsync-Hook) und zeigt
Modell, RouterOS-Version, Architektur und alle Schnittstellen mit
Status an; bei Fehlern gibt es eine "Erneut versuchen"-Option.
Unit-Tests für DeviceDiscoveryService über ein Test-Double von
IRouterOsClient, ohne echtes Gerät.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
IRouterOsClient als einheitliche Abstraktion (Get/Add/Set/Remove/Execute)
über RouterOS-Menüpfade. RestRouterOsClient spricht die RouterOS-7-REST-API
(JSON über HTTP/HTTPS), BinaryRouterOsClient implementiert das RouterOS-
API-Wortprotokoll direkt (Port 8728/8729) für ältere Geräte.
RouterOsClientFactory probiert REST zuerst und fällt automatisch auf die
Binary-API zurück, damit die Wizard-Schritte protokollunabhängig bleiben.
Verbindungs-Schritt im Wizard testet die Zugangsdaten live gegen das
Gerät und schaltet "Weiter" erst nach erfolgreichem Verbindungstest frei.
Unit-Tests für die Wortkodierung des Binärprotokolls (Längenkodierung,
Mehrwort-Sätze, Satzgrenzen) ohne echtes Gerät.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
.NET 8 Solution mit App (WPF/WPF-UI), Core und Core.Tests.
Generische Schritt-Navigation (MainViewModel) mit Platzhalter-Schritten
als Basis für die kommenden Interview-Schritte.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>