#[derive(Debug, Clone, Serialize, Deserialize)] pub struct ConfigurationExport { pub format_version: u32, pub exported_at: DateTime, pub settings: RuntimeSettings, pub devices: Vec, pub zones: Vec, #[serde(default)] pub groups: Vec, pub schedules: Vec, pub automations: Vec, #[serde(default)] pub flows: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ControlPlanEvent { pub at: DateTime, pub kind: String, pub label: String, pub preset: Option, pub target_temperature: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ZoneControlPlan { pub zone_id: String, pub zone_name: String, pub device_id: String, pub device_name: String, /// Configured per-zone enable switch. Group/master gates are reported separately. pub enabled: bool, /// True when the configured zone is eligible for thermostat control. Disabled group control does not block the zone. pub effective_enabled: bool, /// Effective mode currently used by the controller. pub mode: String, /// Configured zone mode before house-mode inheritance is resolved. pub configured_mode: String, pub inherit_house_mode: bool, /// Profile resolved from a manual override or the active schedule. pub preset: String, /// Explicit per-zone profile override; None means Auto schedule. pub preset_override: Option, pub current_temperature: Option, pub target_temperature: Option, pub device_setpoint: Option, pub desired_power: bool, pub desired_mode: String, pub actual_power: Option, pub actual_mode: Option, pub actual_setpoint: Option, pub demand: bool, pub control_source: String, pub manual_override_until: Option>, pub local_thermostat_power: Option, pub local_thermostat_resume_at: Option>, pub device_manual_override: bool, pub device_manual_override_until: Option>, pub control_owner: String, pub control_command_source: String, pub control_since: Option>, pub resume_at: Option>, pub control_reason: String, pub blocked_reason: Option, pub lockout_until: Option>, pub current_schedule_id: Option, pub current_schedule_name: Option, pub next_events: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AutomationPlanRule { pub id: String, pub name: String, pub enabled: bool, pub trigger_kind: String, pub trigger_device_id: Option, pub trigger_device_name: Option, pub threshold: Option, pub at_time: Option, pub action_device_id: String, pub action_device_name: String, #[serde(default)] pub action_group_id: Option, #[serde(default)] pub action_group_name: Option, #[serde(default)] pub action_preset: Option, pub action: DeviceCommand, pub last_fired_at: Option>, pub next_ready_at: Option>, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ControlPlan { pub generated_at: DateTime, pub house_mode: String, /// Uniform whole-house preset when every zone uses the same override; None for a mixed state. pub house_preset: Option, /// Compatibility field. Global ON/OFF does not use a persistent master gate; this remains true in v0.9.4+. pub house_power: bool, pub outdoor_temperature: Option, pub control_strategy: String, pub night_mode_active: bool, pub night_mode_start: String, pub night_mode_end: String, pub night_mode_max_fan_speed: u8, pub next_events: Vec, pub zones: Vec, pub rules: Vec, }