Zum Hauptinhalt springen

17. Vollständige Liste der Endpunkte

Dies ist die Zuordnung der REST-Endpunkte der PlantPulse API zu den Client-Methoden. Der Basispfad ist /api/v5.

Authentifizierung: Da bei einem Aufruf von APIClient_V5.connect() automatisch ein api_key ausgestellt und verwaltet wird, gibt es keinen Authentifizierungs-Endpunkt, den der Benutzer direkt aufrufen muss.

17.1 System​

HTTPEndpunktMethode
GET/api/v5/pingclient.system().ping()

17.2 ID-Ausstellung​

MethodePfadBeschreibung
POST/api/v5/domain-idsErhalt der Domain-ID im Voraus (keine Client-Methode) — ID-Regeln

17.3 Site (6 Stück)​

HTTPEndpunktMethode
POST/api/v5/siteclient.site().create(req)
PUT/api/v5/site/{id}client.site().update(id, req)
DELETE/api/v5/site/{id}client.site().delete(id)
GET/api/v5/site/{id}client.site().get(id)
GET/api/v5/siteclient.site().list()
GET/api/v5/site/{id}/existsclient.site().exists(id)

17.4 OPC (10 Stück)​

HTTPEndpunktMethode
POST/api/v5/opcclient.opc().create(req)
PUT/api/v5/opc/{id}client.opc().update(id, req)
DELETE/api/v5/opc/{id}client.opc().delete(id)
GET/api/v5/opc/{id}client.opc().get(id)
GET/api/v5/opcclient.opc().list()
GET/api/v5/opc?site_id={id}client.opc().listBySite(siteId)
GET/api/v5/opc?opc_source_type={type}client.opc().listByType(sourceType)
GET/api/v5/opc/{id}/existsclient.opc().exists(id)
GET/api/v5/opc/countclient.opc().count()
GET/api/v5/opc/count?site_id={id}client.opc().countBySite(siteId)

17.5 Asset (6 Stück)​

HTTPEndpunktMethode
POST/api/v5/assetclient.asset().create(req)
PUT/api/v5/asset/{id}client.asset().update(id, req)
DELETE/api/v5/asset/{id}client.asset().delete(id)
GET/api/v5/asset/{id}client.asset().get(id)
GET/api/v5/assetclient.asset().list()
GET/api/v5/asset/{id}/existsclient.asset().exists(id)

Beziehungsontologie (4 Stück)​

Dies sind richtungsgebundene Beziehungen, die getrennt von der Hierarchie (Eltern-Kind) existieren. Sie werden verwendet, um Fragen wie „Welche Bereiche sind betroffen, wenn diese Anlage stillsteht?“ zu beantworten.

HTTPEndpunktFunktion
POST/api/v5/assets/{asset_id}/relationsRegistrierung der Beziehung — Body {site_id, to_entity_type, to_entity_id, relation_type, description?} → 201
GET/api/v5/assets/{asset_id}/relations?type=Liste der direkten Beziehungen (eingehend · ausgehend)
DELETE/api/v5/relations/{relation_id}Löschen der Beziehung → 204
GET/api/v5/ontology/graph/{entity_id}?relation=&direction=DOWN&depth=2Graphensuche (BFS)
BeziehungBedeutungRichtung
FEEDSProzessflussAsset → Asset
DEPENDS_ONVersorgungsabhängigkeit (Strom · Luft · Kühlung)Asset → Asset
PRODUCESProduktionsausstoßAsset → Produkt
  • direction beträgt UP · DOWN · BOTH (Standard DOWN), depth liegt zwischen 1~5 (Standard 2).
  • Beziehungen auf sich selbst werden nicht gespeichert; Beziehungen mit der gleichen Kombination werden nur einmal registriert.
  • Registrierung und Löschung gelten als Änderungen, daher werden die ADMIN/API-Rollen und Audit-Logs angewendet.
  • Wenn ein KI-Assistent dieselbe Suche aufruft, entspricht dies trace_asset_relations von MCP.

QR-Label​

HTTPEndpunktFunktion
GET/api/v5/asset/qr/{token}Anlage des Label-Tokens. 404, wenn es kein Token ist oder ein bereits neu ausgestelltes altes Token vorliegt.

Die im Label enthaltene Adresse entspricht qr_payload der Antwort von GET /api/v5/asset/{id}. Da dieser Aufruf kein Token erstellt, erfolgt eine Antwort mit "", wenn noch kein Token oder kein PP_UI_CONSOLE_URL vorhanden ist. Die öffentliche Seite ohne Login ist nicht V5, sondern /qr/{token} — QR-Label und öffentliche Seiten.

17.6 Tag (23 Stück)​

CRUD + Liste​

HTTPEndpunktMethode
POST/api/v5/tagclient.tag().create(req)
PUT/api/v5/tag/{id}client.tag().update(id, req)
DELETE/api/v5/tag/{id}client.tag().delete(id)
GET/api/v5/tag/{id}client.tag().get(id)
GET/api/v5/tag/{id}/existsclient.tag().exists(id)
GET/api/v5/tagclient.tag().list()
GET/api/v5/tag?site_id={id}client.tag().listBySite(siteId)
GET/api/v5/tag?opc_id={id}client.tag().listByOpc(opcId)
GET/api/v5/tag?asset_id={id}client.tag().listByAsset(assetId)
GET/api/v5/tag/countclient.tag().count()
GET/api/v5/tag/count?site_id={id}client.tag().countBySite(siteId)
GET/api/v5/tag/count?opc_id={id}client.tag().countByOpc(opcId)
GET/api/v5/tag/count?asset_id={id}client.tag().countByAsset(assetId)

PATCH (10 Stück — Teilweise Änderung pro Tab)​

HTTPEndpunktMethode
PATCH/api/v5/tag/{id}/basicpatchBasic(id, req)
PATCH/api/v5/tag/{id}/alarmpatchAlarm(id, req)
PATCH/api/v5/tag/{id}/metadatapatchMetadata(id, req)
PATCH/api/v5/tag/{id}/calculationpatchCalculation(id, req)
PATCH/api/v5/tag/{id}/samplingpatchSampling(id, req)
PATCH/api/v5/tag/{id}/aggregationpatchAggregation(id, req)
PATCH/api/v5/tag/{id}/aipatchAi(id, req)
PATCH/api/v5/tag/{id}/publishpatchPublish(id, req)
PATCH/api/v5/tag/{id}/attributepatchAttribute(id, req)
PATCH/api/v5/tag/{id}/linkpatchLink(id, req)

17.7 Alarm (3 Stück)​

HTTPEndpunktMethode
GET/api/v5/alarm/{seq}client.alarm().get(seq)
GET/api/v5/alarm?limit={n}client.alarm().list(limit)
GET/api/v5/alarm/performance?scope_type=&scope_id=Alarm-Systemleistung (keine Client-Methode)

/alarm/performance — scope_type sind SITE · AREA · LINE, scope_id ist die Site-ID oder Asset-ID, beides ist erforderlich. Der Zeitraum ist days (1~31, Standard 7) oder from + to (zusammen, bis zu 31 Tage), wobei from/to gegenüber days Vorrang haben. Nur das Auftreten von Alarmen wird gezählt; Alarmierungen, die während einer Ausblendung oder Unterdrückung geöffnet wurden, erscheinen separat unter suppression. Bei falschem Bereich oder Zeitraum erfolgt ein 400. Dieselben Werte liefert MCP get_alarm_performance zurück.

17.8 Order (11 Stück)​

HTTPEndpunktMethode
POST/api/v5/orderclient.order().create(req)
PUT/api/v5/order/{id}client.order().update(id, req)
DELETE/api/v5/order/{id}client.order().delete(id)
GET/api/v5/order/{id}client.order().get(id)
GET/api/v5/orderclient.order().list()
GET/api/v5/order/{id}/existsclient.order().exists(id)
POST/api/v5/order/{id}/startclient.order().start(id)
POST/api/v5/order/{id}/endclient.order().end(id)
POST/api/v5/order/{id}/pauseclient.order().pause(id)
POST/api/v5/order/{id}/resumeclient.order().resume(id)
POST/api/v5/order/{id}/abortclient.order().abort(id)

17.8.1 Instandhaltungsauftrag​

Dies sind Aufrufe, Reparaturen und präventive Instandhaltungsarbeiten für Anlagen (ISA-95 maintenance work order). Dies ist ein anderes Objekt als Produktionsarbeitsaufträge (/order) und wird per REST ohne Client-Methode aufgerufen.

HTTPEndpunktFunktion
GET/api/v5/maintenance-ordersListe. Filter scope+scope_id(asset · line · area · site) · status_code · open · maintenance_kind_code · assignee_employee_id · failure_mode_code · maintainable_item_code · from/to · period_of · overdue · external_system · external_id. Seite page · limit(Standard 50, Max 500) · sort · order
GET/api/v5/asset/{asset_id}/maintenance-ordersListe für eine einzelne Anlage
POST/api/v5/asset/{asset_id}/maintenance-ordersInstandhaltungsaufruf hinzufügen
GET/api/v5/maintenance-orders/{maintenance_order_id}Einzeldatensatz
PATCH/api/v5/maintenance-orders/{maintenance_order_id}Inhalte ändern
POST/api/v5/maintenance-orders/{maintenance_order_id}/transitionStatus ändern (Erhalten · Start · Abgeschlossen · Storniert). Body status_code · version, Stornierung cancel_reason_code
GET/api/v5/maintenance-orders/{maintenance_order_id}/revisionsBeurteilungshistorie
GET/api/v5/maintenance-orders/summaryInstandhaltungszusammenfassung für Bereich · Zeitraum
GET/api/v5/maintenance-orders/optionsZulässige Typen · Status · Codes
GET/api/v5/maintenance-orders/boardInstandhaltungsdashboard für Bereich
GET/api/v5/maintenance-orders/changesÄnderungsfeed (Cursor) zur CMMS-Synchronisation
GET · PUT/api/v5/maintenance-orders/by-external/{system}/{external_id}Suche per externer (CMMS) Nummer · idempotentes Schreiben
GET · PUT/api/v5/maintenance-orders/by-external?system=&external_id=Gleiche Funktion, wenn die Nummer / enthält
POST · GET/api/v5/maintenance-orders/{maintenance_order_id}/attachmentsFotos hochladen · Liste
GET/api/v5/maintenance-orders/{maintenance_order_id}/attachments/{maintenance_attachment_seq}/contentFotoinhalt

Felder des Instandhaltungsauftrags​

Die Feldnamen sind in Antwort- und Anforderungsbodys sowie in Listenabfragen identisch.

FeldTypBedeutung
maintenance_order_idZeichenfolgeMAINTENANCE_ORDER_000001. Alte Zeilen sind numerische Zeichenfolgen("12")
maintenance_kind_codeZeichenfolgeInstandhaltungsart(CORRECTIVE …)
status_codeZeichenfolgeStatus(REQUESTED · ACCEPTED · IN_PROGRESS · COMPLETED · CANCELLED)
cancel_reason_codeZeichenfolgeStornierungsgrund
failure_record_seqZahlVerknüpfte Ausfallhistorie
maintenance_plan_id · maintenance_plan_nameZeichenfolgePräventiver Instandhaltungsplan. MAINTENANCE_PLAN_000001 oder alte numerische Zeichenfolge
failure_mode_code · failure_mechanism_code · failure_cause_code · maintainable_item_codeZeichenfolgeISO 14224 Code. Anzeigename ist _name statt _code
cause_codeZeichenfolgeUrsachenlexikon-Code (gleiches Lexikon wie bei Alarmen)
checklist_results[].maintenance_attachment_seqZahlFoto des Inspektionspunktes

CMMS-Webhook​

Wenn eine Adresse im Konfigurationsschlüssel PP_MAINTENANCE_WEBHOOK_URL hinterlegt ist, wird bei jeder Änderung des Status eines Instandhaltungsauftrags einmalig ein JSON per POST gesendet (Aufruf · Erhalten · Start · Abgeschlossen · Storniert). Bei reinen Inhaltsänderungen erfolgt kein Versand; ist das Feld leer, ist der Webhook deaktiviert. Bei Fehlern wird die Diagnose diagnostic.maintenance.webhook_failed aktiviert und beim nächsten Erfolg wieder deaktiviert; es erfolgt kein erneuter Versand.

SchlüsselWert
textEinzeiliger Satz in der Installationssprache
eventmaintenance.requested · maintenance.accepted · maintenance.in_progress · maintenance.completed · maintenance.cancelled
maintenance_order_idInstandhaltungsauftrags-ID (Zeichenfolge)
asset_id · asset_nameAnlage
maintenance_kind_code · status_codeArt · Status
description · failure_mode_codeBeschreibung · Ausfallmode
requested_by · accepted_by · assignee_employee_idPerson
cancel_reason_codeStornierungsgrund
external_system · external_id · ownerExterne Nummer und Besitzer
anomaly_found · checklist_resultsVorhandensein einer Inspektionsanomalie und Antwort(item_id · checked · value · maintenance_attachment_seq · out_of_range)
maintenance_plan_id · plan_due_atPräventiver Instandhaltungsplan
at · versionZeitpunkt des Statuswechsels (epoch ms) · Beurteilung

Schlüssel mit unbekannten Werten werden nicht ausgelassen, sondern als null übertragen.

17.9 Calendar (6 Stück)​

HTTPEndpunktMethode
POST/api/v5/calendarclient.calendar().create(req)
PUT/api/v5/calendar/{id}client.calendar().update(id, req)
DELETE/api/v5/calendar/{id}client.calendar().delete(id)
GET/api/v5/calendar/{id}client.calendar().get(id)
GET/api/v5/calendarclient.calendar().list()
GET/api/v5/calendar/search?from={iso}&to={iso}client.calendar().search(from, to)

17.10 Customer (8 Stück)​

HTTPEndpunktMethode
POST/api/v5/customerclient.customer().create(req)
PUT/api/v5/customer/{id}client.customer().update(id, req)
DELETE/api/v5/customer/{id}client.customer().delete(id)
GET/api/v5/customer/{id}client.customer().get(id)
GET/api/v5/customerclient.customer().list()
GET/api/v5/customer?site_id={id}client.customer().listBySite(siteId)
GET/api/v5/customer/{id}/existsclient.customer().exists(id)
GET/api/v5/customer/countclient.customer().count()

17.11 Employee (7 Stück)​

HTTPEndpunktMethode
POST/api/v5/employeeclient.employee().create(req)
PUT/api/v5/employee/{id}client.employee().update(id, req)
DELETE/api/v5/employee/{id}client.employee().delete(id)
GET/api/v5/employee/{id}client.employee().get(id)
GET/api/v5/employeeclient.employee().list()
GET/api/v5/employee/{id}/existsclient.employee().exists(id)
GET/api/v5/employee/countclient.employee().count()

17.12 Product (7 Stück)​

HTTPEndpunktMethode
POST/api/v5/productclient.product().create(req)
PUT/api/v5/product/{id}client.product().update(id, req)
DELETE/api/v5/product/{id}client.product().delete(id)
GET/api/v5/product/{id}client.product().get(id)
GET/api/v5/productclient.product().list()
GET/api/v5/product/{id}/existsclient.product().exists(id)
GET/api/v5/product/countclient.product().count()

17.13 Path (2 Stück)​

HTTPEndpunktMethode
GET/api/v5/path/asset/{id}client.path().getByAsset(assetId)
GET/api/v5/path/tag/{id}client.path().getByTag(tagId)

17.14 Flow (3 Stück)​

HTTPEndpunktMethode
GET/api/v5/flow/{id}client.flow().get(flowId)
GET/api/v5/flowclient.flow().list()
GET/api/v5/flow/{id}/nodeclient.flow().listNodes(flowId)

17.15 Statistik​

Die folgenden Zahlen zählen nur Pfade, die über plantpulse-api Client-Methoden verfügen.

DomainAnzahl Endpunkte
System1
Site6
OPC10
Asset6
Tag23 (CRUD 5 + Liste 7 + Count 4 + PATCH 10)
Alarm2
Order11 (CRUD 6 + Lebenszyklus 5)
Calendar6
Customer8
Employee7
Product7
Path2
Flow3
Gesamt92 (+ Authentifizierung 1)

17.16 HTTP-Methodenverteilung​

HTTPAnzahlVerwendung
GET56Abfrage (Einzeldatensatz/Liste/Existenzprüfung/Count)
POST16Registrierung + Order-Lebenszyklus
PUT10Vollständige Änderung
PATCH10Teilweise Änderung pro Tag-Tab
DELETE10Löschen

17.17 Listen vollständig lesen — Cursor​

GET /api/v5/site · /product · /customer · /employee verwenden einen Cursor zum sequentiellen Lesen. Die Seitengröße limit beträgt standardmäßig 100, maximal 1000 (bei größeren Werten wird auf 1000 reduziert); beim ersten Aufruf wird cursor nicht mitgesendet.

curl -H "X-API-Key: $TOKEN" "$BASE/api/v5/site?limit=500"
curl -H "X-API-Key: $TOKEN" "$BASE/api/v5/site?limit=500&cursor=<next_cursor>"
{
"data": [ ],
"meta": {
"status": "OK",
"pagination": { "limit": 500, "total": 1234 },
"cursor": { "next_cursor": "…", "has_more": true, "limit": 500 }
},
"errors": null
}
  • data ist das Zeilenarray dieser Seite.
  • meta.pagination.total ist die Gesamtzahl der Datensätze für denselben Filter.
  • next_cursor wird unverändert als cursor an den nächsten Aufruf übergeben, bis meta.cursor.has_more zu false wird.
  • Der Cursor ist an die jeweilige Liste und den Filter gebunden. Die Verwendung eines Cursors einer anderen Liste oder eines Aufrufs mit geänderten site_id führt zu einem 422 E1002.
  • Kunden, Produkte und Mitarbeiter sind nach ID sortiert, Sites nach Name · ID. Zeilen, die während des Lesens geändert werden, gehen nicht verloren.

Die Methode list() des Java-Clients gibt nur die erste Seite zurück, da sie cursor nicht übermittelt. Verwenden Sie REST, um die gesamte Liste zu lesen.

17.18 Empfang nur bei Änderungen — ETag von /tag/export​

GET /api/v5/tag/export liefert Tags für Site, Verbindung oder die gesamte Anlage in einem Aufruf. Die Filterung erfolgt über site_id · opc_id; bei include=config wird die Konfiguration pro Zeile mitgeliefert (einzelne Aufrufe der Konfiguration pro Tag sind somit nicht erforderlich). Die Antwort erfolgt als data = {tags: [...], count: N}.

Speichern Sie den Wert von ETag der Antwort und geben Sie ihn beim nächsten Lesen als If-None-Match zurück.

curl -i -H "X-API-Key: $TOKEN" "$BASE/api/v5/tag/export?site_id=SITE_000001&include=config"
# ETag: "<SHA-256>"

curl -i -H "X-API-Key: $TOKEN" -H 'If-None-Match: "<SHA-256>"' \
"$BASE/api/v5/tag/export?site_id=SITE_000001&include=config"
# 304 Not Modified — 본문 없음
  • ETag ist der SHA-256-Hash des exportierten data. Wenn sich die sichtbaren Daten ändern — Änderungen an Tags oder Konfigurationen, Hinzufügen · Löschen von Tags, Verschiebung einer Verbindung zu einer anderen Site — ändert sich der Wert unabhängig vom Auslöser. Wenn keine Änderung vorliegt, bleibt der Wert gleich, selbst nach einem Neustart oder bei Abfrage von einem anderen Knoten.
  • Es werden auch schwache Formate W/"…" und * akzeptiert, die von Proxys angehängt wurden.
  • 304 spart lediglich die Übertragung und das Parsing, nicht den Lesevorgang. Der Server liest alle Zeilen, um den Wert zu berechnen. Rufen Sie die Daten nicht häufiger ab, als das Update-Intervall der Daten erfordert.

KOPENS All rights reserved.