Proxus, kuralları gelen verilere karşı değerlendirmek için güçlü bir Kriter Dili kullanır. Kural motoru dört olay türünü destekler:
- DataReceived (
TransportData) - Cihaz telemetrisi ve sensör verileri - StatusChanged (
DeviceStatus) - Cihaz bağlantı durumu değişiklikleri - LogReceived (
Log) - İzleme ve uyarı için sistem log mesajları - MetricsReceived (
ProxusActorMetrics) - Aktör performans metrikleri
Her olay türü, kriterleri farklı bir veri modeline göre değerlendirir.
Grafiksel bir arayüz mü tercih ediyorsunuz? Görsel Kural Editörü sayfasına bakın.
Veri Erişim Sözdizimi
Kural motoru koşulları veri koleksiyonlarına karşı değerlendirir. Bu koleksiyonları filtrelemek için köşeli parantez [...] sözdizimini kullanırsınız.
| Koleksiyon | Açıklama | Erişim Deseni |
|---|---|---|
| Payload | Metrikler listesi (örn. Sıcaklık, Voltaj). | [Payload][Key = 'Temp' AND NumericValue > 50] |
| MetaData | Cihaz meta verileri listesi (örn. DeviceId). | [MetaData][Key = 'Location' AND Value = 'Zone1'] |
| Attributes | Ekstra öznitelikler sözlüğü. | [Attributes][Key = 'Priority' AND Value = 'High'] |
| Topic | Mesaj konusu (String). | [Topic] = 'Device123' |
Önemli: Parantez Mantığı
Tek bir parantez bloğu içine birden fazla koşul yerleştirdiğinizde, bunlar koleksiyondaki aynı öğeye uygulanmalıdır.
- Doğru:
[Payload][Key = 'Temp' AND NumericValue > 50] - (Key'i 'Temp' olan VE Değeri > 50 olan bir öğe bul)
- Yanlış:
[Payload][Key = 'Temp'] AND [Payload][NumericValue > 50] - (Key'i 'Temp' olan bir öğe bul VE Değeri > 50 olan HERHANGİ bir öğe bul. Bunlar farklı öğeler olabilir!)
Operatörler ve Fonksiyonlar
Karşılaştırma ve Mantık
| Operatör | Açıklama | Örnek |
|---|---|---|
=, !=, <> | Eşitlik | [Topic] = 'Gen1' |
>, >=, <, <= | Sayısal Karşılaştırma | NumericValue > 100 |
AND, OR, NOT | Mantıksal Operatörler | Condition1 AND NOT Condition2 |
[v] BETWEEN(min, max) | Aralık Kontrolü | NumericValue BETWEEN(10, 20) |
[v] IN(list) | Liste Kontrolü | Value IN ('A', 'B', 'C') |
String Fonksiyonları
| Fonksiyon | Açıklama | Örnek |
|---|---|---|
Contains(str, substr) | Alt dizeyi kontrol eder. | Contains(Value, 'Error') |
StartsWith(str, prefix) | Öneki kontrol eder. | StartsWith(Value, 'Sensor') |
EndsWith(str, suffix) | Soneki kontrol eder. | EndsWith(Value, '.log') |
Len(str) | String uzunluğu. | Len(Value) > 5 |
Upper(str), Lower(str) | Harf dönüşümü. | Upper(Value) = 'OK' |
Replace(str, old, new) | Metni değiştirir. | Replace(Value, '-', '') |
Tarih ve Saat Fonksiyonları
| Fonksiyon | Açıklama | Örnek |
|---|---|---|
Now() | Mevcut sunucu saati. | Time > AddMinutes(Now(), -5) |
AddMinutes(date, n) | Dakika Ekle/Çıkar. | Time < AddMinutes(PreviousValueTime, 10) |
AddHours(date, n) | Saat Ekle/Çıkar. | Time >= AddHours(Now(), -1) |
AddDays(date, n) | Gün Ekle/Çıkar. | Time >= AddDays(Now(), -1) |
GetYear(date) | Yılı çıkar. | GetYear(Time) = 2024 |
Yardımcı Fonksiyonlar
| Fonksiyon | Açıklama | Örnek |
|---|---|---|
Iif(cond, true, false) | Satıriçi Eğer. | Iif(NumericValue > 10, 'High', 'Low') |
IsNullOrEmpty(str) | Null/Boş kontrolü. | IsNullOrEmpty(Value) |
ToDouble(str) | String'i sayıya çevir. | ToDouble(Value) > 5.5 |
Abs(n) | Mutlak değer. | Abs(NumericValue) > 10 |
Yaygın Senaryolar
1. Basit Eşik
"Sıcaklık" etiketi 80'in üzerindeyse tetikle.
[Payload][Key = 'Temperature' AND NumericValue > 80]2. Cihaz ve Değer Filtresi
"Basınç" düşükse VE belirli bir cihazdan geliyorsa tetikle.
[MetaData][Key = 'DeviceName' AND Value = 'Pump01']
AND
[Payload][Key = 'Pressure' AND NumericValue < 10]3. Değişim Tespiti (Delta)
"Hız" önceki değere göre 5 birimden fazla değiştiyse tetikle.
[Payload][Key = 'Speed' AND Abs(NumericValue - ToDouble(PreviousValue)) > 5]4. Ölü Bant / Aralık
"Voltaj" güvenli aralığın (220-240) dışındaysa tetikle.
[Payload][Key = 'Voltage' AND NOT (NumericValue BETWEEN(220, 240))]5. Zaman Boşluğu (Bayat Veri)
Yeni değer, bir öncekinden 10 dakikadan fazla bir süre sonra geldiyse tetikle.
[Payload][Key = 'Heartbeat' AND Time >= AddMinutes(PreviousValueTime, 10)]Cihaz Durum Kuralları
Kural Olayı Status Changed olarak ayarlandığında, kriterler DeviceStatus nesnesine karşı değerlendirilir (TransportData değil).
| Özellik | Açıklama |
|---|---|
| DeviceId | Cihazın benzersiz ID'si. |
| DeviceName | Cihazın adı. |
| CurrentConnectionStatus | Connected veya Disconnected. |
| PreviousConnectionStatus | Connected veya Disconnected. |
| ConnectionDuration | Mevcut durumdaki saniye cinsinden süre (Double). |
Örnek: Cihaz Bağlantısı Koptu
CurrentConnectionStatus = 'Disconnected'Log Tabanlı Kurallar
Kural Olayı Log Received olarak ayarlandığında, kriterler Log nesnesine karşı değerlendirilir. Bu, sistem loglarını izlemenize ve belirli log modellerine göre uyarıları tetiklemenize olanak tanır.
| Özellik | Açıklama |
|---|---|
| Message | Log mesajı içeriği (String). |
| Level | Log ciddiyeti: Trace, Debug, Information, Warning, Error, Critical. |
| Category | Log kategorisi/kaynağı (örn. Proxus.ProtocolDrivers veya Proxus.SystemCore). |
| Source | Log kaynağı tanımlayıcısı. |
| Time | Log girişinin zaman damgası (DateTime). |
KRİTİK: Log kuralları, kendileri de log üreten aksiyonları (bildirimler gibi) tetikleyebilir. Sonsuz döngüleri önlemek için:
- Katı kriterler kullanın (belirli kategoriler, seviyeler veya mesaj kalıpları)
- Hız sınırlaması uygulayın (örn. 60 saniyede maksimum 10 aksiyon)
Level = 'Error'gibi aşırı geniş kriterlerden kaçının
Platform, kendi kendini tetiklemeyi önlemek için kural motoru loglarını otomatik olarak filtreler.
Örnek 1: Kritik Hatalar
Level = 'Critical' OR Level = 'Error'Metrik Tabanlı Kurallar
Kural Olayı Metrics Received olarak ayarlandığında, kriterler ProxusActorMetrics nesnesine karşı değerlendirilir. Bu, aktör performansını ve veri kalitesi metriklerini izlemeyi sağlar.
| Özellik | Açıklama |
|---|---|
| Device | Cihaz veya servis tanımlayıcısı (String). |
| TotalRequests | İşlenen toplam istek sayısı (Int64). |
| SuccessfulRequests | Başarılı istek sayısı (Int64). |
| FailedRequests | Başarısız istek sayısı (Int64). |
| TotalDataReceived | Alınan toplam veri paketi sayısı (Int64). |
| AverageResponseTime | Milisaniye cinsinden ortalama yanıt süresi (Double). |
| ResponseCount | Alınan toplam geçerli yanıt sayısı (Int64). |
| ProcessedDataCount | İşlenen toplam benzersiz veri noktası (Int64). |
| ReadErrorCount | Protokol okuma hatası sayısı (Int64). |
| ReadErrorPercentage | Başarısız olan isteklerin yüzdesi (0-100). |
| DataAccuracy | Veri kalitesi metriği: doğruluk yüzdesi (0-100). |
| DataCompleteness | Veri kalitesi metriği: eksiksizlik yüzdesi (0-100). |
| DataFreshness | Veri kalitesi metriği: güncellik yüzdesi (0-100). |
| DataIntegrity | Veri kalitesi metriği: bütünlük yüzdesi (0-100). |
| DataConsistency | Veri kalitesi metriği: tutarlılık yüzdesi (0-100). |
| ConnectionErrorCount | Bağlantı hatası sayısı (Int64). |
| SleepModeTransitionCount | Cihazın uyku moduna girme sayısı (Int64). |
| LastCommunicationTime | Son iletişim zaman damgası (DateTime). |
| LastDataReceivedTime | Son geçerli veri paketi zaman damgası (DateTime). |
Metrik kuralları şunlar için idealdir:
- Servis sağlığını ve performansını izleme
- Düşen servis kalitesini tespit etme
- Yüksek hata oranlarında uyarı verme
- Veri kalitesi trendlerini takip etme
Önerilen Hız Sınırlaması: 300 saniyede (5 dakika) maksimum 5 aksiyon
Anomali Tespiti
Kayan bir pencere üzerinde istatistiksel analiz için (örn. Z-Score, Hareketli Ortalama), Kural Motorunda Anomali Tespiti modunu seçin.
Anomali Tespiti modunda, Kriter İfadelerini yine de bir ön filtre olarak kullanabilirsiniz. Yalnızca kriterlerle eşleşen veriler istatistiksel modele beslenecektir (örn. [Payload][Key='Vibration']).