5.9 KiB
5.9 KiB
خلاصه تغییرات سیستم هشدار شرطی
📋 خلاصه کلی
سیستم هشدار قدیمی که بر اساس حداقل و حداکثر ثابت برای هر سنسور کار میکرد، به یک سیستم شرطی پیشرفته تبدیل شد که امکان تعریف شرایط پیچیده و انعطافپذیر را فراهم میکند.
🎯 ویژگیهای جدید
1. سیستم شرطگذاری پیشرفته
- تعریف نامحدود شرط برای هر دستگاه
- ترکیب چندین قانون با منطق AND
- انتخاب نوع اعلان (تماس یا پیامک) برای هر شرط
- تنظیم زمان اعمال شرط (روز، شب، همیشه)
2. مدیریت زمان هوشمند
- محاسبه خودکار طلوع و غروب خورشید بر اساس موقعیت جغرافیایی
- فیلتر کردن هشدارها بر اساس روز/شب بودن
- اضافه شدن فیلدهای استان، شهر، Latitude، Longitude به تنظیمات دستگاه
3. کنترل Cooldown جداگانه
- تنظیم فاصله زمانی مجزا برای تماس (پیشفرض 60 دقیقه)
- تنظیم فاصله زمانی مجزا برای پیامک (پیشفرض 15 دقیقه)
- قابل تنظیم برای هر شرط به صورت جداگانه
4. انواع مقایسه
- بیشتر از (GreaterThan)
- کمتر از (LessThan)
- بین دو عدد (Between)
- خارج از محدوده (OutOfRange)
🗂️ فایلهای ایجاد شده
Domain Layer
GreenHome.Domain/AlertCondition.cs- مدل شرط هشدارGreenHome.Domain/AlertCondition.cs(enums) - SensorType, ComparisonType, AlertNotificationType, AlertTimeType
Application Layer
GreenHome.Application/IAlertConditionService.cs- Interface سرویس مدیریت شرایطGreenHome.Application/ISunCalculatorService.cs- Interface محاسبه طلوع/غروب- تغییرات در
GreenHome.Application/Dtos.cs- DTOs جدید
Infrastructure Layer
GreenHome.Infrastructure/AlertConditionService.cs- سرویس مدیریت شرایطGreenHome.Infrastructure/SunCalculatorService.cs- سرویس محاسبه خورشید- تغییرات در
GreenHome.Infrastructure/AlertService.cs- بازنویسی کامل - Migration جدید:
UpdateAlertSystemWithConditions
API Layer
GreenHome.Api/Controllers/AlertConditionsController.cs- Controller جدید
🔄 فایلهای تغییر یافته
-
GreenHome.Domain/DeviceSettings.cs
- حذف فیلدهای Min/Max سنسورها
- اضافه فیلدهای Province, City, Latitude, Longitude
-
GreenHome.Domain/AlertNotification.cs
- تغییر از AlertType به AlertConditionId
- اضافه NotificationType
-
GreenHome.Infrastructure/GreenHomeDbContext.cs
- پیکربندی جداول جدید
- تغییر پیکربندی DeviceSettings و AlertNotifications
-
GreenHome.Application/MappingProfile.cs
- اضافه Mapping های جدید برای AlertCondition و AlertRule
-
GreenHome.Api/Program.cs
- ثبت IAlertConditionService
- ثبت ISunCalculatorService
-
GreenHome.Infrastructure/GreenHome.Infrastructure.csproj
- اضافه reference به GreenHome.VoiceCall.Avanak
📊 تغییرات Database
جداول جدید:
- AlertConditions: شرایط هشدار
- AlertRules: قوانین مربوط به هر شرط
جداول تغییر یافته:
-
DeviceSettings:
- حذف: DangerMaxTemperature, DangerMinTemperature, MaxTemperature, MinTemperature, MaxGasPPM, MinGasPPM, MaxLux, MinLux, MaxHumidityPercent, MinHumidityPercent
- اضافه: Province, City, Latitude, Longitude
-
AlertNotifications:
- حذف: AlertType
- اضافه: AlertConditionId, NotificationType
🔌 API Endpoints جدید
GET /api/AlertConditions/device/{deviceId} - لیست شرایط یک دستگاه
GET /api/AlertConditions/{id} - دریافت یک شرط
POST /api/AlertConditions - ایجاد شرط جدید
PUT /api/AlertConditions - بهروزرسانی شرط
DELETE /api/AlertConditions/{id} - حذف شرط
PATCH /api/AlertConditions/{id}/toggle - فعال/غیرفعال کردن شرط
⚙️ نحوه استفاده
مثال ایجاد شرط:
POST /api/AlertConditions
{
"deviceId": 1,
"notificationType": 1, // SMS
"timeType": 0, // Day only
"smsCooldownMinutes": 15,
"rules": [
{
"sensorType": 0, // Temperature
"comparisonType": 0, // GreaterThan
"value1": 35.0,
"order": 0
}
]
}
این شرط میگوید: اگر در روز، دما بیشتر از 35 درجه شد، هر 15 دقیقه یکبار پیامک بفرست.
⚠️ نکات مهم
- Migration: حتماً قبل از اجرای migration از database بکآپ بگیرید
- Data Loss: فیلدهای قدیمی Min/Max حذف میشوند و قابل بازگشت نیستند
- Location: برای استفاده از قابلیت Day/Night، باید Latitude و Longitude را در تنظیمات دستگاه وارد کنید
- Backward Compatibility: سیستم قدیمی دیگر کار نمیکند و باید شرایط جدید تعریف شوند
📝 TODO برای آینده
- پیادهسازی کامل تماس صوتی (در حال حاضر placeholder است)
- اضافه کردن تستهای واحد
- اضافه کردن Validation برای DTOs
- پیادهسازی Logging بهتر برای Debug
- اضافه کردن Dashboard برای مشاهده تاریخچه هشدارها
📚 مستندات
برای اطلاعات بیشتر، فایل ALERT_SYSTEM_UPDATE.md را مطالعه کنید.