# İşlem akışı, alarm kuralı, fonksiyon

> Proxus'ta veri üzerinde işlem yapmanın üç yolunu, her birinin ne işe yaradığını, nerede çalıştığını ve hangisinin ne zaman seçileceğini anlatır.

Kaynak: https://proxus.io/tr/docs/concepts/pipelines-and-rules

Proxus, okunan değerlerle iş yapmak için üç araç sunar. Bu araçların görevleri kısmen örtüşür, ancak her birinin
en iyi yaptığı bir iş vardır:

- **İşlem akışı**, değerleri yolda değiştirir ya da değerlere göre işlem yapar. Düz cümlelerle yazılmış bir hedefle
  başlatılır ya da bir tuval üzerinde adımlar dizilerek kurulur.
- **Alarm kuralı**, değerleri ya da günlük kayıtlarını izler ve tanımlı koşul sağlandığında alarm üretir.
- **Fonksiyon**, diğer ikisiyle yapılamayan işler için yazdığınız C# kodudur.

Üçü de merkez sunucuda, **Kurallar ve akışlar** menüsünde tanımlanır. Çalıştıkları yer ise seçtiğiniz Edge
Gateway'lerdir, yani verinin hemen yanı. Yeni bir alarm kuralı ya da fonksiyon, başka Edge Gateway seçmediğiniz sürece
**SYSTEM** Edge Gateway'inde çalışır.

## İşlem akışları

İşlem akışı, bir tuval üzerinde kurduğunuz adımlar zinciridir. Sıfırdan kurabilir ya da galeriden bir hedef
seçip hazır akışı kendinize göre uyarlayabilirsiniz. İşlem akışı iki işten birini yapar:

- **Veriyi yolda düzenler.** Koşula uyan her değer üzerinde, değer saklanmadan, yayınlanmadan ya da bir yere
  gönderilmeden önce çalışır. Birim dönüştürür, ham sayaç değerini ölçekler, veri noktasının adını değiştirir,
  bağlam bilgisi ekler, veri kalitesini kontrol eder, değeri atar ya da yönlendirir. Sonraki bütün aşamalar
  (geçmiş veri deposu, ortak veri modeli (UNS), veri hedefleri, alarm kuralları) düzenlenmiş değeri alır.
- **Veriye göre işlem yapar.** Düzenleme aşamasından sonra, son değerler üzerinde çalışır. Cihaz ve Edge Gateway
  olaylarında, günlük kayıtlarında ve zamanlanmış görevlerde de çalışır. Örneğin bir değer uzun süre aralık
  dışında kalırsa alarm üretir, bir cihazdan veri gelmediğini fark eder, bir hedefe değer gönderir ya da bir
  cihaza yazar.

İşlem akışı tek bir cihaza bağlı değildir. Hangi değerler üzerinde çalışacağını cihaza, profile, protokole,
yere, veri noktasına ya da başka özelliklere göre seçer. Böylece tek bir işlem akışı, sonradan eklenecekler de
dahil olmak üzere tesisteki bütün dolum makinelerini kapsayabilir.

İşlem akışları iki aşamada yayınlanır:

1. **Denemede yayınla**, işlem akışını Edge Gateway'lerde çalıştırır ve akışın neler yapacağını kaydeder. Bu
   aşamada veri değişmez, alarm açılmaz, cihazlara yazılmaz.
2. **Canlı yayınla**, deneme aşamasında sonuçların doğru olduğu görüldükten sonra akışı devreye alır.

Cihaza yazan ya da dış bir API'yi çağıran adımlar, yalnızca yapılandırmada bu etkilerin açık olduğu uç
cihazlarda sonuç verir (`[Flows]`, `EffectsEnabled`). Bu etkiler varsayılan olarak kapalıdır.

İşlem akışını şu durumlarda kullanın: mantık adımlar halinde çizilebiliyorsa, verinin kendisinin değişmesi
gerekiyorsa ya da aynı mantık birçok cihaza birden uygulanacaksa. Ayrıntılar [İşlem akışları](https://proxus.io/tr/docs/automate/pipelines)
sayfasındadır.

## Alarm kuralları

Alarm kuralı, sağlandığında ne olacağı önceden belirlenmiş bir koşuldur. Kural, çalıştığı Edge Gateway'lerdeki
değerleri, cihaz durum değişikliklerini ve günlük kayıtlarını kontrol eder. Koşul sağlandığında bir **alarm** üretir. Operatörler bu alarmı
**İzleme > Alarmlar** ekranında görür ve onaylayabilir.

Alarm kuralının koşulu iki türlü tanımlanır:

- Değerler üzerinde bir **ifade**, örneğin "Sıcaklık 60'tan büyük".
- **Anomali algılama**. Bu yöntem, veri noktasının normalde nasıl davrandığını öğrenir. Ani sıçramaları, hızlı
  yükseliş ve düşüşleri, yavaş kaymaları, değişmeyen değerleri (düz çizgi) ve verideki boşlukları işaretler.

Sonrasında ne olacağını **Kural eylemleri** belirler: bir bildirim kanalıyla bildirim göndermek ya da bir veri
hedefini tetiklemek. Anomali algılayıcısı Trend çalışma alanında da çalışır. Bu sayede trend grafiğinde gördüğünüz bir
anomaliyi, aynı şekilde çalışan bir alarm kuralına dönüştürebilirsiniz.

Amacınız "bu olduğunda birine haber ver" ise alarm kuralı kullanın. Alarm kuralları veriyi değiştirmez.
Ayrıntılar [Alarm kuralları](https://proxus.io/tr/docs/automate/rules) ve [Kural eylemleri](https://proxus.io/tr/docs/automate/rule-actions)
sayfalarındadır.

## Fonksiyonlar

Fonksiyon, merkez sunucuda yazdığınız bir C# sınıfıdır. Merkez sunucu sınıfı derler ve seçtiğiniz Edge Gateway'lere
gönderir. Fonksiyon, dağıtımda kaldığı sürece bu Edge Gateway'lerde çalışır. Bir fonksiyon:

- Edge Gateway'in okuduğu her değeri, işlem akışlarından önce görebilir;
- belirli bir zamanlamayla çalışabilir;
- MQTT konularına abone olabilir ve bu konularda yayın yapabilir;
- bir veritabanından veri okuyup sonucu bir cihazın değerleri olarak kaydedebilir;
- değerleri veri akışına geri gönderebilir. İşlem akışları, alarm kuralları ve veri hedefleri bu değerleri diğer
  değerler gibi işler.

Gerçek kod gerektiren mantık için fonksiyon kullanın. Birçok cihazın verisini birleştiren hesaplamalar ve
Proxus'ta hazır bağlayıcısı olmayan sistemlere erişim buna örnektir. Fonksiyon, işlem akışından daha güçlüdür, ancak
bakımını sizin yapmanız gereken bir koddur. Ayrıntılar [Fonksiyonlar](https://proxus.io/tr/docs/automate/functions) ve
[Fonksiyon SDK'sı](https://proxus.io/tr/docs/develop/functions-sdk) sayfalarındadır.

## Hangi aracı seçmeli

| Amacınız | Kullanılacak araç |
| --- | --- |
| Değerleri saklanmadan ve yayınlanmadan önce dönüştürmek, ölçeklemek, yeniden adlandırmak ya da filtrelemek | Veriyi düzenleyen bir işlem akışı |
| Bir değer sınırı aştığında alarm üretmek | Alarm kuralı ya da veriye göre işlem yapan bir işlem akışı |
| Sınır belirlemeden olağan dışı davranışı fark etmek | Anomali algılama kullanan bir alarm kuralı |
| Birine e-posta, SMS ya da mesajlaşma uygulamasıyla haber vermek | Bildirim eylemi olan bir alarm kuralı |
| Bir cihazın veri göndermeyi bıraktığını fark etmek | Veriye göre işlem yapan bir işlem akışı |
| Seçili değerleri yalnızca tek bir sisteme göndermek | Aktarım stratejisi **Yalnızca işlem akışları** olan bir veri hedefine veri gönderen işlem akışı |
| Birden çok cihazın verisini birleştirmek ya da Proxus'ta bağlayıcısı olmayan bir sisteme erişmek | Fonksiyon |

## Veri akışında hangi sırayla çalışırlar

Edge Gateway'de bir değer bu araçlardan şu sırayla geçer: önce fonksiyonlar değeri görür, ardından veriyi düzenleyen
işlem akışları çalışır. Sonra Edge Gateway değişen değerleri işaretler. En son alarm kuralları, veriye göre işlem
yapan işlem akışları ve veri hedefleri bu sonuç üzerinde çalışır. Bir değerin bu aşamalardaki yolunu
[Veri akışı](https://proxus.io/tr/docs/concepts/data-flow) sayfası izler.

## Sonraki adımlar

- [İşlem akışları](https://proxus.io/tr/docs/automate/pipelines): ilk işlem akışınızı kurun ve Deneme modunda yayınlayın.
- [Alarm kuralları](https://proxus.io/tr/docs/automate/rules): bir değer sınırı aştığında alarm üretin.
- [Fonksiyonlar](https://proxus.io/tr/docs/automate/functions): kendi C# kodunuzu Edge Gateway'lerde çalıştırın.
