Diese Routen ermöglichen es einem Ticketsystem, einer Betriebszentrale oder einem Skript, mit Alarmen zu arbeiten. Wie sich Alarme verhalten, wird unter Alarme und Mit Alarmen arbeiten erklärt. Die Pfade liegen unter https://<your host>/tenant/<tenantId>.
Routen
| Methode | Pfad | Berechtigung | Funktion |
|---|---|---|---|
| GET | /api/iot/alarms | iot_alarm.read | Alarme auflisten |
| GET | /api/iot/alarms/counts | iot_alarm.read | Anzahl offener und bestätigter Alarme nach Schweregrad |
| GET | /api/iot/alarms/{alarmId} | iot_alarm.read | Ein Alarm mit seinem Runbook |
| GET | /api/iot/alarms/{alarmId}/events | iot_alarm.read | Der Verlauf des Alarms |
| POST | /api/iot/alarms/{alarmId}/comments | iot_alarm.acknowledge | Eine Notiz im Verlauf hinzufügen |
| POST | /api/iot/alarms/acknowledge | iot_alarm.acknowledge | Bis zu 100 Alarme bestätigen |
| POST | /api/iot/alarms/resolve | iot_alarm.resolve | Bis zu 100 Alarme manuell beheben |
| GET | /api/iot/alarm-rules/{profileId} | iot_alarm.read | Die Alarmregeln eines Profils |
| PUT | /api/iot/alarm-rules/{profileId} | iot_alarm.rules.manage | Die Alarmregeln eines Profils ersetzen |
| GET, POST, DELETE | /api/iot/devices/{deviceId}/alarm-mute | Lesen: iot_alarm.read; ändern: iot_alarm.mute | Die Stummschaltungen eines Geräts |
Standardrollen: Lesen und Bestätigen sind Benutzerberechtigungen; Beheben, Stummschalten und Ändern der Regeln sind Administratorberechtigungen.
Alarme auflisten
GET /api/iot/alarms (Seiten ab 1). Unbekannte Parameter werden abgelehnt.
| Parameter | Werte | Standard |
|---|---|---|
status | active (offen oder bestätigt), OPEN, ACKNOWLEDGED, RESOLVED, any | active |
severity | kommagetrennte Liste aus CRITICAL, MAJOR, MINOR, WARNING, INFO | alle |
deviceId, profileId | eine UUID | |
search | bis zu 128 Zeichen | |
from, to | ISO 8601 mit Offset, auf den Zeitpunkt der Eröffnung bezogen | für RESOLVED und any: die letzten 7 Tage |
sort | severity, title, device, status, opened, mit :asc oder :desc | neueste zuerst |
page, pageSize | ab 1; 1 bis 100 | 1, 20 |
Eine Liste mit RESOLVED oder any erfordert immer einen Zeitraum von höchstens 92 Tagen: „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
}
Alarmzeiten sind Millisekunden seit der Epoche. resolveReason ist clear (seine Regel oder sein Ablauf hat ihn aufgehoben), manual (eine Person) oder originator_deleted (sein Gerät wurde gelöscht).
GET /api/iot/alarms/{alarmId} antwortet mit { "alarm": {...} } mit denselben Feldern sowie dem Runbook der Regel. Ein Alarm einer anderen Organisation ergibt 404.
Anzahlen
GET /api/iot/alarms/counts?deviceId={deviceId}
{ "open": 4, "acknowledged": 1, "bySeverity": { "CRITICAL": 1, "MAJOR": 2, "MINOR": 0, "WARNING": 2, "INFO": 0 } }
Nur Alarme, die nicht behoben sind, werden gezählt. Lassen Sie deviceId weg, um die gesamte Organisation zu erfassen.
Bestätigen und beheben
POST/tenant/{tenantId}/api/iot/alarms/acknowledge
Bestätigt 1 bis 100 Alarme mit einer optionalen Notiz (bis zu 2.000 Zeichen). Jeder Alarm wird einzeln behandelt; ein Alarm, der bereits bestätigt oder behoben ist oder nicht Ihnen gehört, wird mit ok: false gemeldet, nicht als Fehler.
Anfragetext application/json
{
"alarmIds": [
"9a7e…",
"b81f…"
],
"note": "Technician on the way, ticket INC-4411"
}
Beispiel 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"}'
Antworten
200OK
{
"results": [
{
"alarmId": "9a7e…",
"ok": true
},
{
"alarmId": "b81f…",
"ok": false,
"reason": "not_active"
}
]
}
POST /api/iot/alarms/resolve nimmt denselben Anfragetext entgegen und antwortet genauso. Ein behobener Alarm ist endgültig; ist die Bedingung weiterhin erfüllt, öffnet die Regel einen neuen Alarm. Das manuelle Beheben eines CRITICAL-Alarms wird im Audit-Log protokolliert.
Eine Notiz hinzufügen, ohne den Status zu ändern:
POST /api/iot/alarms/{alarmId}/comments
{ "text": "Spare part ordered" }
Die Antwort lautet 201 { "ok": true }. Notizen erscheinen im Verlauf (GET .../events).
Alarmregeln
GET /api/iot/alarm-rules/{profileId} antwortet mit { "rules": [...] }. PUT ersetzt den gesamten Regelsatz des Profils: Regeln, die Sie weglassen, werden gelöscht, und ihre offenen Alarme werden behoben.
{
"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" }
}
]
}
Regeln des Schemas:
| Feld | Regel |
|---|---|
| Regeln pro Profil | höchstens 50; jeder type einmal |
type | Buchstaben, Ziffern, _ . : -, bis zu 128; device_offline ist die Regel für Inaktivität |
condition | ein Vergleich { key, op, value } mit op aus >, >=, <, <=, ==, != oder { "all": [...] } / { "any": [...] }; höchstens 16 Vergleiche und 4 Ebenen |
value | eine Zahl, ein Text, ein Wahrheitswert oder { "attribute": "<name>" } für den Vergleich mit dem Attribut des Geräts |
clear | optional; ohne diesen Eintrag wird der Alarm aufgehoben, sobald keine Schweregradbedingung mehr zutrifft |
debounce | mode count (Messwerte) oder duration (Sekunden der Gerätezeit); raise und clear 1 bis 86.400 |
dampening | maxTransitions 2 bis 100, windowSec 10 bis 86.400, holdSec 1 bis 86.400 |
notify.recipients | 1 bis 20 aus { kind: "user", userId }, { kind: "role", role: "OWNER" \| "ADMIN" \| "USER" }, { kind: "email", email } |
notify.repeatEverySec | 60 bis 604.800 |
inactivity.afterSec | 10 bis 604.800 |
Bedingungsschlüssel werden gegen die Schlüssel des Profils geprüft. Die vollständige Bedeutung jedes Feldes steht unter Alarmregeln auf Geräteprofilen und Referenz der Alarmbedingungen.
Stummschaltungen
| Aufruf | Funktion |
|---|---|
GET /api/iot/devices/{deviceId}/alarm-mute | { "mutes": [...] } |
POST mit { "ruleId": null, "until": "2026-11-12T18:00:00+03:00", "reason": "Compressor service" } | Stummschaltet jeden Alarm des Geräts (oder eine Regel mit ruleId) bis zu einem Zeitpunkt; 201 { "mute": {...} } |
DELETE ?muteId=… | Hebt eine Stummschaltung auf; ohne muteId alle Stummschaltungen des Geräts: { "lifted": n } |
Eine Stummschaltung muss in der Zukunft enden und höchstens 90 Tage dauern. Alarme werden auch während der Stummschaltung aufgezeichnet; niemand wird benachrichtigt. Siehe Gerät für Wartung stummschalten.
Fehler
| Status | Meldung |
|---|---|
| 400 | Der Zeitraum endet vor seinem Beginn. / Ein Alarmverlauf darf höchstens 92 Tage umfassen. / Eine Stummschaltung muss in der Zukunft enden. / Eine Stummschaltung darf höchstens 90 Tage dauern. |
| 400 | Validation error mit issues: ein Regelsatz, der das Schema verletzt, oder ein Bedingungsschlüssel, den das Profil nicht hat |
| 404 | Alarm nicht gefunden. / Gerät nicht gefunden. / Geräteprofil nicht gefunden. |
Ereignisse statt Abfragen
Abonnieren Sie einen Webhook für alarm.created, alarm.acknowledged und alarm.cleared, um Änderungen sofort zu erfahren. Die Nutzdaten stehen in der Referenz der Webhook-Ereignisse.

