version 2
This commit is contained in:
230
src/ALERT_SYSTEM_UPDATE.md
Normal file
230
src/ALERT_SYSTEM_UPDATE.md
Normal file
@@ -0,0 +1,230 @@
|
||||
# سیستم جدید هشدارهای شرطی
|
||||
|
||||
## تغییرات اعمال شده
|
||||
|
||||
### 1. تغییرات در تنظیمات دستگاه (`DeviceSettings`)
|
||||
|
||||
#### فیلدهای حذف شده:
|
||||
- تمام فیلدهای `Min` و `Max` برای سنسورها حذف شدند:
|
||||
- `DangerMaxTemperature`, `DangerMinTemperature`
|
||||
- `MaxTemperature`, `MinTemperature`
|
||||
- `MaxGasPPM`, `MinGasPPM`
|
||||
- `MaxLux`, `MinLux`
|
||||
- `MaxHumidityPercent`, `MinHumidityPercent`
|
||||
|
||||
#### فیلدهای جدید:
|
||||
- `Province` (استان) - نوع: string
|
||||
- `City` (شهر) - نوع: string
|
||||
- `Latitude` (عرض جغرافیایی) - نوع: 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`)
|
||||
|
||||
**دریافت شرایط یک دستگاه:**
|
||||
```http
|
||||
GET /api/AlertConditions/device/{deviceId}
|
||||
```
|
||||
|
||||
**دریافت یک شرط با ID:**
|
||||
```http
|
||||
GET /api/AlertConditions/{id}
|
||||
```
|
||||
|
||||
**ایجاد شرط جدید:**
|
||||
```http
|
||||
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
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**بهروزرسانی شرط:**
|
||||
```http
|
||||
PUT /api/AlertConditions
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"id": 1,
|
||||
"notificationType": 1,
|
||||
"timeType": 0,
|
||||
"callCooldownMinutes": 60,
|
||||
"smsCooldownMinutes": 15,
|
||||
"isEnabled": true,
|
||||
"rules": [...]
|
||||
}
|
||||
```
|
||||
|
||||
**حذف شرط:**
|
||||
```http
|
||||
DELETE /api/AlertConditions/{id}
|
||||
```
|
||||
|
||||
**فعال/غیرفعال کردن شرط:**
|
||||
```http
|
||||
PATCH /api/AlertConditions/{id}/toggle
|
||||
Content-Type: application/json
|
||||
|
||||
true // یا false
|
||||
```
|
||||
|
||||
### 4. محاسبه روز/شب
|
||||
|
||||
سرویس `SunCalculatorService` بر اساس موقعیت جغرافیایی (Latitude/Longitude) و زمان جاری، طلوع و غروب خورشید را محاسبه کرده و مشخص میکند که آیا زمان فعلی روز است یا شب.
|
||||
|
||||
### 5. نحوه عملکرد سیستم هشدار جدید
|
||||
|
||||
1. هنگام دریافت داده از دستگاه (`/api/Telemetry/AddData`)
|
||||
2. تمام شرایط فعال (`IsEnabled=true`) دستگاه بررسی میشوند
|
||||
3. برای هر شرط:
|
||||
- اگر `TimeType` تنظیم شده باشد، زمان روز/شب چک میشود
|
||||
- تمام قوانین (`Rules`) با منطق AND چک میشوند
|
||||
- اگر همه قوانین برقرار باشند، هشدار ارسال میشود
|
||||
4. هشدار فقط در صورتی ارسال میشود که:
|
||||
- از آخرین هشدار همان شرط، زمان کافی گذشته باشد (بر اساس `CallCooldownMinutes` یا `SmsCooldownMinutes`)
|
||||
5. هشدار به صورت پیامک یا تماس صوتی ارسال میشود
|
||||
|
||||
### 6. مثالهای کاربردی
|
||||
|
||||
#### مثال 1: هشدار دمای بالا در روز
|
||||
```json
|
||||
{
|
||||
"deviceId": 1,
|
||||
"notificationType": 1, // SMS
|
||||
"timeType": 0, // Day only
|
||||
"smsCooldownMinutes": 15,
|
||||
"rules": [
|
||||
{
|
||||
"sensorType": 0, // Temperature
|
||||
"comparisonType": 0, // GreaterThan
|
||||
"value1": 35.0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### مثال 2: هشدار دما و رطوبت در شب
|
||||
```json
|
||||
{
|
||||
"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: رطوبت خارج از محدوده
|
||||
```json
|
||||
{
|
||||
"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. نکات مهم
|
||||
|
||||
1. **Migration**: قبل از اجرا، حتماً backup از database بگیرید چون فیلدهای قدیمی حذف میشوند
|
||||
2. **Latitude/Longitude**: برای استفاده از قابلیت روز/شب، حتماً مختصات جغرافیایی را در تنظیمات دستگاه وارد کنید
|
||||
3. **Cooldown**: فاصله زمانی بین هشدارها قابل تنظیم برای هر شرط است
|
||||
4. **AND Logic**: تمام قوانین یک شرط با منطق AND به هم متصل میشوند
|
||||
5. **Multiple Conditions**: میتوانید چندین شرط مجزا برای یک دستگاه تعریف کنید
|
||||
|
||||
Reference in New Issue
Block a user