feat: KVZ API JSON Data
This commit is contained in:
142
docs/KVZ/kvz-system-understanding.md
Normal file
142
docs/KVZ/kvz-system-understanding.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# KVZ System - Mein aktuelles Verständnis
|
||||
|
||||
## System Übersicht
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Kabelüberwachung System (32 Slots)"
|
||||
Slot0["Slot 0<br/>Kabelüberwachung"]
|
||||
Slot1["Slot 1<br/>Kabelüberwachung"]
|
||||
Slot2["Slot 2<br/>Kabelüberwachung"]
|
||||
Slot3["Slot 3<br/>Kabelüberwachung"]
|
||||
SlotDots["..."]
|
||||
Slot31["Slot 31<br/>Kabelüberwachung"]
|
||||
end
|
||||
|
||||
subgraph "KVZ Geräte (Optional pro Slot)"
|
||||
KVZ0["KVZ Gerät<br/>für Slot 0"]
|
||||
KVZ1["KVZ Gerät<br/>für Slot 1"]
|
||||
KVZ2["KVZ Gerät<br/>für Slot 2"]
|
||||
KVZ3["KVZ Gerät<br/>für Slot 3"]
|
||||
end
|
||||
|
||||
subgraph "KVZ LEDs (4 pro KVZ Gerät)"
|
||||
subgraph "KVZ0 LEDs"
|
||||
LED0_0["LED 1"]
|
||||
LED0_1["LED 2"]
|
||||
LED0_2["LED 3"]
|
||||
LED0_3["LED 4"]
|
||||
end
|
||||
|
||||
subgraph "KVZ1 LEDs"
|
||||
LED1_0["LED 1"]
|
||||
LED1_1["LED 2"]
|
||||
LED1_2["LED 3"]
|
||||
LED1_3["LED 4"]
|
||||
end
|
||||
end
|
||||
|
||||
Slot0 -.-> KVZ0
|
||||
Slot1 -.-> KVZ1
|
||||
Slot2 -.-> KVZ2
|
||||
Slot3 -.-> KVZ3
|
||||
|
||||
KVZ0 --> LED0_0
|
||||
KVZ0 --> LED0_1
|
||||
KVZ0 --> LED0_2
|
||||
KVZ0 --> LED0_3
|
||||
|
||||
KVZ1 --> LED1_0
|
||||
KVZ1 --> LED1_1
|
||||
KVZ1 --> LED1_2
|
||||
KVZ1 --> LED1_3
|
||||
```
|
||||
|
||||
## Redux Data Structure - Mein Verständnis
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "Redux Store"
|
||||
subgraph "kvzPresence Array (32 Elemente)"
|
||||
P0["Index 0: 1<br/>(KVZ vorhanden)"]
|
||||
P1["Index 1: 0<br/>(KVZ nicht vorhanden)"]
|
||||
P2["Index 2: 0"]
|
||||
P3["Index 3: 0"]
|
||||
PDots["..."]
|
||||
P31["Index 31: 0"]
|
||||
end
|
||||
|
||||
subgraph "kvzStatus Array (128 Elemente)"
|
||||
subgraph "Slot 0 LEDs (Index 0-3)"
|
||||
S0_0["Index 0: 1 (grün)"]
|
||||
S0_1["Index 1: 0 (rot)"]
|
||||
S0_2["Index 2: 1 (grün)"]
|
||||
S0_3["Index 3: 0 (rot)"]
|
||||
end
|
||||
|
||||
subgraph "Slot 1 LEDs (Index 4-7)"
|
||||
S1_0["Index 4: 0"]
|
||||
S1_1["Index 5: 0"]
|
||||
S1_2["Index 6: 0"]
|
||||
S1_3["Index 7: 0"]
|
||||
end
|
||||
|
||||
StatusDots["...weitere 120 Elemente"]
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## UI Darstellung - Mein aktuelles Verständnis
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "FallSensors UI Component"
|
||||
subgraph "Aktuelle Implementierung (FALSCH?)"
|
||||
UI1["KVZ1: 🟢<br/>(kvzPresence[0] = 1)"]
|
||||
UI2["KVZ2: 🔴<br/>(kvzPresence[1] = 0)"]
|
||||
UI3["KVZ3: 🔴<br/>(kvzPresence[2] = 0)"]
|
||||
UI4["KVZ4: 🔴<br/>(kvzPresence[3] = 0)"]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph "Problem"
|
||||
Problem["Alle KVZ zeigen den gleichen Status<br/>basierend auf kvzPresence Array<br/>→ NICHT korrekt!"]
|
||||
end
|
||||
|
||||
UI1 -.-> Problem
|
||||
UI2 -.-> Problem
|
||||
UI3 -.-> Problem
|
||||
UI4 -.-> Problem
|
||||
```
|
||||
|
||||
## Fragen zu meinem Verständnis
|
||||
|
||||
1. **KVZ Geräte Zuordnung**:
|
||||
|
||||
- Ist ein KVZ-Gerät einem Slot zugeordnet oder unabhängig?
|
||||
- Wie viele KVZ-Geräte gibt es insgesamt?
|
||||
|
||||
2. **UI KVZ1-KVZ4**:
|
||||
|
||||
- Repräsentieren KVZ1-KVZ4 in der UI die ersten 4 Slots (0-3)?
|
||||
- Oder sind es 4 separate, unabhängige KVZ-Geräte?
|
||||
|
||||
3. **LED Status Mapping**:
|
||||
|
||||
- Welche LED von welchem KVZ soll in KVZ1, KVZ2, KVZ3, KVZ4 angezeigt werden?
|
||||
- Soll jedes UI-KVZ eine andere LED des gleichen Geräts zeigen?
|
||||
- Oder soll jedes UI-KVZ ein anderes KVZ-Gerät repräsentieren?
|
||||
|
||||
4. **kvzStatus Array**:
|
||||
- Wie soll das 128-Element Array für die UI-Darstellung genutzt werden?
|
||||
- Welche Indizes entsprechen welchen UI-Elementen?
|
||||
|
||||
## Verdacht
|
||||
|
||||
Ich vermute, dass mein aktueller Ansatz falsch ist, weil:
|
||||
|
||||
- KVZ2 sollte nicht eine Kopie von KVZ1 Status sein
|
||||
- Jedes KVZ in der UI sollte einen eigenen, unabhängigen Status haben
|
||||
- Die Zuordnung zwischen Redux Arrays und UI ist unklar
|
||||
|
||||
**Bitte korrigieren Sie mein Verständnis! 🤔**
|
||||
141
docs/KVZ/mock-data.md
Normal file
141
docs/KVZ/mock-data.md
Normal file
@@ -0,0 +1,141 @@
|
||||
# KVZ Mock Data - Dokumentation
|
||||
|
||||
## Mock-Daten Struktur
|
||||
|
||||
Die KVZ Mock-Daten befinden sich in `mocks/kvzData.json` und haben folgende Struktur:
|
||||
|
||||
### Beispiel-Daten
|
||||
|
||||
```json
|
||||
{
|
||||
"kvzPresence": [1, 0, 1, 0, ...], // 32 Elemente
|
||||
"kvzStatus": [1, 0, 1, 0, ...], // 128 Elemente
|
||||
"timestamp": "2025-01-31T12:00:00.000Z"
|
||||
}
|
||||
```
|
||||
|
||||
### kvzPresence Array (32 Elemente)
|
||||
|
||||
- **Index 0-31**: Repräsentiert Slots 0-31
|
||||
- **Wert 1**: KVZ-Gerät vorhanden
|
||||
- **Wert 0**: KVZ-Gerät nicht vorhanden
|
||||
|
||||
**Aktuelle Mock-Daten:**
|
||||
|
||||
- Slot 0: KVZ vorhanden (1)
|
||||
- Slot 1: KVZ nicht vorhanden (0)
|
||||
- Slot 2: KVZ vorhanden (1)
|
||||
- Slot 3-31: KVZ nicht vorhanden (0)
|
||||
|
||||
### kvzStatus Array (128 Elemente)
|
||||
|
||||
- **Index Berechnung**: `slotIndex * 4 + ledIndex`
|
||||
- **4 LEDs pro Slot**: LED 0, LED 1, LED 2, LED 3
|
||||
- **Wert 1**: LED aktiv (grün)
|
||||
- **Wert 0**: LED inaktiv (rot)
|
||||
|
||||
**Aktuelle Mock-Daten:**
|
||||
|
||||
- Slot 0 LEDs (Index 0-3): [1, 0, 1, 0] → LED1=grün, LED2=rot, LED3=grün, LED4=rot
|
||||
- Slot 1 LEDs (Index 4-7): [0, 0, 0, 0] → Alle LEDs rot (KVZ nicht vorhanden)
|
||||
- Slot 2 LEDs (Index 8-11): [1, 1, 0, 1] → LED1=grün, LED2=grün, LED3=rot, LED4=grün
|
||||
- Slot 3-31: Alle LEDs rot (0)
|
||||
|
||||
## API Endpunkte
|
||||
|
||||
### GET /api/kvz/data
|
||||
|
||||
Holt alle KVZ-Daten.
|
||||
|
||||
**Response:**
|
||||
|
||||
```json
|
||||
{
|
||||
"kvzPresence": [...],
|
||||
"kvzStatus": [...],
|
||||
"timestamp": "2025-01-31T12:00:00.000Z"
|
||||
}
|
||||
```
|
||||
|
||||
### POST /api/kvz/data
|
||||
|
||||
Ersetzt komplette KVZ-Daten.
|
||||
|
||||
**Request Body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"kvzPresence": [...],
|
||||
"kvzStatus": [...]
|
||||
}
|
||||
```
|
||||
|
||||
### POST /api/kvz/updateSettings
|
||||
|
||||
Aktualisiert spezifische KVZ-Einstellungen.
|
||||
|
||||
**Request Body:**
|
||||
|
||||
```json
|
||||
{
|
||||
"updates": [
|
||||
{
|
||||
"key": "kvzPresence",
|
||||
"slot": 0,
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"key": "kvzStatus",
|
||||
"slot": 0,
|
||||
"ledIndex": 1,
|
||||
"value": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## Service Functions
|
||||
|
||||
### fetchKvzData()
|
||||
|
||||
```typescript
|
||||
import { fetchKvzData } from "../services/fetchKvzDataService";
|
||||
|
||||
const data = await fetchKvzData();
|
||||
console.log(data.kvzPresence); // [1, 0, 1, 0, ...]
|
||||
```
|
||||
|
||||
### updateKvzSettings()
|
||||
|
||||
```typescript
|
||||
import { updateKvzSettings } from "../services/fetchKvzDataService";
|
||||
|
||||
await updateKvzSettings([
|
||||
{ key: "kvzPresence", slot: 0, value: 1 },
|
||||
{ key: "kvzStatus", slot: 0, ledIndex: 1, value: 1 },
|
||||
]);
|
||||
```
|
||||
|
||||
## Redux Integration
|
||||
|
||||
Die Mock-Daten können in Redux geladen werden:
|
||||
|
||||
```typescript
|
||||
// In einem Thunk oder useEffect
|
||||
const data = await fetchKvzData();
|
||||
dispatch(
|
||||
setKueData({
|
||||
kvzPresence: data.kvzPresence,
|
||||
kvzStatus: data.kvzStatus,
|
||||
})
|
||||
);
|
||||
```
|
||||
|
||||
## Testen
|
||||
|
||||
Die Mock-Daten ermöglichen es:
|
||||
|
||||
1. **KVZ-Geräte zu simulieren** (Slots 0 und 2 haben KVZ)
|
||||
2. **LED-Status zu testen** (verschiedene Kombinationen)
|
||||
3. **API-Updates zu testen** (Presence und Status ändern)
|
||||
4. **UI-Verhalten zu validieren** (bedingte Anzeige, Farben)
|
||||
Reference in New Issue
Block a user