74 lines
2.1 KiB
Markdown
74 lines
2.1 KiB
Markdown
# 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.
|