Nouveau : le pare-feu IA surveille chaque module et explique chaque incident en termes simples. Découvrez comment ça marche

API Alarms

Lister, lire, acquitter et résoudre des alarmes, lire leur chronologie et leurs compteurs, remplacer les règles d'alarme d'un profil et mettre des appareils en sourdine via REST.

Ces routes permettent à un système de tickets, à un centre d’exploitation ou à un script de travailler avec les alarmes. Le fonctionnement des alarmes est expliqué dans Alarms et Working with alarms. Les chemins sont sous https://<your host>/tenant/<tenantId>.

Routes

MéthodeCheminPermissionAction
GET/api/iot/alarmsiot_alarm.readLister les alarmes
GET/api/iot/alarms/countsiot_alarm.readNombre d’alarmes ouvertes et acquittées par sévérité
GET/api/iot/alarms/{alarmId}iot_alarm.readUne alarme, avec sa procédure d’intervention
GET/api/iot/alarms/{alarmId}/eventsiot_alarm.readLa chronologie de l’alarme
POST/api/iot/alarms/{alarmId}/commentsiot_alarm.acknowledgeAjouter une note à la chronologie
POST/api/iot/alarms/acknowledgeiot_alarm.acknowledgeAcquitter jusqu’à 100 alarmes
POST/api/iot/alarms/resolveiot_alarm.resolveRésoudre manuellement jusqu’à 100 alarmes
GET/api/iot/alarm-rules/{profileId}iot_alarm.readLes règles d’alarme d’un profil
PUT/api/iot/alarm-rules/{profileId}iot_alarm.rules.manageRemplacer les règles d’alarme d’un profil
GET, POST, DELETE/api/iot/devices/{deviceId}/alarm-mutelecture : iot_alarm.read ; modification : iot_alarm.muteLes mises en sourdine d’un appareil

Rôles par défaut : la lecture et l’acquittement sont des permissions User ; la résolution, la mise en sourdine et la modification des règles sont des permissions Admin.

Lister les alarmes

GET /api/iot/alarms (pages à partir de 1). Les paramètres inconnus sont refusés.

ParamètreValeursPar défaut
statusactive (ouverte ou acquittée), OPEN, ACKNOWLEDGED, RESOLVED, anyactive
severityliste séparée par des virgules de CRITICAL, MAJOR, MINOR, WARNING, INFOtoutes
deviceId, profileIdun UUID
searchjusqu’à 128 caractères
from, toISO 8601 avec décalage horaire, sur l’heure d’ouverturepour RESOLVED et any : les 7 derniers jours
sortseverity, title, device, status, opened, avec :asc ou :descles plus récentes d’abord
page, pageSizeà partir de 1 ; de 1 à 1001, 20

Une liste RESOLVED ou any lit toujours une plage de dates, d’au maximum 92 jours : « 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
}

Les heures des alarmes sont exprimées en millisecondes depuis l’époque. resolveReason vaut clear (sa règle ou son flux l’a effacée), manual (une personne) ou originator_deleted (son appareil a été supprimé).

GET /api/iot/alarms/{alarmId} répond { "alarm": {...} } avec les mêmes champs, plus la procédure d’intervention de la règle. Une alarme d’une autre organisation renvoie un 404.

Nombres

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

Seules les alarmes non résolues sont comptées. Omettez deviceId pour l’ensemble de l’organisation.

Acquitter et résoudre

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

Acquitter de 1 à 100 alarmes avec une note facultative (jusqu’à 2 000 caractères). Chaque alarme est traitée séparément ; une alarme déjà acquittée, résolue ou qui ne vous appartient pas est signalée avec ok: false, et non comme une erreur.

Corps de la requête application/json

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

Exemple 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"}'

Réponses

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

POST /api/iot/alarms/resolve accepte le même corps et répond de la même façon. Une alarme résolue est définitive ; si la condition est toujours vraie, la règle ouvre une nouvelle alarme. La résolution manuelle d’une alarme CRITICAL est consignée dans le journal d’audit.

Ajouter une note sans modifier l’état :

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

La réponse est 201 { "ok": true }. Les notes apparaissent dans la chronologie (GET .../events).

Règles d’alarme

GET /api/iot/alarm-rules/{profileId} répond { "rules": [...] }. PUT remplace l’ensemble des règles du profil : les règles omises sont supprimées, et leurs alarmes ouvertes sont résolues.

{
  "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" }
    }
  ]
}

Règles du schéma :

ChampRègle
Règles par profilau maximum 50 ; chaque type une seule fois
typelettres, chiffres, _ . : -, jusqu’à 128 ; device_offline est la règle d’inactivité
conditionune comparaison { key, op, value } avec op parmi >, >=, <, <=, ==, !=, ou { "all": [...] } / { "any": [...] } ; au maximum 16 comparaisons et 4 niveaux
valueun nombre, un texte, un booléen, ou { "attribute": "<name>" } pour comparer à l’attribut de l’appareil
clearfacultatif ; sans lui, l’alarme est effacée lorsqu’aucune condition de sévérité n’est vraie
debouncemode count (échantillons) ou duration (secondes du temps de l’appareil) ; raise et clear de 1 à 86 400
dampeningmaxTransitions de 2 à 100, windowSec de 10 à 86 400, holdSec de 1 à 86 400
notify.recipientsde 1 à 20 de { kind: "user", userId }, { kind: "role", role: "OWNER" \| "ADMIN" \| "USER" }, { kind: "email", email }
notify.repeatEverySecde 60 à 604 800
inactivity.afterSecde 10 à 604 800

Les clés de condition sont vérifiées par rapport aux clés du profil. La signification complète de chaque champ se trouve dans Alarm rules on device profiles et Alarm conditions reference.

Mises en sourdine

AppelAction
GET /api/iot/devices/{deviceId}/alarm-mute{ "mutes": [...] }
POST avec { "ruleId": null, "until": "2026-11-12T18:00:00+03:00", "reason": "Compressor service" }Met en sourdine toutes les alarmes de l’appareil (ou une seule règle avec ruleId) jusqu’à une heure donnée ; 201 { "mute": {...} }
DELETE ?muteId=…Lève une mise en sourdine ; sans muteId, toutes les mises en sourdine de l’appareil : { "lifted": n }

Une mise en sourdine doit se terminer dans le futur et durer au maximum 90 jours. Les alarmes continuent d’être enregistrées pendant la mise en sourdine ; personne n’est notifié. Voir Muting a device for maintenance.

Erreurs

StatutMessage
400La plage de dates se termine avant de commencer. / An alarm history range may span at most 92 days. / A mute must end in the future. / A mute may last at most 90 days.
400Validation error avec issues : un ensemble de règles qui ne respecte pas le schéma, ou une clé de condition que le profil ne possède pas
404Alarme introuvable. / Appareil introuvable. / Profil d’appareil introuvable.

Des événements plutôt que des interrogations

Abonnez un webhook à alarm.created, alarm.acknowledged et alarm.cleared pour être informé des changements au fur et à mesure. Les charges utiles sont décrites dans la Webhook event reference.