This commit is contained in:
2025-11-11 19:58:06 +01:00
parent d3d96ed3e9
commit b6b441c0ca
5 changed files with 245 additions and 89 deletions

View File

@@ -11,22 +11,13 @@ import yaml
from pydantic import BaseModel, Field, field_validator
class RuleTargets(BaseModel):
"""Targets for a rule (rooms, devices, etc.)"""
rooms: list[str] = Field(default_factory=list)
contacts: list[str] = Field(default_factory=list)
thermostats: list[str] = Field(default_factory=list)
lights: list[str] = Field(default_factory=list)
relays: list[str] = Field(default_factory=list)
class Rule(BaseModel):
"""Single rule configuration"""
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")
objects: dict[str, Any] = Field(default_factory=dict, description="Objects this rule monitors or controls")
params: dict[str, Any] = Field(default_factory=dict, description="Rule-specific parameters")
@field_validator('id')
@@ -121,9 +112,11 @@ if __name__ == "__main__":
print(f"✅ Loaded {len(config.rules)} rules:")
for rule in config.rules:
name = f" ({rule.name})" if rule.name else ""
print(f" - {rule.id}{name}: {rule.type}")
print(f" Targets: {len(rule.targets.rooms)} rooms, "
f"{len(rule.targets.contacts)} contacts, "
f"{len(rule.targets.thermostats)} thermostats")
enabled = "" if rule.enabled else ""
print(f" [{enabled}] {rule.id}{name}: {rule.type}")
if rule.objects:
obj_summary = ", ".join(f"{k}: {len(v) if isinstance(v, list) else v}"
for k, v in rule.objects.items())
print(f" Objects: {obj_summary}")
except Exception as e:
print(f"❌ Configuration error: {e}")