Her eşik kuralının her önem derecesinin tek bir koşulu vardır. Bir koşul ya tek bir karşılaştırmadır (yaprak) ya da bir koşul grubudur. Bu sayfa Hermetry’nin bunları nasıl değerlendirdiğini anlatır; böylece bir alarmın ne zaman açılacağını önceden tahmin edebilirsiniz.
Yapı
Condition = { "key": …, "op": …, "value": …, "topic"?: … }
| { "all": [ Condition, … ] }
| { "any": [ Condition, … ] }
Form, önem derecesi başına bir karşılaştırmayı düzenler. Gruplar JSON modunda yazılır.
Operatörler
op | Şu durumda doğru |
|---|---|
> | değer eşik değerinden büyükse |
>= | büyük veya eşit |
< | küçükse |
<= | küçük veya eşit |
== | eşit |
!= | eşit değil |
“Arasında” diye bir operatör yoktur: all ile >= ve <= kullanın. Aritmetik de yoktur: bir koşul “setpoint + 10” ya da “diğer sensörden fazla” diyemez. Bunun için bir akışta türetilmiş bir anahtar hesaplayın (bkz. Türetilmiş değerler) ya da Kurallar kartındaki bir formülü kullanın.
Değerler nasıl karşılaştırılır
| Değer ve eşik | Karşılaştırma |
|---|---|
İkisi de sayıysa ya da sayı gibi okunan metinse ("23.5", "1e3") | Sayı olarak. "80" ile 80 eşittir. |
Diğer durumlarda == veya != ile | Metin olarak: true, "true" ile eşittir. |
Diğer durumlarda >, >=, <, <= ile | Her zaman yanlış. |
Cihaz null gönderdiyse | == yanlış, != doğrudur. |
Bu nedenle metin olarak raporlanan bir durum == ile çalışır: { "key": "state", "op": "==", "value": "fault" }. Boolean değerler de çalışır: { "key": "door_open", "op": "==", "value": true } ayrıca "true" gönderen bir cihazla da eşleşir.
Niteliklerden cihaza özel eşikler
Değer olarak bir sayı yerine, cihazın bir niteliğinin adı verilebilir:
{ "key": "temperature", "op": ">", "value": { "attribute": "max_temp" } }
Formda Değer alanına attribute:max_temp yazın.
- Hermetry, cihazın o ada sahip server niteliğini, ardından shared niteliğini okur. Client nitelikleri kullanılmaz.
- Böyle bir niteliği olmayan cihaz o karşılaştırma için kontrol edilmez: yaprak yanlış değerlendirilir. Her cihaza niteliği verin ya da sabit bir sayıyla ikinci bir önem derecesi ekleyin.
- Değişen bir nitelik yaklaşık 30 saniye içinde kullanılır.
Bu, tek bir kuralın farklı limitlere sahip cihazlara hizmet etmesini sağlar. Nitelikleri cihazların Attributes sekmesinde, içe aktarma yoluyla ya da API üzerinden ayarlayın. Bkz. Nitelikler.
Gruplar: all ve any
{
"all": [
{ "key": "door_open", "op": "==", "value": true },
{ "key": "pressure", "op": "<", "value": 1.2 }
]
}
all, her parça doğru olduğunda doğrudur;anyise en az biri doğru olduğunda.- Gruplar en fazla 4 seviye iç içe geçebilir.
- Bir önem derecesinin koşulu toplamda en fazla 16 karşılaştırma içerebilir.
Birden çok anahtar üzerindeki kurallar
Cihazlar genellikle anahtarları ayrı mesajlarda gönderir. Bir kural, yalnızca gelen mesaja değil, cihazın en son bilinen değerlerine göre değerlendirilir:
- Bir kural yalnızca anahtarlarından en az birini taşıyan (eşleşen bir konudan gelen) bir mesajda değerlendirilir. Anahtarlarından hiçbirini içermeyen bir mesaj kuralı ne açar ne de kapatır ve debounce için bir örnek sayılmaz.
- Mesajın taşımadığı bir anahtar için karşılaştırma, kuralın bu cihazda o anahtarın gördüğü son değerini kullanır.
- Kuralın cihazda hiç görmediği bir anahtara ait karşılaştırma yanlıştır.
Örnek: kapı durumu her dakika, basınç her on saniyede bir gelir. Yukarıdaki all kuralı, ikisi de doğru olduğunda, hangi mesaj en son gelirse gelsin açılır.
Hatırlanan değerler kuralın durumuyla birlikte saklanır. 30 gün sessiz kalan bir cihaz bu durumu kaybeder ve baştan başlar.
Konu filtreleri
Kendi MQTT konularına yayın yapan cihazlar için bir yaprak tek bir konuyla sınırlanabilir:
topic | Yaprak şunlara uygulanır |
|---|---|
| yok | herhangi bir konudan gelen mesajlar |
"factory/line1/temp" | yalnızca tam olarak bu konudan gelen mesajlar |
null | yalnızca varsayılan konulardan gelen mesajlar |
Aynı anahtar iki konuda bulunuyorsa iki farklı değer sayılır. Formda bunu Advanced > Only from topic altında ayarlayın. Bkz. MQTT konuları ve yükleri.
Anahtarlar
Anahtar bir telemetri anahtarıdır: boşluk içermez, çıplak bir sayı olamaz, en fazla 128 karakter olabilir. Anahtarlarda büyük/küçük harf duyarlıdır: Temperature ile temperature farklı anahtarlardır. Profilin tanımlamadığı bir anahtar uyarıyla kabul edilir; sayıya benzer bir anahtar ise yalnızca profil onu tanımladığında kabul edilir.
Önem dereceleri
Birden çok önem derecesi varsa, tüm koşullar her mesajda değerlendirilir ve doğru olan en yüksek önem derecesi kazanır:
"severities": [
{ "severity": "CRITICAL", "condition": { "key": "temperature", "op": ">", "value": 90 } },
{ "severity": "MAJOR", "condition": { "key": "temperature", "op": ">", "value": 80 } },
{ "severity": "WARNING", "condition": { "key": "temperature", "op": ">", "value": 70 } }
]
85’te alarm Major olur; 95’te Critical‘a yükselir; yeniden 85’e düşünce Major‘a döner (temizleme debounce süresinden sonra); 70’in altına (histerezis çıkarılmış hâlde) inince temizlenir.
Bir koşulun yapamadıkları
| Mümkün değil | Alternatif |
|---|---|
| İki anahtarı ya da iki cihazı karşılaştırmak | Kurallar kartındaki bir formül ya da türetilmiş bir anahtar yazan bir akış |
| Günün saatini ya da takvimi kullanmak | Zaman aralığı içeren bir Kurallar kartı kuralı |
| “10 dakikadır değişmedi” | Bir watchdog ya da delta bloğu içeren bir akış |
| Eşikte aritmetik | Türetilmiş bir anahtar ya da cihaza özel bir nitelik |
| Eşik olarak bir client niteliği okumak | Limiti bir server ya da shared niteliği olarak saklamak |

