Commit Graph
9 Commits
Author SHA1 Message Date
adminandClaude Opus 5.5 c40f2bdaf9 Verbinden: Router im Netzwerk finden per MNDP (#53)
Build / build (push) Canceled after 0s
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>
2026-10-16 06:53:33 +02:00
adminandClaude Opus 5.5 0a4221ee6e Testumgebung im Release, Start maximiert mit Startbildschirm (#49, #50)
Build / build (push) Canceled after 0s
- 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>
2026-10-16 06:46:48 +02:00
adminandClaude Opus 5.5 de86a29fab Verbinden: Passwort merken, Felder nebeneinander, Link-Status-Punkt (#42, #31, #54)
Build / build (push) Canceled after 0s
- '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>
2026-10-16 06:22:28 +02:00
adminandClaude Sonnet 5 12ce7bea84 Bekannte Router nicht mehr im Hauptfenster doppeln, nur noch in der Sidebar
Build / build (push) Canceled after 0s
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>
2026-09-17 21:37:53 +02:00
adminandClaude Sonnet 5 3010688b12 Sidebar: dauerhafte Verbindungs-Karte mit Kurzauswahl bekannter Router (#36)
Build / build (push) Canceled after 0s
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>
2026-09-17 21:15:53 +02:00
adminandClaude Sonnet 5 b7af5175dd Bekannte Router: gespeicherte Verbindungen im Verbindungs-Schritt
Build / build (push) Successful in 37s
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>
2026-09-16 21:08:01 +02:00
adminandClaude Sonnet 5 9232a0d065 Geräte-Erkennung: Modell, RouterOS-Version und Schnittstellen auslesen
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>
2026-09-11 19:13:50 +02:00
adminandClaude Sonnet 5 6d47ce72a1 RouterOS-Verbindungsschicht: REST-API mit Fallback auf Binary-API
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>
2026-09-11 19:08:49 +02:00
adminandClaude Sonnet 5 b20c0463a7 Grundgerüst: WPF-Wizard-Shell mit Navigation
.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>
2026-09-11 18:58:05 +02:00