CONTROL-001: add safe HA automation handoff
Some checks failed
quality / test (3.11) (push) Has been cancelled
quality / test (3.13) (push) Has been cancelled

This commit is contained in:
2026-06-14 16:21:57 +02:00
parent 77f328c4a8
commit b3cf68eade
25 changed files with 1083 additions and 69 deletions

73
docs/BEHAVIOR_ENGINE.md Normal file
View File

@@ -0,0 +1,73 @@
# Verhaltensmodell und Berechnung
## Datenfluss
1. Nutzer wählt einen Aktor.
2. `ActuatorReconciliationService` ordnet Kontext-Entities zu.
3. `BehaviorEngine.train()` liest Aktor- und Kontexthistorie.
4. Aktor-Zustandswechsel werden als `BehaviorPattern` gespeichert.
5. `BehaviorEngine.evaluate()` vergleicht aktuelle Zustände mit den Mustern.
6. Shadow zeigt nur die Vorhersage. Active darf sie ausführen.
## Herkunft und Gewicht
- HA-Benutzer: `source=user`, Gewicht `1.0`
- eindeutig erkannte HA-Automation oder Script: `source=automation`, Gewicht `1.0`
- physisch oder unbekannt: `source=physical_or_unknown`, Gewicht `0.7`
- eigene SillyHome-Ausführung: wird verworfen
Manuelle und eindeutig automatisierte Handlungen zählen für die Freigabe.
## Kausale Muster
Wechselt ein Kontextsensor höchstens drei Sekunden vor der Aktorhandlung, wird
der Wechsel gespeichert:
```text
binary_sensor.tuer: off -> on
light.raum: off -> on
```
Eine kausale Vorhersage gilt nur, wenn derselbe Kontextzustand frisch ist. Das
Standardfenster ist zweimal `SILLYHOME_PREDICTION_INTERVAL_SECONDS`.
## Nicht-kausale Bewertung
Für Muster ohne frischen Trigger:
```text
score = weight * (
0.45 * time_score
+ 0.45 * context_score
+ 0.10 * weekday_score
)
```
Die Confidence ist der mittlere Score, begrenzt durch die Mindestunterstützung:
```text
confidence = mean(scores) * min(1, support / min_behavior_actions)
```
## Ausführungsbedingungen
Eine Vorhersage wird nur ausgeführt, wenn alle Bedingungen erfüllt sind:
- Betriebsart `active`
- Confidence mindestens `SILLYHOME_PREDICTION_CONFIDENCE`
- Zielzustand ist noch nicht erreicht
- Domain und Zustand sind erlaubt
- Cooldown erlaubt die Aktion
Der Cooldown sperrt nur eine schnelle Wiederholung desselben Zielzustands.
Eine Gegenaktion, beispielsweise `on` gefolgt von `off`, bleibt sofort erlaubt.
## Freigabe
`activation_ready=true`, wenn:
- Verhaltensstatus `trained`
- mindestens `SILLYHOME_MIN_BEHAVIOR_ACTIONS` eindeutig zugeordnete manuelle
oder automatisierte Handlungen vorhanden sind
Die UI zeigt `activation_reason` immer an.