rules 2
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user