Yeni: Yapay zekâ güvenlik duvarı her modülü izliyor ve her olayı sade bir dille açıklıyor. Nasıl çalıştığını görün

Alarms API

Alarmları REST üzerinden listeleyin, okuyun, onaylayın ve çözün; zaman çizelgelerini ve sayımları okuyun, bir profilin alarm kurallarını değiştirin ve cihazları sessizleştirin.

Bu rotalar bir bilet sistemi, bir operasyon merkezi veya bir betiğin alarmlarla çalışmasını sağlar. Alarmların nasıl davrandığı Alarmlar ve Alarmlarla çalışmak sayfalarında anlatılmıştır. Yollar https://<your host>/tenant/<tenantId> altındadır.

Rotalar

YöntemYolİzinİşlevi
GET/api/iot/alarmsiot_alarm.readAlarmları listele
GET/api/iot/alarms/countsiot_alarm.readÖnem derecesine göre açık ve onaylanmış sayıları
GET/api/iot/alarms/{alarmId}iot_alarm.readTek bir alarm ve çalışma kılavuzu
GET/api/iot/alarms/{alarmId}/eventsiot_alarm.readAlarmın zaman çizelgesi
POST/api/iot/alarms/{alarmId}/commentsiot_alarm.acknowledgeZaman çizelgesine not ekle
POST/api/iot/alarms/acknowledgeiot_alarm.acknowledgeEn fazla 100 alarmı onayla
POST/api/iot/alarms/resolveiot_alarm.resolveEn fazla 100 alarmı elle çöz
GET/api/iot/alarm-rules/{profileId}iot_alarm.readBir profilin alarm kuralları
PUT/api/iot/alarm-rules/{profileId}iot_alarm.rules.manageBir profilin alarm kurallarını değiştir
GET, POST, DELETE/api/iot/devices/{deviceId}/alarm-muteokuma: iot_alarm.read; değişiklik: iot_alarm.muteBir cihazın sessizleştirmeleri

Varsayılan roller: okuma ve onaylama Kullanıcı izinleridir; çözme, sessizleştirme ve kuralları değiştirme Yönetici izinleridir.

Alarmları listele

GET /api/iot/alarms (sayfalar 1’den başlar). Bilinmeyen parametreler reddedilir.

ParametreDeğerlerVarsayılan
statusactive (açık veya onaylanmış), OPEN, ACKNOWLEDGED, RESOLVED, anyactive
severityvirgülle ayrılmış CRITICAL, MAJOR, MINOR, WARNING, INFO listesitümü
deviceId, profileIdbir UUID
searchen fazla 128 karakter
from, tosaat dilimi ofsetli ISO 8601, açılış zamanına göreRESOLVED ve any için: son 7 gün
sortseverity, title, device, status, opened; :asc veya :desc ileönce en yeni
page, pageSize1’den başlar; 1 ile 100 arası1, 20

Bir RESOLVED veya any listesi her zaman bir zaman aralığı okur; en fazla 92 gün: “An alarm history range may span at most 92 days.”

{
  "items": [
    {
      "alarmId": "9a7e…",
      "type": "high_temperature",
      "severity": "CRITICAL",
      "status": "OPEN",
      "originator": { "type": "DEVICE", "id": "6f1c…", "name": "cold-room-2" },
      "deviceId": "6f1c…",
      "deviceName": "cold-room-2",
      "profileId": "a1b2…",
      "ruleId": "3c4d…",
      "title": "Temperature too high",
      "details": { "temperature": 9.4 },
      "topic": null,
      "startTs": 1762678800000,
      "openedAt": 1762678800000,
      "acknowledgedAt": null,
      "acknowledgedBy": null,
      "resolvedAt": null,
      "resolvedBy": null,
      "resolveReason": null,
      "occurrences": 3,
      "flapping": false,
      "isAuto": true
    }
  ],
  "total": 1
}

Alarm zamanları epoch’tan itibaren milisaniye cinsindendir. resolveReason değerleri: clear (kuralı veya akışı temizledi), manual (bir kişi), originator_deleted (cihazı silindi).

GET /api/iot/alarms/{alarmId} aynı alanlarla birlikte kuralın çalışma kılavuzunu da içeren { "alarm": {...} } yanıtını verir. Başka bir kuruluşa ait bir alarm 404 döner.

Sayımlar

GET /api/iot/alarms/counts?deviceId={deviceId}
{ "open": 4, "acknowledged": 1, "bySeverity": { "CRITICAL": 1, "MAJOR": 2, "MINOR": 0, "WARNING": 2, "INFO": 0 } }

Yalnızca çözülmemiş alarmlar sayılır. Tüm kuruluş için deviceId parametresini bırakın.

Onaylama ve çözme

POST/tenant/{tenantId}/api/iot/alarms/acknowledge

1 ile 100 alarmı, isteğe bağlı tek bir notla (en fazla 2.000 karakter) onaylayın. Her alarm ayrı işlenir; zaten onaylanmış, çözülmüş veya size ait olmayan bir alarm hata olarak değil, ok: false ile bildirilir.

İstek gövdesi application/json

{
    "alarmIds": [
        "9a7e…",
        "b81f…"
    ],
    "note": "Technician on the way, ticket INC-4411"
}

Örnek curl

curl -X POST 'https://<your-host>/tenant/{tenantId}/api/iot/alarms/acknowledge' \
  -H 'Content-Type: application/json' \
  -d '{"alarmIds":["9a7e…","b81f…"],"note":"Technician on the way, ticket INC-4411"}'

Yanıtlar

200OK
{
    "results": [
        {
            "alarmId": "9a7e…",
            "ok": true
        },
        {
            "alarmId": "b81f…",
            "ok": false,
            "reason": "not_active"
        }
    ]
}

POST /api/iot/alarms/resolve aynı gövdeyi alır ve aynı biçimde yanıt verir. Çözülmüş bir alarm kesindir; durum hâlâ geçerliyse kural yeni bir alarm açar. Bir CRITICAL alarmın elle çözülmesi denetim günlüğüne yazılır.

Durumu değiştirmeden not ekleyin:

POST /api/iot/alarms/{alarmId}/comments
{ "text": "Spare part ordered" }

Yanıt 201 { "ok": true } şeklindedir. Notlar zaman çizelgesinde görünür (GET .../events).

Alarm kuralları

GET /api/iot/alarm-rules/{profileId} { "rules": [...] } yanıtını verir. PUT profilin tüm kural kümesini değiştirir: bıraktığınız kurallar silinir ve açık alarmları çözülür.

{
  "rules": [
    {
      "type": "high_temperature",
      "title": "Temperature too high",
      "severities": [
        { "severity": "CRITICAL", "condition": { "key": "temperature", "op": ">", "value": { "attribute": "maxTempThreshold" } } },
        { "severity": "WARNING", "condition": { "key": "temperature", "op": ">", "value": 6 } }
      ],
      "debounce": { "mode": "duration", "raise": 300, "clear": 120 },
      "hysteresis": 0.5,
      "notify": { "recipients": [{ "kind": "role", "role": "ADMIN" }], "minSeverity": "WARNING", "repeatEverySec": 3600 },
      "runbook": "Check the door seal, then the compressor."
    },
    {
      "type": "device_offline",
      "title": "Sensor offline",
      "inactivity": { "afterSec": 900, "severity": "WARNING" }
    }
  ]
}

Şemanın kuralları:

AlanKural
Profil başına kuralen fazla 50; her type bir kez
typeharfler, rakamlar, _ . : -, en fazla 128; device_offline hareketsizlik kuralıdır
conditionbir karşılaştırma { key, op, value }, op değeri >, >=, <, <=, ==, != değerlerinden biri, ya da { "all": [...] } / { "any": [...] }; en fazla 16 karşılaştırma ve 4 düzey
valuebir sayı, metin, mantıksal değer veya cihazın özniteliğiyle karşılaştırmak için { "attribute": "<name>" }
clearisteğe bağlı; yoksa hiçbir önem koşulu sağlanmadığında alarm temizlenir
debouncemode count (örnek sayısı) veya duration (cihaz zamanında saniye); raise ve clear 1 ile 86.400 arası
dampeningmaxTransitions 2 ile 100, windowSec 10 ile 86.400, holdSec 1 ile 86.400 arası
notify.recipients1 ile 20 arası; { kind: "user", userId }, { kind: "role", role: "OWNER" \| "ADMIN" \| "USER" }, { kind: "email", email }
notify.repeatEverySec60 ile 604.800 arası
inactivity.afterSec10 ile 604.800 arası

Koşul anahtarları profilin anahtarlarına göre denetlenir. Her alanın tam anlamı Cihaz profillerindeki alarm kuralları ve Alarm koşulları başvuru kılavuzu sayfalarında yer alır.

Sessizleştirmeler

Çağrıİşlevi
GET /api/iot/devices/{deviceId}/alarm-mute{ "mutes": [...] }
{ "ruleId": null, "until": "2026-11-12T18:00:00+03:00", "reason": "Compressor service" } ile POSTCihazın tüm alarmlarını (ya da ruleId ile tek bir kuralı) bir zamana kadar sessizleştirir; 201 { "mute": {...} }
DELETE ?muteId=…Tek bir sessizleştirmeyi kaldırır; muteId yoksa cihazın tüm sessizleştirmeleri: { "lifted": n }

Bir sessizleştirme gelecekte bitmeli ve en fazla 90 gün sürmelidir. Sessizleştirme sırasında alarmlar yine kaydedilir; kimseye bildirim gönderilmez. Bkz. Bakım için cihaz sessizleştirme.

Hatalar

DurumMesaj
400Zaman aralığı başlangıcından önce bitiyor. / Bir alarm geçmişi aralığı en fazla 92 gün olabilir. / Bir sessizleştirme gelecekte bitmelidir. / Bir sessizleştirme en fazla 90 gün sürebilir.
400issues ile birlikte Validation error: şemayı bozan bir kural kümesi veya profilde bulunmayan bir koşul anahtarı
404Alarm bulunamadı. / Cihaz bulunamadı. / Cihaz profili bulunamadı.

Yoklama yerine olaylar

Değişiklikleri anında öğrenmek için bir webhook’u alarm.created, alarm.acknowledged ve alarm.cleared olaylarına abone edin. Yük içerikleri Webhook olay başvurusunda yer alır.