fix conditions logic
This commit is contained in:
@@ -63,37 +63,74 @@ public sealed class DeviceRelay
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
|
||||
/// <summary>قوانین روشن/خاموش شدن رله</summary>
|
||||
public ICollection<RelayRule> Rules { get; set; } = new List<RelayRule>();
|
||||
/// <summary>گروههای شرط روشن/خاموش شدن رله (گروهها با OR ترکیب میشوند)</summary>
|
||||
public ICollection<RelayRuleGroup> RuleGroups { get; set; } = new List<RelayRuleGroup>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// یک قانون برای روشن یا خاموش کردن رله بر اساس سنسورها
|
||||
/// یک گروه شرط برای روشن یا خاموش کردن رله.
|
||||
/// داخل هر گروه شرایط با AND ترکیب میشوند؛ گروههای همعمل با OR.
|
||||
/// </summary>
|
||||
public sealed class RelayRule
|
||||
public sealed class RelayRuleGroup
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int DeviceRelayId { get; set; }
|
||||
public DeviceRelay DeviceRelay { get; set; } = null!;
|
||||
|
||||
/// <summary>اقدام: روشن یا خاموش کردن رله</summary>
|
||||
public RelayAction Action { get; set; } = RelayAction.On;
|
||||
|
||||
/// <summary>برچسب اختیاری گروه (مثلاً «ایمنی»، «خنکسازی») برای استفاده در لاگ/اعلان</summary>
|
||||
public string? Label { get; set; }
|
||||
|
||||
/// <summary>ترتیب گروهها</summary>
|
||||
public int Order { get; set; }
|
||||
|
||||
/// <summary>شرایط داخل این گروه (AND)</summary>
|
||||
public ICollection<RelayRuleCondition> Conditions { get; set; } = new List<RelayRuleCondition>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// نوع یک شرط رله: سنسوری یا زمانی
|
||||
/// </summary>
|
||||
public enum RelayConditionType
|
||||
{
|
||||
Sensor = 0,
|
||||
Time = 1
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// یک شرط واحد داخل گروه (سنسوری یا بازه زمانی)
|
||||
/// </summary>
|
||||
public sealed class RelayRuleCondition
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int RelayRuleGroupId { get; set; }
|
||||
public RelayRuleGroup RelayRuleGroup { get; set; } = null!;
|
||||
|
||||
/// <summary>نوع شرط: سنسوری یا زمانی</summary>
|
||||
public RelayConditionType ConditionType { get; set; } = RelayConditionType.Sensor;
|
||||
|
||||
// ---- شرط سنسوری ----
|
||||
/// <summary>نوع سنسور: دما، رطوبت، خاک، گاز، نور</summary>
|
||||
public SensorType SensorType { get; set; }
|
||||
public SensorType? SensorType { get; set; }
|
||||
|
||||
/// <summary>نوع مقایسه: بزرگتر، کوچکتر، بین، خارج از محدوده</summary>
|
||||
public ComparisonType ComparisonType { get; set; }
|
||||
public ComparisonType? ComparisonType { get; set; }
|
||||
|
||||
/// <summary>مقدار عددی اول</summary>
|
||||
public decimal Value1 { get; set; }
|
||||
public decimal? Value1 { get; set; }
|
||||
|
||||
/// <summary>مقدار عددی دوم (برای بین و خارج از محدوده)</summary>
|
||||
public decimal? Value2 { get; set; }
|
||||
|
||||
/// <summary>اقدام: روشن یا خاموش کردن رله</summary>
|
||||
public RelayAction Action { get; set; } = RelayAction.On;
|
||||
// ---- شرط زمانی ----
|
||||
/// <summary>شروع بازه به دقیقه از نیمهشب (۰ تا ۱۴۳۹)</summary>
|
||||
public int? StartMinutes { get; set; }
|
||||
|
||||
/// <summary>زمان اعمال: روز، شب، همیشه</summary>
|
||||
public AlertTimeType TimeType { get; set; } = AlertTimeType.Always;
|
||||
/// <summary>پایان بازه به دقیقه از نیمهشب (۰ تا ۱۴۳۹) — اگر کوچکتر از شروع باشد یعنی از نیمهشب عبور میکند</summary>
|
||||
public int? EndMinutes { get; set; }
|
||||
|
||||
/// <summary>ترتیب قوانین</summary>
|
||||
/// <summary>ترتیب شرایط داخل گروه</summary>
|
||||
public int Order { get; set; }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user