namespace GreenHome.Domain; /// /// نوع مصرف‌کننده متصل به رله /// public enum RelayKind { /// سایر / نامشخص Generic = 0, /// فن Fan = 1, /// هیتر / بخاری Heater = 2, /// پمپ آب WaterPump = 3, /// مه‌پاش / رطوبت‌ساز Humidifier = 4, /// روشنایی Light = 5, /// شیر برقی Valve = 6 } /// /// نوع اقدام یک قانون رله /// public enum RelayAction { /// روشن کردن On = 0, /// خاموش کردن Off = 1 } /// /// رله دستگاه به همراه تنظیمات آن /// public sealed class DeviceRelay { public int Id { get; set; } public int DeviceSettingsId { get; set; } public DeviceSettings DeviceSettings { get; set; } = null!; /// شماره رله (۱ تا RelayCount) public int RelayIndex { get; set; } /// نام نمایشی رله (مثلاً فن، هیتر) public string Name { get; set; } = string.Empty; /// آیا این رله فعال است؟ public bool IsEnabled { get; set; } = true; /// نوع مصرف‌کننده متصل به رله public RelayKind RelayKind { get; set; } = RelayKind.Generic; public DateTime CreatedAt { get; set; } public DateTime UpdatedAt { get; set; } /// گروه‌های شرط روشن/خاموش شدن رله (گروه‌ها با OR ترکیب می‌شوند) public ICollection RuleGroups { get; set; } = new List(); } /// /// یک گروه شرط برای روشن یا خاموش کردن رله. /// داخل هر گروه شرایط با AND ترکیب می‌شوند؛ گروه‌های هم‌عمل با OR. /// public sealed class RelayRuleGroup { public int Id { get; set; } public int DeviceRelayId { get; set; } public DeviceRelay DeviceRelay { get; set; } = null!; /// اقدام: روشن یا خاموش کردن رله public RelayAction Action { get; set; } = RelayAction.On; /// برچسب اختیاری گروه (مثلاً «ایمنی»، «خنک‌سازی») برای استفاده در لاگ/اعلان public string? Label { get; set; } /// ترتیب گروه‌ها public int Order { get; set; } /// شرایط داخل این گروه (AND) public ICollection Conditions { get; set; } = new List(); } /// /// نوع یک شرط رله: سنسوری یا زمانی /// public enum RelayConditionType { Sensor = 0, Time = 1 } /// /// یک شرط واحد داخل گروه (سنسوری یا بازه زمانی) /// public sealed class RelayRuleCondition { public int Id { get; set; } public int RelayRuleGroupId { get; set; } public RelayRuleGroup RelayRuleGroup { get; set; } = null!; /// نوع شرط: سنسوری یا زمانی public RelayConditionType ConditionType { get; set; } = RelayConditionType.Sensor; // ---- شرط سنسوری ---- /// نوع سنسور: دما، رطوبت، خاک، گاز، نور public SensorType? SensorType { get; set; } /// نوع مقایسه: بزرگتر، کوچکتر، بین، خارج از محدوده public ComparisonType? ComparisonType { get; set; } /// مقدار عددی اول public decimal? Value1 { get; set; } /// مقدار عددی دوم (برای بین و خارج از محدوده) public decimal? Value2 { get; set; } // ---- شرط زمانی ---- /// شروع بازه به دقیقه از نیمه‌شب (۰ تا ۱۴۳۹) public int? StartMinutes { get; set; } /// پایان بازه به دقیقه از نیمه‌شب (۰ تا ۱۴۳۹) — اگر کوچک‌تر از شروع باشد یعنی از نیمه‌شب عبور می‌کند public int? EndMinutes { get; set; } /// ترتیب شرایط داخل گروه public int Order { get; set; } }