Web-Dashboard¶
Überblick¶
Das Web-Dashboard ist die zentrale Admin-Oberfläche für das Action-Connect-System. Es unterstützt die Überwachung und Steuerung registrierter Geräte sowie den Zugriff auf betriebsrelevante Bereiche wie Einstellungen, Logs und Benutzerverwaltung.
Technisch basiert das Projekt auf React, TypeScript und Vite. Die Oberfläche ist modular aufgebaut und kann um zusätzliche Seiten und Komponenten erweitert werden.
Lokales Setup¶
Die lokale Inbetriebnahme erfolgt in folgenden Schritten:
- Repository öffnen:
Admin-Dashboard/admin-dashboard - Abhängigkeiten installieren:
- Umgebungsvariablen setzen:
- Dev-Server starten:
-
Funktionale Prüfung im Browser:
-
Dashboard:
http://localhost:5173/ - Geräte:
http://localhost:5173/devices - Einstellungen (API-Key):
http://localhost:5173/settings
Aufbau¶
Das Projekt folgt einer klaren Struktur:
src/pages: fachliche Seiten (Dashboard, Geräte, Logs, Users, Settings)src/components: wiederverwendbare UI-Bausteinesrc/layout: Shell-Komponenten wie Sidebar und Headersrc/context: globaler Zustand (Theme, Sidebar, Toast)src/utils: API-Zugriff, API-Key-Hilfsfunktionen
Visuelle Struktur¶
flowchart TD
APP[App Shell] --> SID[Sidebar]
APP --> HDR[Header]
APP --> PAGE[Pages]
PAGE --> DEV[Devices]
PAGE --> SET[Settings]
PAGE --> LOG[Logs]
PAGE --> USR[Users]
PAGE --> DSH[Dashboard]
PAGE --> CMP[Components]
CMP --> API[Utils/API]
Wichtige Routen:
/Dashboard/devicesGeräteübersicht/devices/:uuidGerätedetailansicht/settingsAPI-Key und Systemeinstellungen/logsSystem-Logs/usersBenutzerverwaltung
Technologie-Stack¶
- React 19
- TypeScript
- Vite
- Tailwind CSS
- React Router
- ApexCharts
- FullCalendar
Codebeispiele aus dem Projekt¶
1) Routing verstehen (src/App.tsx)¶
<Route element={<AppLayout />}>
<Route index path="/" element={<Home />} />
<Route path="/devices" element={<Devices />} />
<Route path="/devices/:uuid" element={<DeviceDetail />} />
<Route path="/settings" element={<Settings />} />
<Route path="/logs" element={<Logs />} />
<Route path="/users" element={<Users />} />
</Route>
Der Ausschnitt zeigt die fachlichen Kernseiten und den zentralen Erweiterungspunkt für neue Routen.
2) Geräte laden (src/utils/api.ts)¶
export async function fetchDevices(): Promise<Device[]> {
const response = await fetch(`${API_BASE_URL}/api/v1/devices`, {
method: "GET",
headers: getHeaders(),
});
const result = await handleResponse<ApiResponse<Device[]> | Device[]>(
response,
"Geräte konnten nicht geladen werden"
);
const data = "data" in result && result.data ? result.data : result;
return Array.isArray(data) ? data : [];
}
Hinweis: Das Backend kann Daten als { data: [...] } oder direkt als Array zurückgeben.
3) API-Key-Priorität (src/utils/apiKey.ts)¶
export function getApiKey(): string {
const stored = localStorage.getItem("connecthub_api_key");
if (stored) return stored;
return import.meta.env.VITE_API_KEY ?? "";
}
Es gilt folgende Priorität: zuerst gespeicherter Browser-Key, danach .env-Fallback.
Geräte steuern¶
Die Steuerung erfolgt über die Backend-API. Für schreibende Aktionen wird ein gültiger
x-api-key benötigt. Der Schlüssel kann über die Settings-Seite im Browser gespeichert
werden und hat dann Vorrang gegenüber dem statischen .env-Wert.
Typische Endpunkte:
GET /devicesGeräteliste ladenGET /devices/:uuidGerätedetails ladenGET /devices/:uuid/telemetry/latestletzte Telemetrie abrufenPOST /devices/:uuid/commandKommando an ein Gerät senden
Ablauf: Gerätekommando¶
sequenceDiagram
participant User as Admin im Dashboard
participant UI as Geräte-Seite
participant API as Backend API
participant Dev as Gerät
User->>UI: Aktion auslösen (z. B. Schalter)
UI->>API: POST /devices/:uuid/command + x-api-key
API->>Dev: Kommando weiterleiten
Dev-->>API: Ausführung / Status
API-->>UI: Response
UI-->>User: Erfolg oder Fehlermeldung
Beispiel-Request (wie er vom Frontend gesendet wird):
POST /api/v1/devices/{uuid}/command
x-api-key: <api-key>
Content-Type: application/json
{
"capability": "pump",
"value": "ON"
}
Schnellübersicht Seiten¶
| Route | Zweck |
|---|---|
/ |
Betriebsüberblick und Einstieg |
/devices |
Geräteliste mit Zuständen |
/devices/:uuid |
Detailansicht inkl. Telemetrie |
/settings |
API-Key und Systemeinstellungen |
/logs |
Systemereignisse und Analyse |
/users |
Benutzer- und Zugriffsverwaltung |
Lokale Entwicklung¶
Voraussetzungen:
- Node.js 18+ (empfohlen 20+)
- npm
Setup:
Relevante Skripte:
Hinweise¶
- Ohne korrekten API-Key schlagen Steuerbefehle fehl.
- Bei Verbindungsproblemen zuerst Backend-Erreichbarkeit und CORS prüfen.
- Das Dashboard ist als erweiterbare Betriebsoberfläche ausgelegt, nicht nur als UI-Template.
Typische Entwicklungsaufgaben¶
- Eine neue Seite unter
src/pagesanlegen und insrc/App.tsxrouten. - Eine bestehende Device-API-Funktion nutzen oder in
src/utils/api.tserweitern. - Fehlerfälle testen: 401 (falscher Key), 503 (Gerät offline), 404 (keine Telemetrie).
- UI-Feedback ergänzen (Toast/Status), damit Backend-Zustände sichtbar sind.