Dauer-Editor auf Keepalive/Scheduler-Intervall/Netwatch-Intervall ausgerollt

WireGuard-Peer "Keepalive", Scheduler "Intervall" und Netwatch
"Prüf-Intervall" nutzen jetzt RouterOSFieldSchema.Kind.duration statt
Freitext. Netwatch-Default von "00:00:10" auf "10s" umgestellt, da
DurationFieldEditor.parse nur das Suffix-Format versteht, kein
HH:MM:SS. Vorher live geprüft, dass RouterOS das Suffix-Format bei
allen drei Feldern akzeptiert. Live bestätigt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kay
2026-09-16 10:03:35 +02:00
co-authored by Claude Sonnet 5
parent 8bebef78fd
commit 0237b3afbe
3 changed files with 26 additions and 17 deletions
+14 -6
View File
@@ -1338,12 +1338,20 @@ passenden Namen lesbar. Live bestätigt ("sieht gut aus").
bestätigt (siehe oben), der Moduswechsel im Wizard noch nicht.
4. M10: WLAN-Schemas (an Gerät mit WLAN-Chip), Bonding, PPPoE-Client
(mit echten oder Test-ISP-Zugangsdaten) noch gegen Hardware verifizieren.
5. Optional, kleinere Politur: den neuen Dauer-Editor
(`RouterOSFieldSchema.Kind.duration`) auch auf weitere Zeitwert-Felder
anwenden, die bisher nur Text mit Beispiel-Tooltip sind — WireGuard-
Peer "Keepalive", Scheduler "Intervall", Netwatch "Prüf-Intervall".
Optional auch für den Geräte-Tab, falls dort künftig Zeitfelder
dazukommen.
5. ~~Dauer-Editor (`RouterOSFieldSchema.Kind.duration`) auch auf weitere
Zeitwert-Felder anwenden~~ — erledigt (2026-09-16): WireGuard-Peer
"Keepalive" (Label-Zusatz "(Sekunden)" entfernt, Stepper zeigt Einheit
selbst), Scheduler "Intervall", Netwatch "Prüf-Intervall" (Default
von `"00:00:10"` auf `"10s"` umgestellt — `DurationFieldEditor.parse`
versteht nur das Suffix-Format `<Zahl><d/h/m/s>` bzw. eine nackte
Sekundenzahl, kein `HH:MM:SS`; der alte Default wäre beim Öffnen
stillschweigend als "leer" geparst worden). Vor der Umstellung live
geprüft (Test-Einträge angelegt und sofort wieder entfernt): RouterOS
akzeptiert das Suffix-Format bei allen drei Feldern
(`persistent-keepalive=25s`, Scheduler-`interval=30s`,
Netwatch-`interval=30s`, jeweils im `print terse` bestätigt). Live in
der App bestätigt ("passt, live bestätigt"). Geräte-Tab hat weiterhin
keine Zeitfelder, daher nicht betroffen.
6. ~~Firewall-NAT-/Filter-`add`-Befehle sind bei wiederholtem Wizard-Lauf
weiterhin nicht idempotent~~ — behoben (2026-09-16): im Gegensatz zu den bei Bug 2224
gefixten Menüs (dort per `.set`-Retry auf einem eindeutigen Feld wie
@@ -245,9 +245,9 @@ enum L10n {
"Port der Gegenstelle": "Peer's Port",
"Meist derselbe Port wie der Listen-Port der Gegenstelle, z.B. 51820.":
"Usually the same as the peer's listen port, e.g. 51820.",
"Keepalive (Sekunden)": "Keepalive (seconds)",
"Z.B. 25 — hält die Verbindung durch NAT/Firewalls am Leben. Wichtig bei Clients hinter NAT.":
"E.g. 25 — keeps the connection alive through NAT/firewalls. Important for clients behind NAT.",
"Keepalive": "Keepalive",
"Hält die Verbindung durch NAT/Firewalls am Leben. Wichtig bei Clients hinter NAT.":
"Keeps the connection alive through NAT/firewalls. Important for clients behind NAT.",
"PPPoE-Client": "PPPoE Client",
"Ersetzt eine feste/DHCP-WAN-Adresse durch eine PPPoE-Einwahl beim Provider.":
"Replaces a static/DHCP WAN address with a PPPoE dial-in to the provider.",
@@ -481,8 +481,8 @@ enum L10n {
"Startzeit": "Start Time",
"Z.B. 00:00:00 oder \"startup\".": "E.g. 00:00:00 or \"startup\".",
"Intervall": "Interval",
"Wie oft wiederholt wird, z.B. 1d oder 01:00:00. Leer = nur einmal zur Startzeit.":
"How often it repeats, e.g. 1d or 01:00:00. Empty = only once, at the start time.",
"Wie oft wiederholt wird. Alles auf 0 lassen = nur einmal zur Startzeit.":
"How often it repeats. Leave everything at 0 = only once, at the start time.",
"Auszuführendes Skript": "Script to Run",
"Name eines zuvor unter \"Skripte\" angelegten Skripts.": "Name of a script previously created under \"Scripts\".",
"Zeitplan inaktiv schalten, ohne ihn zu löschen.": "Turn the schedule off without deleting it.",
@@ -512,7 +512,7 @@ enum L10n {
"IP-Adresse oder Hostname, ohne Präfix, z.B. 192.168.88.1 oder 8.8.8.8.":
"IP address or hostname, without a prefix, e.g. 192.168.88.1 or 8.8.8.8.",
"Prüf-Intervall": "Check Interval",
"Z.B. 00:00:10.": "E.g. 00:00:10.",
"Wie oft die Erreichbarkeit geprüft wird.": "How often reachability is checked.",
"Skript bei Erreichbarkeit": "Script on Reachable",
"Name eines Skripts unter \"Skripte\".": "Name of a script under \"Scripts\".",
"Skript bei Nichterreichbarkeit": "Script on Unreachable",
@@ -292,8 +292,8 @@ enum RouterOSSchemaCatalog {
help: "Nur nötig, wenn diese Gegenstelle selbst erreichbar sein muss (Site-to-Site), z.B. eine feste öffentliche IP oder ein DNS-Name. Bei Roadwarrior-Clients, die sich selbst melden, leer lassen."),
RouterOSFieldSchema(key: "endpoint-port", label: "Port der Gegenstelle", kind: .text,
help: "Meist derselbe Port wie der Listen-Port der Gegenstelle, z.B. 51820."),
RouterOSFieldSchema(key: "persistent-keepalive", label: "Keepalive (Sekunden)", kind: .text,
help: "Z.B. 25 — hält die Verbindung durch NAT/Firewalls am Leben. Wichtig bei Clients hinter NAT.")
RouterOSFieldSchema(key: "persistent-keepalive", label: "Keepalive", kind: .duration,
help: "Hält die Verbindung durch NAT/Firewalls am Leben. Wichtig bei Clients hinter NAT.")
],
listColumns: ["interface", "allowed-address"]
),
@@ -681,8 +681,8 @@ enum RouterOSSchemaCatalog {
fields: [
RouterOSFieldSchema(key: "name", label: "Name", kind: .text, help: "Frei wählbar, z.B. taeglicher-neustart.", required: true),
RouterOSFieldSchema(key: "start-time", label: "Startzeit", kind: .text, help: "Z.B. 00:00:00 oder \"startup\"."),
RouterOSFieldSchema(key: "interval", label: "Intervall", kind: .text,
help: "Wie oft wiederholt wird, z.B. 1d oder 01:00:00. Leer = nur einmal zur Startzeit."),
RouterOSFieldSchema(key: "interval", label: "Intervall", kind: .duration,
help: "Wie oft wiederholt wird. Alles auf 0 lassen = nur einmal zur Startzeit."),
RouterOSFieldSchema(key: "on-event", label: "Auszuführendes Skript",
kind: .menuItemPick(menuPath: "/system script", restPath: "system/script", valueField: "name"),
help: "Name eines zuvor unter \"Skripte\" angelegten Skripts."),
@@ -733,7 +733,8 @@ enum RouterOSSchemaCatalog {
fields: [
RouterOSFieldSchema(key: "host", label: "Zu überwachende Adresse", kind: .text,
help: "IP-Adresse oder Hostname, ohne Präfix, z.B. 192.168.88.1 oder 8.8.8.8.", required: true),
RouterOSFieldSchema(key: "interval", label: "Prüf-Intervall", kind: .text, help: "Z.B. 00:00:10.", defaultValue: "00:00:10"),
RouterOSFieldSchema(key: "interval", label: "Prüf-Intervall", kind: .duration,
help: "Wie oft die Erreichbarkeit geprüft wird.", defaultValue: "10s"),
RouterOSFieldSchema(key: "up-script", label: "Skript bei Erreichbarkeit", kind: .text,
help: "Name eines Skripts unter \"Skripte\"."),
RouterOSFieldSchema(key: "down-script", label: "Skript bei Nichterreichbarkeit", kind: .text,