# Alarm kuralı oluşturun

> Veriyi, cihaz durumunu, günlükleri ya da Edge Gateway ölçümlerini izleyen alarm kuralı yazın. Koşul her sağlandığında alarm üretilir, eylemler çalışır.

Kaynak: https://proxus.io/tr/docs/automate/rules

Bu kılavuzda, tünel fırınının 1. bölgesi beş dakika boyunca 200 °C'nin üstünde kaldığında alarm üreten bir kural
kuracaksınız. Kural en fazla beş dakikada bir alarm üretecek. Koşulu bir cümle gibi kuracak, son 24 saatte ne
yapacağını görecek, koşulu kontrol edecek Edge Gateway'leri seçecek ve kuralı etkinleştireceksiniz.

Alarm kuralı her mesajı geldiği anda kontrol eder. Her cihaz için yalnızca iki şeyi hatırlar:
[bekleme süresi](#alarmdan-önce-bekleme) için koşulun ne kadar süredir sağlandığını ve alarmının açık olup olmadığını;
böylece değer normale döndüğünde alarm [kendiliğinden kapanabilir](#alarmın-kapanması). Birden çok mesaja ya da cihaza
yayılan mantık için [işlem akışı](https://proxus.io/tr/docs/automate/pipelines) kullanın.

## Başlamadan önce

Şunlar gerekir:

- Bağlı bir Edge Gateway üzerinden değer gönderen bir cihaz.
- Kontrol edilecek veri noktasının adı (bu örnekte `Zone1Temp`) ve cihazın adı (bu örnekte `MFB_LYS_TUNNEL_OVEN`).
- Alarm kuralı oluşturma izni olan bir kullanıcı rolü.

## Adım 1: Alarm kuralını oluşturun

**Kurallar ve akışlar > Alarm kuralları** ekranını açın ve **Yeni** (1) düğmesini seçin.

*Ekran görüntüsü: Araç çubuğunda Yeni düğmesi işaretli alarm kuralı listesi ve altında demo kuralları*

Listede her kuralın **Durum**, **İzlenen**, **Koşul**, **Açık alarmlar**, **Son tetiklenme** ve **Çalıştığı yer**
bilgileri görünür. **Temperature Threshold Alert** gibi demo kurallarını açıp incelemek iyi bir başlangıçtır.

## Adım 2: Formu doldurun

*Ekran görüntüsü: Adı, Veri alındığında olayı, 1 tetikleme sınırı ve beş dakikalık kısıtlama süresiyle alarm kuralı formu; altında koşul düzenleyicisi: cihaz, Zone1Temp üstünde 200, bekleme süresi ve Şu an, Son 24 saatte olsaydı ve Denetim panelleri*

1. **Ad**: benzersiz bir ad. Örnek: `Oven zone 1 above 200`.
2. **Olay**: kuralın izleyeceği olay türü.

   | Olay | Kuralın kontrol ettiği |
   | --- | --- |
   | **Veri alındığında** | Cihazın gönderdiği, veri noktası değerlerini içeren her mesaj. |
   | **Durum değiştiğinde** | Cihazın bağlanması ya da bağlantısının kopması. |
   | **Günlük alındığında** | Edge Gateway'in yazdığı her günlük kaydı. |
   | **Metrikler alındığında** | Her cihazın okuma istatistikleri (istekler, hatalar, yanıt süresi, veri kalitesi). |

   Olayı değiştirdiğinizde koşul temizlenir, çünkü her olay türünün alanları farklıdır.
3. **Tetikleme sınırı**: kuralın bir kısıtlama süresi içinde en fazla kaç kez işlem yapacağı. Bu örnekte `1`.
4. **Kısıtlama süresi**: bu sürenin uzunluğu. Bu örnekte beş dakika (`00:05:00`). Bkz.
   [Sıklık sınırı](#sıklık-sınırı).
5. **Koşul**u bir cümle gibi kurun:
   - **Nerede**: **Cihaz** ve `MFB_LYS_TUNNEL_OVEN`. **Tesis** ya da **Alan** oradaki her cihazı, **Herhangi bir
     cihaz** tüm cihazları kontrol eder.
   - **Ne olunca**: `Zone1Temp` veri noktası, **üstünde**, `200`. Veri noktası listesi her veri noktasının birimini ve
     kapsamdaki kaç cihazda bulunduğunu gösterir. Her karşılaştırmanın altında veri noktasının son 24 saatteki en
     düşük, ortalama ve en yüksek değeri ile şu anki değeri yazar; böylece sınırı veriye bakarak seçersiniz.
     **Karşılaştırma ekle** başka bir karşılaştırma ekler; hepsinin mi yoksa birinin mi sağlanması gerektiğini
     seçersiniz. **Arasında** ve **dışında** bir alt ve bir üst sınır alır.
   - Ya da koşulu üstteki kutuya kendi cümlenizle yazın (örneğin *Tünel fırınında bölge 1 sıcaklığı 5 dakika boyunca
     200 dereceyi geçerse*) ve Enter'a basın ya da **Koşula çevir**'i seçin. Copilot cümleyi ve bekleme süresini
     cihazlarınızdan ve veri noktalarınızdan kurar; cümle bir bağlantı kopmasını, bir günlük kaydını ya da okuma
     hatalarını anlatıyorsa kuralın olayını da değiştirir. Kaydetmeden önce sonucu gözden geçirin; **Geri al** önceki
     koşulu, bekleme süresini ve olayı geri getirir. Cümle olmayan bir cihazı ya da veri noktasını anıyorsa, birden çok
     cihaza uyuyorsa ya da bir koşul değilse Copilot nedenini söyler ve koşula dokunmaz. Bunun için bir
     [Copilot sağlayıcısı](https://proxus.io/tr/docs/administer/copilot-settings) gerekir.
   - Yeni bir kural hazır kalıplar sunar: **Eşik aşımı**, **Aralık dışı**, **Bağlantı koptu**, **Hata günlüğü** ve
     **Okuma hataları**.
6. **Alarmdan önce bekle**: **5 dakika** (`300` saniye). Bkz. [Alarmdan önce bekleme](#alarmdan-önce-bekleme).
7. **Alarm kapansın**: **Pay bırakarak**, **5** °C: 1. bölge 195 °C'nin altına dönünce alarm kapanır. Bkz.
   [Alarmın kapanması](#alarmın-kapanması).

**Düz anlatım** koşulu bir cümle olarak tekrarlar; kastettiğiniz şeyi söylediğini kontrol edin. **İfade**, Edge Gateway'in
çalıştırdığı metni gösterir; cümlenin söyleyemediği bir şey gerektiğinde ifadeyi doğrudan yazmanıza da izin verir.
Kullanılabilecek tüm alanlar ve işleçler [Kural ifadeleri](https://proxus.io/tr/docs/automate/rule-expressions) sayfasındadır.

Koşulun yanındaki üç panel, kaydetmeden önce koşulu kontrol eder:

- **Şu an**: koşulun kapsamdaki cihazlarda son değerlere göre sağlanıp sağlanmadığı.
- **Son 24 saatte olsaydı**: koşul ve bekleme süresi saklanan geçmiş üzerinde yeniden çalıştırılır. İlk veri
  noktasının grafiği sınırla ve alarmın açık kalacağı aralıklarla gösterilir; alarm sayısı, toplam ve en uzun süre
  yazılır; kural çok sık ya da hiç tetiklenmeyecekse bir ipucu verilir. Geçmiş 15 saniyelik adımlarla çalıştırılır, bu
  yüzden bundan kısa bir sıçrama görünmeyebilir. Yalnızca verisi saklanan (**SYSTEM INTERNAL DB**'ye gönderen)
  cihazların geçmişi vardır.
- **Denetim**: Edge Gateway'in koşulu derleyip derleyemediği, eksik kalan bir şey olup olmadığı ve kuralın nerede çalıştığı.

**Motor** alanını **Ölçüt ifadesi** olarak bırakın. **Tetikleyici** alanının değeri her zaman **Gerçek zamanlı** olur,
çünkü alarm kuralları her olay geldiği anda kontrol edilir.

## Adım 3: Edge Gateway'leri seçin

Formun altındaki **Edge Gateway'ler** sekmesinde, kuralı kontrol edecek Edge Gateway'ler listelenir. Yeni kurallarda
başlangıçta yalnızca merkez sunucunun kendi Edge Gateway'i olan **SYSTEM** bulunur. Cihazınızı okuyan Edge Gateway'i listeye
ekleyin. Alarm kuralı yalnızca çalıştığı Edge Gateway'lerin verisini görür.

## Adım 4: Kural tetiklenince ne olacağını belirleyin

Sıklık sınırı içinde kalan her eşleşmede [Alarmlar](https://proxus.io/tr/docs/monitor/alerts) ekranında bir alarm oluşturulur ya da
mevcut alarm güncellenir:

- Kuralın son alarmı hâlâ **Yeni** durumundaysa alarmın sayısı artar ve zamanı güncellenir.
- Son alarm onaylanmış, çözülmüş ya da yok sayılmışsa yeni bir alarm oluşturulur.

Ayrıca mesaj almak ya da veriyi bir hedefe iletmek için **Eylemler** sekmesinde eylem ekleyin. Bkz.
[Kural eylemi ekleyin](https://proxus.io/tr/docs/automate/rule-actions).

Her alarm için merkez sunucu arayüzünde **Ayrıntıları görüntüle** düğmesi olan bir açılır pencere de görmek
istiyorsanız **Arayüz alarmlarını etkinleştir** onay kutusunu seçin.

## Adım 5: Kuralı etkinleştirin

1. **Etkin** onay kutusunu seçin.
2. **Kaydet** düğmesini seçin.

Kural, seçilen Edge Gateway'lere gönderilir ve hemen kontrole başlar. Kuralı durdurmak için **Etkin** onay kutusunu temizleyin ve
kaydedin.

> **Not:**
Etkin bir alarm kuralının ayarları kilitlidir. Koşulu, sıklık sınırını ya da Edge Gateway'leri değiştirmek için önce **Etkin** onay kutusunu temizleyip kaydedin, değişikliği yapın ve kuralı yeniden etkinleştirin. Birden çok kuralı aynı anda etkinleştirmek ya da devre dışı bırakmak için kuralları listede seçin ve **Durum** > **Seçilenleri etkinleştir** ya da **Seçilenleri devre dışı bırak** komutunu kullanın.

## Alarmdan önce bekleme

**Alarmdan önce bekle**, kuralı yalnızca koşul aynı cihazda kesintisiz bu kadar süre sağlandığında tetikler: sınırı
kısa süre aşan bir sıçrama alarm üretmez. Koşulu sağlamayan bir mesaj beklemeyi baştan başlatır; bekleme süresinden
uzun bir sessizlik de öyle. **Hemen** (`0`) ilk eşleşmede tetikler; kurallar önceden böyle çalışıyordu. Durum ve
ölçüm kuralları da aynı şekilde bekler; günlük kuralları her zaman hemen tetiklenir.

Bekleme süresi 2.0.0 ve sonraki sürümlerdeki Edge Gateway'lerde çalışır; daha eski bir Edge Gateway onu yok sayar ve hemen
tetikler.

## Alarmın kapanması

**Alarm kapansın**, kuralın açtığı alarmı kimin çözeceğini belirler:

- **Elle**: alarmı biri **Alarmlar** ekranında çözer; önceden böyleydi.
- **Koşul bitince**: koşul o cihazda artık sağlanmadığı ilk mesajda Edge Gateway alarmı kendiliğinden çözer.
- **Pay bırakarak**: alarmın kapanması için değerin sınırdan pay kadar geri dönmesi gerekir. *200'ün üstünde* koşulu
  ve 5'lik payla alarm 200'ün üstünde açılır, 195'in altında kapanır; böylece 200 civarında gidip gelen bir değer
  alarmı sürekli açıp kapatmaz. Arasında ve Dışında koşullarında iki sınır da kayar; pay yalnızca sayısal sınırlarda
  sunulur.

Alarmı kimse üstlenmediği sürece o cihazdaki her yeni tetiklenme aynı alarmın üzerine sayılır; alarm kapandıktan
sonra koşul yeniden sağlandığında yeni bir alarm açılır. Çözülen alarm kapandığı zamanı saklar. **Son 24 saatte olsaydı** kapanışı da yeniden çalıştırır ve kapanış
sınırını kesikli çizgiyle gösterir; böylece alarm sayısını düşük tutan bir pay seçebilirsiniz. Bir Edge Gateway yeniden
başlarken açık kalan bir alarm, değer ilk normale döndüğünde kapanır.

Günlük kurallarında kapanış yoktur: bir günlük kaydı tek bir andır. Kapanış 2.0.0 ve sonraki sürümlerdeki Edge
Gateway'lerde çalışır.

## Sıklık sınırı

**Tetikleme sınırı** ve **Kısıtlama süresi** birlikte, her kural için ayrı bir sayma penceresi oluşturur:

1. İlk eşleşme, **Kısıtlama süresi** uzunluğunda bir pencere başlatır ve işlem yapar.
2. Sonraki eşleşmeler, **Tetikleme sınırı** dolana kadar işlem yapar.
3. Sınır dolduktan sonraki eşleşmeler, süre bitene kadar atlanır. Edge Gateway her pencerede günlüğe bir kez uyarı
   yazar ("limit reached for rule ...").
4. Süre bittikten sonraki ilk eşleşme yeni bir pencere başlatır.

Alarmlar ve bildirimler aynı sayacı kullanır. Veri hedeflerine iletimin ayrı bir sayacı vardır. Sınırı kaldırmak
için **Tetikleme sınırı** ya da **Kısıtlama süresi** değerini `0` yapın. Yeni bir alarm kuralında varsayılan
değer dakikada bir işlemdir.

> **Uyarı:**
**Günlük alındığında** olayını izleyen bir kuralın eylemi de günlüğe kayıt yazıyorsa kural kendini durmadan tetikleyebilir. Böyle bir kuralın koşulunu dar tutun (örneğin bir **ReasonCode** ile) ve sıklık sınırını kaldırmayın.

## Kuralın neden tetiklendiğini ya da tetiklenmediğini bulun

- Kural sayfasının üstünde **Açık alarmlar**, **Son tetiklenme**, **Eylemler** sayısı ve **Sıklık sınırı** görünür.
- **Alarmlar** sekmesinde bu kuralın ürettiği alarmlar listelenir.
- Araç çubuğundaki **Günlükler** düğmesi, Edge Gateway'in bu kural için yazdığı günlük kayıtlarını açar. Örneğin
  çözümlenemeyen bir koşul ya da dolan bir sıklık sınırı burada görünür.

Yazım hatası olan bir koşul hiçbir zaman eşleşmez. Bu durumda günlükte ölçütlerin derlenemediğini bildiren bir kayıt görünür.

## Olağan dışı değerleri yakalayın

Kuralın sabit bir sınıra göre değil, veri noktasının yakın geçmişteki davranışına uymayan değerlere göre
tetiklenmesini istiyorsanız **Motor** alanında **Anomali algılama** seçeneğini seçin. Bu seçenek yalnızca **Veri
alındığında** olayıyla çalışır. Hangi mesajlara bakılacağını yine koşul belirler. Koşulda tek bir veri noktası
geçiyorsa (`[Payload][Key = 'Zone1Temp']`) yalnızca o veri noktası analiz edilir.

**Anomali algılama** sekmesinde yöntemler listelenir. Kullanmak istediğiniz yöntemleri açın. Birden çok yöntem
açıksa ilk tetiklenen yöntem geçerli olur.

| Yöntem | Ne zaman tetiklenir | Ayarlar (varsayılan) |
| --- | --- | --- |
| **Boşluk tespitini kullan** | Beklenenden uzun süre yeni değer gelmediğinde | **Beklenen aralık (s)** (60), **Boşluk çarpanı eşiği** (1.8) |
| **Z-skoru kullan** | Değer, ortalamadan standart sapma cinsinden çok uzaklaştığında | **Z-skoru eşiği** (3.0) |
| **Kayan medyan kullan** | Değer medyandan çok uzaklaştığında | **Kayan medyan çarpanı** (1.2) |
| **Değişim hızı kullan** | Değer, önceki değerin belirli bir oranından fazla sıçradığında | **Değişim hızı eşiği** (0.25) |
| **EMA kullan** | Değer, üstel hareketli ortalamasından uzaklaştığında | **EMA alfa** (0.1), **EMA fark çarpanı** (0.01) |
| **IQR kullan** | Değer, değerlerin ortadaki yarısının olağan aralığının dışına çıktığında | **IQR çarpanı** (1.5) |
| **Hareketli ortalama kullan** | Değer hareketli ortalamadan çok uzaklaştığında | **Hareketli ortalama eşiği** (1.5) |
| **Sapma tespitini kullan** | Art arda birkaç değer ortalamanın hep aynı tarafında kaldığında | **Sapma dizisi uzunluğu** (3), **Sapma eşiği (%)** (1.0) |
| **Düz çizgi tespitini kullan** | Değer değişmez hâle geldiğinde | **Düz çizgi penceresi** (6), **Düz çizgi toleransı (%)** (0.25) |

**Analiz penceresi** (1000), her veri noktası için saklanan geçmiş değer sayısıdır. **Boşluk tespitini kullan**
dışındaki yöntemler, bu sayıda değer birikmeden tetiklenmez. Bu yüzden pencere büyükse algılamanın başlaması zaman
alır. Geçmiş, veri noktası adına göre tutulur. Aynı veri noktası adını taşıyan cihazlar aynı geçmişi paylaşır. Bu
sizin için önemliyse koşulu tek bir cihazla sınırlayın.

## Sonraki adımlar

- [Kural ifadeleri](https://proxus.io/tr/docs/automate/rule-expressions): alanlar, işleçler ve örnekler.
- [Kural eylemi ekleyin](https://proxus.io/tr/docs/automate/rule-actions): mesaj gönderin ya da veriyi iletin.
- [Alarmlar](https://proxus.io/tr/docs/monitor/alerts): alarm kurallarının ürettiği alarmları onaylayın ve çözün.
