Fallback-Logik und Prioritätsmodifikatoren
Kapitel 19: Fallback-Logik und Prioritätsmodifikatoren
Übersicht
Die Fallback- und Prioritätslogik bestimmt, welche Modifikatoren (KURZ, BALD, FAST) in der Zeitanzeige verwendet werden, wenn mehrere Optionen vorhanden sind.
Wichtig: Handler wählen basierend auf Verfügbarkeit/Priorität, NICHT auf Validierung. Die Validierung kommt später im Fallback-Prozess!
Die 3 Modifikatoren und ihre Gültigkeitsbereiche
FAST (Schnell/Fast)
- Bedeutung: Der nächste Punkt kommt schnell (noch sehr kurz davor)
- Gültig bei:
:29, :59(nur diese 2 Minuten!) - Nicht gültig bei:
:27, :28, :57, :58(wird in diesen Minuten ignoriert!)
KURZ (Gerade kurz davor)
- Bedeutung: Der Punkt ist noch kurz weg (näher als BALD)
- Gültig bei:
:01-:02, :28, :31-:32, :58, :29, :59 - Spezial: Bei
:29, :59nur wenn FAST nicht vorhanden
BALD (Bald/Gleich)
- Bedeutung: Der Punkt ist bald da (weiter weg als KURZ)
- Gültig bei:
:27, :28, :29, :57, :58, :59(überall in den kritischen Minuten) - Spezial: Fallback wenn FAST und KURZ nicht vorhanden
Prioritäts-Matrix (nach Minute)
| Minute | Priorität 1 | Priorität 2 | Priorität 3 | Fallback |
|---|---|---|---|---|
| :01-:02 | KURZ NACH | NACH | — | NACH |
| :27 | BALD HALB | — | — | FÜNF VOR HALB |
| :28 | KURZ VOR HALB | BALD HALB | — | FÜNF VOR HALB |
| :29 | FAST HALB | KURZ VOR HALB | BALD HALB | FÜNF VOR HALB |
| :31-:32 | KURZ NACH HALB | NACH HALB | — | NACH HALB |
| :57 | BALD [HOUR] | — | — | FÜNF VOR [HOUR] |
| :58 | KURZ VOR [HOUR] | BALD [HOUR] | — | FÜNF VOR [HOUR] |
| :59 | FAST [HOUR] | KURZ VOR [HOUR] | BALD [HOUR] | FÜNF VOR [HOUR] |
Algorithmus (Handler-Logik)
Die MINUTE_RULES Handler verwenden diese Logik (OHNE Validierung im Handler!):
// Beispiel für :59
if(ctx.hasFast) {
return ["FAST", ctx.hourWord];
}
if(ctx.hasKurz) {
return ["KURZ", "VOR", ctx.hourWord];
}
if(ctx.hasBald) {
return ["BALD", ctx.hourWord];
}
return ["FÜNF", "VOR", ctx.hourWord];
Fallback-Prozess (NACH Handler)
Wenn der Handler eine Wortfolge zurückgibt, wird diese später validiert:
- Validiere die Wortfolge im Pattern Grid
- Müssen sequenziell im selben 11-Zeichen-Block liegen
- Wenn gültig: Verwende diese Wortfolge
- Wenn ungültig: Entferne optionale Modifikatoren (KURZ, FAST, BALD) und versuche erneut
- Wenn immer noch ungültig: Verwende Fallback-Wortfolge
Praktische Beispiele
Beispiel 1: 12:59 mit Pattern (hat FAST aber nicht KURZ, BALD)
Pattern: "ES_IST_FAST...UHR_"
Modifikatoren vorhanden: FAST ✓, KURZ ✗, BALD ✗
Handler-Auswahl (Priorität):
1. Prüfe FAST → ✓ vorhanden
→ Rückgabe: ["FAST", "EINS"]
Validierung:
→ "FAST EINS" validiert sich erfolgreich
Ergebnis: "ES IST FAST EINS" ✓
Beispiel 2: 12:59 mit Pattern (FAST NICHT vorhanden, aber KURZ)
Pattern: "ES_IST_KURZ...UHR_"
Modifikatoren vorhanden: FAST ✗, KURZ ✓, BALD ✗
Handler-Auswahl (Priorität):
1. Prüfe FAST → ✗ nicht vorhanden
2. Prüfe KURZ → ✓ vorhanden
→ Rückgabe: ["KURZ", "VOR", "EINS"]
Validierung:
→ "KURZ VOR EINS" validiert sich erfolgreich
Ergebnis: "ES IST KURZ VOR EINS" ✓
Beispiel 3: 12:59 mit Pattern (nur BALD vorhanden)
Pattern: "ES_IST_BALD...UHR_"
Modifikatoren vorhanden: FAST ✗, KURZ ✗, BALD ✓
Handler-Auswahl (Priorität):
1. Prüfe FAST → ✗ nicht vorhanden
2. Prüfe KURZ → ✗ nicht vorhanden
3. Prüfe BALD → ✓ vorhanden
→ Rückgabe: ["BALD", "EINS"]
Validierung:
→ "BALD EINS" validiert sich erfolgreich
Ergebnis: "ES IST BALD EINS" ✓
Beispiel 4: 12:59 mit Pattern (FAST vorhanden, aber "FAST EINS" validiert NICHT)
Pattern: "ES_IST_FASTX...UHR_" (FAST ist nicht korrekt positioniert)
Modifikatoren vorhanden: FAST ✓, KURZ ✓, BALD ✓
Handler-Auswahl (Priorität):
→ Rückgabe: ["FAST", "EINS"]
Validierung (1. Versuch):
→ "FAST EINS" validiert NICHT ✗
Fallback-Validierung (2. Versuch - ohne FAST):
Handler wird mit forceNoOptional=true neu aufgerufen
→ Rückgabe: ["KURZ", "VOR", "EINS"]
→ "KURZ VOR EINS" validiert erfolgreich ✓
Ergebnis: "ES IST KURZ VOR EINS" ✓
Wichtige Regeln (TLDR)
- Handler wählen NICHT validieren: Handlers geben Wortfolgen basierend auf Priorität zurück, OHNE zu prüfen ob sie im Pattern vorkommen
- Validierung kommt später: Nach Handler kommt Validierung + Fallback-Prozess
- Priorität ist fix pro Minute: Welche Priorität höher ist, hängt von der Minute ab, nicht vom Pattern
- Fallback entfernt Modifikatoren: Wenn Validierung fehlschlägt, werden optionale Wörter entfernt und es wird erneut versucht
- Keine doppelte Validierung: Im Handler NICHT validieren, sonst wird Logik verwirrt
LED-Berechnung nach Modifikator
| Modifikator | Formel | Richtung | Beispiel |
|---|---|---|---|
| KURZ NACH (:01-:02) | getTargetMinute - mm | LINKS | :01 → 1 LED |
| KURZ NACH HALB (:31-:32) | mm % 5 | LINKS | :31 → 1 LED |
| KURZ VOR (:58) | 60 - mm | RECHTS | :58 → 2 LEDs |
| FAST / BALD (:57-:59) | 60 - mm | RECHTS | :57 → 3 LEDs |
Häufige Fehler
❌ Fehler 1: Im Handler validieren
Falsch:
if(ctx.hasFast) {
if(validateWordSequence(...)) { // ← FALSCH!
return ["FAST", ...];
}
}
Richtig:
if(ctx.hasFast) {
return ["FAST", ...]; // Handler gibt nur Priorität zurück
}
❌ Fehler 2: FAST bei :28 verwenden
:28 hat FAST im Pattern? Spielt keine Rolle!
Handler ignoriert FAST bei :28 weil es nur bei :29, :59 gültig ist.
❌ Fehler 3: KURZ bei :27 verwenden
:27 hat KURZ im Pattern? Spielt keine Rolle!
Handler ignoriert KURZ bei :27 weil es nur bei :28, :58, :29, :59 und :01-02, :31-32 gültig ist.
Code-Implementierung (V0.3)
Handler für :59 (TypeScript)
handler: (ctx) => {
// Priorität 1: FAST
if(ctx.hasFast) {
return ["FAST", ctx.hourWord];
}
// Priorität 2: KURZ (wenn FAST nicht vorhanden)
if(ctx.hasKurz) {
return ["KURZ", "VOR", ctx.hourWord];
}
// Priorität 3: BALD (wenn FAST und KURZ nicht vorhanden)
if(ctx.hasBald) {
return ["BALD", ctx.hourWord];
}
// Fallback: FÜNF VOR
return ["FÜNF", "VOR", ctx.hourWord];
}
Zusammenfassung
Die Fallback- und Prioritätslogik ist einfach aber wichtig:
- Handler wählen basierend auf Priorität, nicht Validierung
- Validierung kommt später im Fallback-Prozess
- Modifikatoren haben feste Gültigkeitsbereiche pro Minute
- Priorität ist deterministisch: Bei mehreren gültigen Modifikatoren ist immer klar, welcher gewählt wird
- Fallback ist robust: Wenn gewählte Wortfolge im Pattern nicht validiert, wird automatisch vereinfacht
Dies gewährleistet, dass die Zeitanzeige immer korrekt, vorhersehbar und robust ist.
Status: ✅ Korrekt implementiert in V0.3 (charMatrixV03.html)
Zurück
19 / 19