fix(satellite): Scan haengt nicht mehr ewig und blockiert keine anderen Auftraege
Der Satellit HomeOffice war verbunden (Heartbeat lief), beantwortete sat_discover aber nicht mehr — auch ein zweiter Scan blieb ohne Antwort. Ursache: Nachrichten werden nacheinander abgearbeitet (async for … await _handle), und der Scan lief im Loop. Haengt ein Schritt (mDNS/SSDP/ARP/SNMP/ ADB), steht der ganze Satellit — Tunnel und Befehle eingeschlossen. - sat_discover laeuft als eigener Task, der Loop bleibt frei. - Ein Scan ist auf SCAN_MAX_SEC (90 s) begrenzt; danach kommt die letzte bekannte Liste zurueck, und das Log nennt den haengenden Schritt. - Diagnostic: "Scanne Netz …" endet nach 2 Minuten mit einem Hinweis statt fuer immer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+14
-1
@@ -2763,7 +2763,7 @@
|
||||
return;
|
||||
}
|
||||
if (msg.type === 'sat_devices') {
|
||||
if (msg.satellite) { satDevices[msg.satellite] = { devices: msg.devices || [], location: msg.location, ts: Date.now() }; }
|
||||
if (msg.satellite) { satDevices[msg.satellite] = { devices: msg.devices || [], location: msg.location, ts: Date.now() }; delete satScanError[msg.satellite]; }
|
||||
satScanning = null;
|
||||
renderSatellites();
|
||||
return;
|
||||
@@ -5634,6 +5634,7 @@
|
||||
let satellites = []; // [{id, location, caps, control, online}]
|
||||
let satDevices = {}; // id → {devices, location, ts}
|
||||
let satScanning = null; // id des gerade scannenden Satelliten
|
||||
const satScanError = {}; // id → Meldung, wenn ein Scan nicht beantwortet wurde
|
||||
let satCreds = {}; // satId → { ip → [typen] } (welche Creds gesetzt sind, OHNE Secrets)
|
||||
let credsModalSat = ''; // aktuell im Modal bearbeiteter Satellit
|
||||
let credsModalIp = '';
|
||||
@@ -6161,10 +6162,20 @@
|
||||
}).join('');
|
||||
}
|
||||
|
||||
// Antwortet der Satellit nicht, haengt "Scanne Netz …" sonst fuer immer.
|
||||
// Der Satellit selbst bricht einen Scan nach 90 s ab (SCAN_MAX_SEC).
|
||||
function scanSatellite(id) {
|
||||
satScanning = id;
|
||||
delete satScanError[id];
|
||||
renderSatellites();
|
||||
send({ action: 'sat_discover', satellite: id });
|
||||
setTimeout(() => {
|
||||
if (satScanning !== id) return;
|
||||
satScanning = null;
|
||||
satScanError[id] = 'Keine Antwort nach 2 Minuten. Der Satellit ist verbunden, beantwortet den Scan aber nicht — '
|
||||
+ 'vermutlich hängt er. Satellit neu starten (bzw. aktualisieren) hilft.';
|
||||
renderSatellites();
|
||||
}, 120000);
|
||||
}
|
||||
|
||||
/** Anzeigenamen fuer einen Satelliten oder Host-Agenten vergeben.
|
||||
@@ -6218,6 +6229,8 @@
|
||||
let devHtml;
|
||||
if (scanning) {
|
||||
devHtml = '<div style="color:#FFD60A;margin-top:6px;">Scanne Netz …</div>';
|
||||
} else if (satScanError[s.id]) {
|
||||
devHtml = '<div style="color:#FF9F0A;margin-top:6px;">⚠ ' + escapeHtml(satScanError[s.id]) + '</div>';
|
||||
} else if (dev) {
|
||||
if (!dev.devices.length) {
|
||||
devHtml = '<div style="color:#8888AA;margin-top:6px;">Keine Geraete gefunden.</div>';
|
||||
|
||||
Reference in New Issue
Block a user