From d3d96ed3e92448904bef40af864593f77a318284 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Tue, 11 Nov 2025 17:08:18 +0100 Subject: [PATCH] enabled for rules --- apps/rules/main.py | 9 ++++++++- apps/rules/rules_config.py | 1 + config/rules.yaml | 6 ++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/rules/main.py b/apps/rules/main.py index f662ce7..9c01cbb 100644 --- a/apps/rules/main.py +++ b/apps/rules/main.py @@ -85,6 +85,10 @@ class RuleEngine: # Instantiate each rule for desc in self.rule_descriptors: + if not desc.enabled: + logger.info(f" - {desc.id} (type: {desc.type}) [DISABLED]") + continue + try: rule_instance = load_rule(desc) self.rules[desc.id] = rule_instance @@ -93,7 +97,10 @@ class RuleEngine: logger.error(f"Failed to load rule {desc.id} (type: {desc.type}): {e}") raise - logger.info(f"Successfully loaded {len(self.rules)} rule implementation(s)") + enabled_count = len(self.rules) + total_count = len(self.rule_descriptors) + disabled_count = total_count - enabled_count + logger.info(f"Successfully loaded {enabled_count} rule implementation(s) ({disabled_count} disabled)") # Initialize MQTT client self.mqtt_client = MQTTClient( diff --git a/apps/rules/rules_config.py b/apps/rules/rules_config.py index dcad590..afcf86d 100644 --- a/apps/rules/rules_config.py +++ b/apps/rules/rules_config.py @@ -25,6 +25,7 @@ class Rule(BaseModel): id: str = Field(..., description="Unique rule identifier") name: Optional[str] = Field(None, description="Optional human-readable name") type: str = Field(..., description="Rule type (e.g., 'window_setback@1.0')") + enabled: bool = Field(default=True, description="Whether this rule is enabled") targets: RuleTargets = Field(..., description="Target rooms and devices") params: dict[str, Any] = Field(default_factory=dict, description="Rule-specific parameters") diff --git a/config/rules.yaml b/config/rules.yaml index a514ce3..a36b242 100644 --- a/config/rules.yaml +++ b/config/rules.yaml @@ -3,6 +3,7 @@ rules: - id: window_setback_esszimmer + enabled: false name: Fensterabsenkung Esszimmer type: window_setback@1.0 targets: @@ -19,6 +20,7 @@ rules: close_min_secs: 20 previous_target_ttl_secs: 86400 - id: window_setback_kueche + enabled: false name: Fensterabsenkung Küche type: window_setback@1.0 targets: @@ -37,6 +39,7 @@ rules: close_min_secs: 20 previous_target_ttl_secs: 86400 - id: window_setback_patty + enabled: false name: Fensterabsenkung Arbeitszimmer Patty type: window_setback@1.0 targets: @@ -54,6 +57,7 @@ rules: close_min_secs: 20 previous_target_ttl_secs: 86400 - id: window_setback_schlafzimmer + enabled: false name: Fensterabsenkung Schlafzimmer type: window_setback@1.0 targets: @@ -69,6 +73,7 @@ rules: close_min_secs: 20 previous_target_ttl_secs: 86400 - id: window_setback_wohnzimmer + enabled: false name: Fensterabsenkung Wohnzimmer type: window_setback@1.0 targets: @@ -85,6 +90,7 @@ rules: close_min_secs: 20 previous_target_ttl_secs: 86400 - id: window_setback_wolfgang + enabled: true name: Fensterabsenkung Arbeitszimmer Wolfgang type: window_setback@1.0 targets: