Files
sillyhome-next-dev/docs/BEHAVIOR_ENGINE.md
Otto b3cf68eade
Some checks failed
quality / test (3.11) (push) Has been cancelled
quality / test (3.13) (push) Has been cancelled
CONTROL-001: add safe HA automation handoff
2026-06-14 16:21:57 +02:00

2.1 KiB

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:

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:

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:

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.