fix: Geräte-Marker für Systeme ohne Statusdaten anzeigen (z. B. GMA)

- `createAndSetDevices.js` angepasst, sodass Marker auch ohne `statusDistrictData` erzeugt werden.
- Problem behoben, dass Marker wie GMA trotz vorhandener Koordinaten und Sichtbarkeit nicht gezeichnet wurden.
- Sicherheitsprüfung für Statusdaten optional gemacht, um Systems ohne Messdaten darzustellen.
This commit is contained in:
ISA
2025-07-30 11:13:34 +02:00
parent 6d33be56c0
commit 53c670feba
15 changed files with 87 additions and 41 deletions

View File

@@ -33,10 +33,15 @@ app.prepare().then(() => {
const io = new Server(server);
// ✅ Globaler Cache für alle aktuellen Daten
const globalDataCache = new Map();
io.on("connection", socket => {
const { m: idMap, u: idUser } = socket.handshake.query;
console.log(`🔌 WebSocket verbunden (idMap=${idMap}, idUser=${idUser})`);
const cacheKey = `${idMap}_${idUser}`;
const endpoints = [
{
name: "GisLinesStatus",
@@ -69,6 +74,22 @@ app.prepare().then(() => {
const lastDataMap = {};
// ✅ Funktion um sofort alle verfügbaren Daten zu senden (für Browser-Reload)
const sendAllCurrentData = () => {
const cachedData = globalDataCache.get(cacheKey);
if (cachedData && Object.keys(cachedData).length > 0) {
console.log(
`📦 Sending all current data to client (${Object.keys(cachedData).length} endpoints)`
);
Object.entries(cachedData).forEach(([name, data]) => {
socket.emit(`${name}Updated`, data);
console.log(`🔄 Browser-Reload: ${name} data sent`);
});
} else {
console.log(`📭 No cached data available for ${cacheKey}, will fetch fresh data`);
}
};
const fetchData = async () => {
for (const { name, getUrl, mock } of endpoints) {
try {
@@ -99,6 +120,14 @@ app.prepare().then(() => {
}
const newDataStr = JSON.stringify(statis);
// ✅ Cache aktualisieren
if (!globalDataCache.has(cacheKey)) {
globalDataCache.set(cacheKey, {});
}
globalDataCache.get(cacheKey)[name] = statis;
// ✅ Nur bei Änderungen senden (setInterval-Logik)
if (newDataStr !== lastDataMap[name]) {
lastDataMap[name] = newDataStr;
socket.emit(`${name}Updated`, statis);
@@ -113,9 +142,15 @@ app.prepare().then(() => {
}
};
// fetchData immer ausführen unabhängig vom Modus
// ✅ Beim Connect: Sofort alle aktuellen Daten senden (für Browser-Reload)
sendAllCurrentData();
// ✅ Dann erste Datenabfrage durchführen
fetchData();
// ✅ setInterval für regelmäßige Updates (nur bei Änderungen)
const interval = setInterval(fetchData, 5000); // 5 Sekunden ,TALAS.web nutzt 12 Sekunden
socket.on("disconnect", () => {
clearInterval(interval);
console.log("❌ WebSocket getrennt");