Eziwan-REST-API
Mit der REST-API von Eziwan können Sie die Plattform in Ihre bestehenden Tools – SCADA, ERP, ITSM, BI – integrieren oder eigene Überwachungsanwendungen erstellen.
Basis-URL und Authentifizierung
Endpunkt
https://api.eziwan.com/v1
Bearer-Authentifizierung
Für alle Anfragen ist ein Bearer-API-Token erforderlich:
Authorization: Bearer np_api_xxxxxxxxxxxxxxxxxxxxxxxx
Erstellen Sie ein Token unter Einstellungen → API → Token erstellen.
Verfügbare Berechtigungsstufen pro Token:
- Nur Lesen: ausschließlich GET — Dashboard, Daten, Status
- Lesen/Schreiben: GET + POST/PUT — Benachrichtigungen, Neustart, Konfiguration
- Admin: Vollzugriff einschließlich Benutzerverwaltung und Abrechnung
Wichtigste Endpunkte
Vorrichtungen
# Alle Geräte auflisten
GET /v1/devices
# Detailansicht einer Vorrichtung
GET /v1/devices/{device_id}
# Echtzeitstatus (Signal, VPN, aktive SIM-Karte)
GET /v1/devices/{device_id}/status
# Verbindungshistorie
GET /v1/devices/{device_id}/connectivity?from=2026-01-01&to=2026-06-01
Sensordaten
# Aktuelle Werte aller Variablen eines Geräts
GET /v1/devices/{device_id}/data/latest
# Zeitreihe für eine Variable
GET /v1/devices/{device_id}/data?metric=active_power&from=2026-06-01T00:00:00Z&to=2026-06-01T23:59:59Z&interval=5m
# Export CSV
GET /v1/devices/{device_id}/data/export?format=csv&from=2026-01-01&to=2026-06-30
Warnmeldungen
# Aktive Benachrichtigungen zur Organisation
GET /v1/organization/alarms/active
# Historique des alertes
GET /v1/organization/alarms?from=2026-06-01&severity=critical
# Eine Warnmeldung quittieren
POST /v1/alarms/{alarm_id}/acknowledge
Body: { "comment": "Technicien en route" }
# Eine Warnmeldung beheben
POST /v1/alarms/{alarm_id}/resolve
Body: { "comment": "Pompe réparée, retour à la normale" }
Maßnahmen im Rahmen der Programme
# Neustart eines Geräts (Lese-/Schreibberechtigung erforderlich)
POST /v1/devices/{device_id}/reboot
# Forcer un failover SIM
POST /v1/devices/{device_id}/failover
Body: { "target_sim": 2 }
# Logs d'audit
GET /v1/audit-logs?from=2026-01-01&to=2026-06-30&format=csv
Praktische Beispiele
Python – Offline-Geräte abrufen
import requests
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
BASE_URL = "https://api.eziwan.com/v1"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Geräte offline auflisten
response = requests.get(f"{BASE_URL}/devices", headers=headers)
devices = response.json()["data"]
offline = [d for d in devices if d["status"] == "offline"]
print(f"{len(offline)} dispositifs hors ligne :")
for d in offline:
print(f" - {d['name']} ({d['id']}) — hors ligne depuis {d['last_seen']}")
Python – Daten von einem Sensor abrufen
import requests
from datetime import datetime, timedelta
API_TOKEN = "np_api_xxxxxxxxxxxxxxxxxxxxxxxx"
DEVICE_ID = "d_a1b2c3d4"
headers = {"Authorization": f"Bearer {API_TOKEN}"}
# Letzte 24 Stunden – Wirkleistung
response = requests.get(
f"https://api.eziwan.com/v1/devices/{DEVICE_ID}/data",
headers=headers,
params={
"metric": "active_power",
"from": (datetime.utcnow() - timedelta(days=1)).isoformat() + "Z",
"to": datetime.utcnow().isoformat() + "Z",
"interval": "5m"
}
)
data = response.json()["data"]
print(f"{len(data)} points retournés")
for point in data[:5]:
print(f" {point['timestamp']}: {point['value']} {point['unit']}")
curl — CSV-Export für den Monatsbericht
curl -H "Authorization: Bearer np_api_xxxx" \
"https://api.eziwan.com/v1/devices/d_a1b2c3d4/data/export?format=csv&from=2026-06-01&to=2026-06-30" \
-o donnees_juin_2026.csv
Webhooks
Webhooks senden Ereignisse per Push an Ihren HTTP-Endpunkt.
Konfiguration
Dashboard → Benachrichtigungen → Webhooks → Webhook hinzufügen
Einstellungen:
- URL: Ihr HTTPS-Endpunkt (z. B.:
https://your-app.com/eziwan-events) - Secret: HMAC-SHA256-Schlüssel zur Überprüfung der Signatur (optional, wird jedoch empfohlen)
- Ereignisse: Wählen Sie die Typen aus (device.offline, alarm.triggered, failover usw.)
Payload-Format
{
"event": "device.offline",
"severity": "critical",
"timestamp": "2026-06-15T02:14:33.412Z",
"device": {
"id": "d_a1b2c3d4",
"name": "GW-Valenciennes-03",
"group": "Région Nord / Site Valenciennes",
"tags": ["env:production", "criticite:haute"]
},
"detail": {
"last_seen": "2026-06-15T02:12:01.000Z",
"sim_active": 2,
"rsrp_dbm": -108
},
"dashboard_url": "https://app.eziwan.com/devices/d_a1b2c3d4"
}
Überprüfung der Signatur
import hmac, hashlib
def verify_eziwan_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = "hmac-sha256=" + hmac.new(
secret.encode(), payload, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)
# In Ihrem Flask/FastAPI-Handler:
# signature = request.headers.get("X-Eziwan-Signature")
# valid = verify_eziwan_webhook(request.body, signature, WEBHOOK_SECRET)
Verfügbare Veranstaltungen
| Ereignis | Auslöser |
|---|---|
device.offline | Gerät offline |
device.online | Wieder online |
alarm.triggered | Alarmschwelle überschritten |
alarm.resolved | Alarm behoben |
failover.activated | Umschaltung von SIM1 auf SIM2 |
failover.recovered | Rückkehr zu SIM1 |
firmware.updated | Firmware-Update erfolgreich |
provisioning.completed | ZTP abgeschlossen – Gateway online |
ITSM-Integrationen über Webhooks
ServiceNow
// Transformationsskript für den ServiceNow Integration Hub
(function process(/*RESTAPIRequest*/ request) {
var body = JSON.parse(request.body.dataString);
if (body.event === "device.offline" && body.severity === "critical") {
var incident = new GlideRecord("incident");
incident.short_description = "Gateway Eziwan hors ligne : " + body.device.name;
incident.description = "Site : " + body.device.group + "\nDernier vu : " + body.detail.last_seen;
incident.urgency = "1"; // Haute
incident.impact = "2"; // Moyen
incident.insert();
}
})(request);
Jira Service Management
# Automatische Erstellung eines Tickets über die Jira-API
curl -X POST \
-H "Authorization: Bearer JIRA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fields": {
"project": { "key": "OPS" },
"summary": "Gateway hors ligne : GW-Valenciennes-03",
"description": "Site : Région Nord\nDernier contact : 2026-06-15T02:12:01Z",
"issuetype": { "name": "Incident" },
"priority": { "name": "High" }
}
}' \
"https://„Ihre-Instanz.atlassian.net/rest/api/3/issue“
Grenzwerte und Kontingente
| Tarif | API-Anfragen/Tag | Webhooks | CSV-Export |
|---|---|---|---|
| Starter | 1.000 | 2 Endpunkte | 90 Tage |
| Growth | 10.000 | 10 Endpunkte | 1 Jahr |
| Scale | 100.000 | 50 Endpunkte | 3 Jahre |
| Enterprise | Unbegrenzt | Unbegrenzt | Unbegrenzt |
Die vollständige OpenAPI-Dokumentation (Swagger) ist unter api.eziwan.com/docs verfügbar.
Häufig gestellte Fragen
Wie kann man sich bei der API authentifizieren?
Über ein über die Konsole generiertes Bearer-Token (Gültigkeitsdauer und Ablaufzeit konfigurierbar). Die Token werden sofort widerrufen, und jeder Aufruf wird zusammen mit seinem Absender protokolliert.
Welche Daten sind über die API abrufbar?
Die Bestandsliste der Geräte und deren Status (Signal, SIM, VPN, Firmware), die erfassten Messwerte (Modbus, Sensoren), der Alarmverlauf und die Verwaltungsmaßnahmen (Neustart, Konfigurationsübertragung).
Kann man Benachrichtigungen per Push statt per Polling erhalten?
Ja, über Webhooks: Die Plattform ruft bei jedem ausgewählten Ereignis (Warnung, Verbindungsabbruch, Überschreitung eines Schwellenwerts) Ihren HTTP-Endpunkt auf – ideal, um ITSM-Tickets zu erstellen oder Ihre bestehende Überwachungslösung zu versorgen.
Gibt es Datenvolumenbeschränkungen?
Ja, eine Ratenbegrenzung schützt die Plattform; die Standardkontingente decken die üblichen Integrationen mehr als ausreichend ab und lassen sich bei Bedarf für intensive Nutzung anpassen.
Weiterführende Ressourcen
- MQTT-Integration – der Echtzeit-Datenstrom
- Erfassung industrieller Daten – der Überblick
- Technische Architektur – wo fügt sich die API in die Plattform ein?
- Maschinenparkverwaltung – Steuerung der Flotte über die API