Bug 38: NTP-Zeitserver-Feld korrigiert (HTTP 400)

/system/ntp/client hat in RouterOS 7.x kein "servers"-Feld — die Server
liegen in einer eigenen Liste /system ntp client servers. Schema in
RouterOSSchemaCatalog.swift aufgeteilt (Singleton enabled/mode + neue
Listen-Menü-Schema mit Feld "address"), zusätzlich "enabled" auf
"disabled" korrigiert (RouterOS-Konvention für Listen-Einträge).
Live gegen echten Router bestätigt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kay
2026-09-16 19:43:59 +02:00
co-authored by Claude Sonnet 5
parent adb3a661ab
commit be04fc2fc0
2 changed files with 40 additions and 4 deletions
@@ -658,17 +658,32 @@ enum RouterOSSchemaCatalog {
menuPath: "/system ntp client", restPath: "system/ntp/client", category: .system,
displayName: "Zeitserver (NTP)",
summary: "Hält die Router-Uhr über einen Zeitserver synchron.",
explanation: "",
explanation: "Die Server-Liste selbst liegt in einem eigenen Menü (\"NTP-Zeitserver-Liste\") — hier nur Ein/Aus und Modus.",
warning: "Falsche Systemzeit kann Zertifikatsprüfungen (HTTPS/REST) und Log-Zeitstempel durcheinanderbringen.",
fields: [
RouterOSFieldSchema(key: "enabled", label: "Aktiviert", kind: .bool,
help: "Zeitsynchronisation ein-/ausschalten.", defaultValue: "yes"),
RouterOSFieldSchema(key: "servers", label: "Zeitserver", kind: .text,
help: "Ein oder mehrere Server, kommagetrennt, z.B. pool.ntp.org.")
RouterOSFieldSchema(key: "mode", label: "Modus", kind: .enumPick(options: [
"unicast", "broadcast", "multicast", "manycast"
]), help: "Fast immer \"unicast\" (direkte Anfrage an feste Server).", defaultValue: "unicast")
],
listColumns: ["servers"],
listColumns: ["enabled", "mode"],
isSingleton: true
),
RouterOSMenuSchema(
menuPath: "/system ntp client servers", restPath: "system/ntp/client/servers", category: .system,
displayName: "NTP-Zeitserver-Liste",
summary: "Die Zeitserver, die der Client abfragt.",
explanation: "\"servers\" ist bei RouterOS 7.x kein Feld am NTP-Client selbst, sondern eine eigene Liste — jeder Server ist ein eigener Eintrag hier (statt kommagetrennt in einem Textfeld).",
fields: [
RouterOSFieldSchema(key: "address", label: "Adresse", kind: .text,
help: "Hostname oder IP eines Zeitservers, z.B. pool.ntp.org.", required: true),
RouterOSFieldSchema(key: "disabled", label: "Deaktiviert", kind: .bool,
help: "Diesen Server deaktivieren, ohne ihn zu löschen.", defaultValue: "no"),
RouterOSFieldSchema(key: "comment", label: "Kommentar", kind: .text, help: "Nur zur eigenen Wiedererkennung.")
],
listColumns: ["address", "disabled"]
),
generic("/system logging", "system/logging", .system, "Protokollierung",
"Was der Router mitschreibt und wohin (Speicher, Datei, Remote-Syslog, E-Mail).",
"Besteht aus \"rules\" (was protokolliert wird) und \"actions\" (wohin) — hier generischer Zugriff, verwandte Teile über \"Eigener Menüpfad\" (z.B. \"/system logging action\")."),