7.5 KiB
7.5 KiB
سیستم جدید هشدارهای شرطی
تغییرات اعمال شده
1. تغییرات در تنظیمات دستگاه (DeviceSettings)
فیلدهای حذف شده:
- تمام فیلدهای
MinوMaxبرای سنسورها حذف شدند:DangerMaxTemperature,DangerMinTemperatureMaxTemperature,MinTemperatureMaxGasPPM,MinGasPPMMaxLux,MinLuxMaxHumidityPercent,MinHumidityPercent
فیلدهای جدید:
Province(استان) - نوع: stringCity(شهر) - نوع: stringLatitude(عرض جغرافیایی) - نوع: decimal? (اختیاری)Longitude(طول جغرافیایی) - نوع: decimal? (اختیاری)
2. مدلهای جدید برای شرایط هشدار
AlertCondition - شرط هشدار
هر شرط هشدار شامل موارد زیر است:
DeviceId: شناسه دستگاهNotificationType: نوع اعلان (تماس یا پیامک)Call = 0: تماس صوتیSMS = 1: پیامک
TimeType: زمان اعمال شرطDay = 0: فقط روزNight = 1: فقط شبAlways = 2: همیشه
CallCooldownMinutes: فاصله زمانی بین تماسهای هشدار (پیشفرض: 60 دقیقه)SmsCooldownMinutes: فاصله زمانی بین پیامکهای هشدار (پیشفرض: 15 دقیقه)IsEnabled: وضعیت فعال/غیرفعال بودن شرطRules: لیست قوانین (با AND به هم متصل میشوند)
AlertRule - قانون شرط
هر قانون شامل:
SensorType: نوع سنسورTemperature = 0: دماHumidity = 1: رطوبتSoil = 2: رطوبت خاکGas = 3: گازLux = 4: نور
ComparisonType: نوع مقایسهGreaterThan = 0: بیشتر ازLessThan = 1: کمتر ازBetween = 2: بین دو عددOutOfRange = 3: خارج از محدوده
Value1: مقدار عددی اولValue2: مقدار عددی دوم (برای Between و OutOfRange)Order: ترتیب نمایش
3. API های جدید
مدیریت شرایط هشدار (/api/AlertConditions)
دریافت شرایط یک دستگاه:
GET /api/AlertConditions/device/{deviceId}
دریافت یک شرط با ID:
GET /api/AlertConditions/{id}
ایجاد شرط جدید:
POST /api/AlertConditions
Content-Type: application/json
{
"deviceId": 1,
"notificationType": 1, // 0=Call, 1=SMS
"timeType": 0, // 0=Day, 1=Night, 2=Always
"callCooldownMinutes": 60,
"smsCooldownMinutes": 15,
"isEnabled": true,
"rules": [
{
"sensorType": 0, // 0=Temperature, 1=Humidity, 2=Soil, 3=Gas, 4=Lux
"comparisonType": 0, // 0=GreaterThan, 1=LessThan, 2=Between, 3=OutOfRange
"value1": 30.0,
"value2": null, // فقط برای Between و OutOfRange
"order": 0
},
{
"sensorType": 1, // Humidity
"comparisonType": 2, // Between
"value1": 40.0,
"value2": 60.0,
"order": 1
}
]
}
بهروزرسانی شرط:
PUT /api/AlertConditions
Content-Type: application/json
{
"id": 1,
"notificationType": 1,
"timeType": 0,
"callCooldownMinutes": 60,
"smsCooldownMinutes": 15,
"isEnabled": true,
"rules": [...]
}
حذف شرط:
DELETE /api/AlertConditions/{id}
فعال/غیرفعال کردن شرط:
PATCH /api/AlertConditions/{id}/toggle
Content-Type: application/json
true // یا false
4. محاسبه روز/شب
سرویس SunCalculatorService بر اساس موقعیت جغرافیایی (Latitude/Longitude) و زمان جاری، طلوع و غروب خورشید را محاسبه کرده و مشخص میکند که آیا زمان فعلی روز است یا شب.
5. نحوه عملکرد سیستم هشدار جدید
- هنگام دریافت داده از دستگاه (
/api/Telemetry/AddData) - تمام شرایط فعال (
IsEnabled=true) دستگاه بررسی میشوند - برای هر شرط:
- اگر
TimeTypeتنظیم شده باشد، زمان روز/شب چک میشود - تمام قوانین (
Rules) با منطق AND چک میشوند - اگر همه قوانین برقرار باشند، هشدار ارسال میشود
- اگر
- هشدار فقط در صورتی ارسال میشود که:
- از آخرین هشدار همان شرط، زمان کافی گذشته باشد (بر اساس
CallCooldownMinutesیاSmsCooldownMinutes)
- از آخرین هشدار همان شرط، زمان کافی گذشته باشد (بر اساس
- هشدار به صورت پیامک یا تماس صوتی ارسال میشود
6. مثالهای کاربردی
مثال 1: هشدار دمای بالا در روز
{
"deviceId": 1,
"notificationType": 1, // SMS
"timeType": 0, // Day only
"smsCooldownMinutes": 15,
"rules": [
{
"sensorType": 0, // Temperature
"comparisonType": 0, // GreaterThan
"value1": 35.0
}
]
}
مثال 2: هشدار دما و رطوبت در شب
{
"deviceId": 1,
"notificationType": 0, // Call
"timeType": 1, // Night only
"callCooldownMinutes": 60,
"rules": [
{
"sensorType": 0, // Temperature
"comparisonType": 1, // LessThan
"value1": 10.0,
"order": 0
},
{
"sensorType": 1, // Humidity
"comparisonType": 0, // GreaterThan
"value1": 80.0,
"order": 1
}
]
}
توضیح: اگر دما کمتر از 10 درجه AND رطوبت بیشتر از 80 درصد باشد، در شب تماس بگیر.
مثال 3: رطوبت خارج از محدوده
{
"deviceId": 1,
"notificationType": 1, // SMS
"timeType": 2, // Always
"smsCooldownMinutes": 15,
"rules": [
{
"sensorType": 1, // Humidity
"comparisonType": 3, // OutOfRange
"value1": 30.0,
"value2": 70.0
}
]
}
توضیح: اگر رطوبت کمتر از 30 یا بیشتر از 70 باشد، همیشه پیامک بفرست.
7. تغییرات در Database
Migration جدید (UpdateAlertSystemWithConditions) شامل:
- حذف ستونهای min/max از
DeviceSettings - اضافه کردن ستونهای
Province,City,Latitude,LongitudeبهDeviceSettings - ایجاد جدول
AlertConditions - ایجاد جدول
AlertRules - بهروزرسانی جدول
AlertNotificationsبرای ارتباط باAlertCondition
8. سرویسهای جدید
IAlertConditionService/AlertConditionService: مدیریت شرایط هشدارISunCalculatorService/SunCalculatorService: محاسبه طلوع/غروب و تشخیص روز/شبAlertService: بازنویسی کامل برای پشتیبانی از سیستم شرطی جدید
9. نکات مهم
- Migration: قبل از اجرا، حتماً backup از database بگیرید چون فیلدهای قدیمی حذف میشوند
- Latitude/Longitude: برای استفاده از قابلیت روز/شب، حتماً مختصات جغرافیایی را در تنظیمات دستگاه وارد کنید
- Cooldown: فاصله زمانی بین هشدارها قابل تنظیم برای هر شرط است
- AND Logic: تمام قوانین یک شرط با منطق AND به هم متصل میشوند
- Multiple Conditions: میتوانید چندین شرط مجزا برای یک دستگاه تعریف کنید