02 ENLYZE API abfragen

API-Abfragen für Produktionsdaten, OEE-Kennzahlen und Datenverknüpfungen in Grafana.

In diesem Tutorial lernst du, Produktionsdaten mit dynamischen Zeitbereichen abzufragen, OEE-Kennzahlen zu extrahieren und Daten aus mehreren Queries zu verknüpfen:

Was du lernst

  • Grafanas Zeitbereich in API-Abfragen verwenden

  • Aufträge mit OEE-Kennzahlen abfragen

  • Verschachtelte JSON-Werte mit JSONata extrahieren

  • Daten mehrerer Maschinen zusammenführen

  • Aufträge mit Produktdaten verknüpfen (Join)

Voraussetzungen


Dynamische Zeitbereiche

In der Einführung hast du feste Endpunkte abgefragt. Für Produktionsdaten brauchst du einen dynamischen Zeitbereich, der sich mit Grafanas Zeitauswahl aktualisiert.

Variable
Beschreibung

${__from:date:iso}

Startzeit im ISO-Format

${__to:date:iso}

Endzeit im ISO-Format

Diese Variablen werden automatisch durch den aktuellen Zeitbereich des Dashboards ersetzt.


Aufträge abfragen

Der production-runs-Endpunkt liefert Produktionsaufträge inklusive OEE-Kennzahlen.

Query konfigurieren

  1. Erstelle ein neues Panel mit der Visualisierung Table

  2. Wähle die Data Source ENLYZE API

  3. Konfiguriere die Query:

Einstellung
Wert

Type

JSON

Parser

Backend

Source

URL

Format

Table

Method

GET

URL

production-runs

  1. Klappe Headers, Request params auf und füge unter URL Query Params hinzu:

Key
Value

machine

141e0927-62b3-4e76-8398-ad82d20f397f

start

${__from:date:iso}

end

${__to:date:iso}

  1. Setze den Root selector auf $.data

circle-info

Konfiguriere Query-Parameter immer über die Grafana-Oberfläche unter Headers, Request params statt sie direkt in die URL zu schreiben. Das ist übersichtlicher und vermeidet Encoding-Probleme.

Die Tabelle zeigt die rohe API-Antwort. OEE-Kennzahlen wie productivity, availability und performance sind verschachtelte Objekte. Im nächsten Schritt extrahierst du diese Werte.


Verschachtelte Werte mit JSONata extrahieren

JSONata erlaubt es, verschachtelte Werte direkt im Root Selector zu extrahieren und umzustrukturieren. Ersetze $.data durch:

Jede Zeile enthält jetzt die extrahierten OEE-Scores und die produzierte Menge (Yield).

JSONata-Grundlagen

Ausdruck
Beschreibung

$.data

Zugriff auf das data-Array

field.subfield

Verschachtelte Eigenschaft

{ "name": value }

Neues Objekt erstellen


Spalten konfigurieren (Columns)

Statt JSONata kannst du auch die Columns-Funktion der Infinity-Query verwenden. Klappe Parsing options & Result fields auf und füge unter Columns hinzu:

Selector
Title
Type

production_order

Order

String

start

Start

Timestamp

end

End

Timestamp

productivity.score

OEE

Number

availability.score

Availability

Number

performance.score

Performance

Number

quality.score

Quality

Number

quantity_yield.value

Yield

Number

OEE-Werte farblich hervorheben

Für die OEE-Spalten bieten sich farbige Zellen an. Füge einen Field override für Felder mit Regex /OEE|Availability|Performance|Quality/ hinzu:

  • Unit: Percent (0.0-1.0)

  • Min: 0, Max: 1

  • Cell type: Color background

  • Value mappings: Farbabstufungen von Rot (< 60 %) über Orange und Gelb bis Grün (> 95 %) sowie null → "NO DATA" in Grau

circle-info

Bei Maschinen ohne Qualitätsdaten zeigt die Quality-Spalte "NO DATA" an. Der OEE (Productivity) wird in diesem Fall aus Availability und Performance berechnet. Mehr dazu in der OEE-Dokumentation.


OEE als Stat-Panel

Den OEE des letzten Auftrags kannst du auch als Stat-Panel darstellen:

  1. Erstelle ein neues Panel mit Stat-Visualisierung

  2. Konfiguriere die gleiche production-runs-Query mit den Query Params wie oben

  3. Setze den Root Selector auf $.data[0].productivity.score

  4. Unit auf Percent (0.0-1.0), Color mode auf Background

  5. Thresholds: Rot (Basis), Gelb (0.6), Grün (0.8)

Erstelle nach dem gleichen Muster weitere Panels für Availability ($.data[0].availability.score), Performance ($.data[0].performance.score) und Quality ($.data[0].quality.score). Für Quality konfiguriere ein Value Mapping für null → "NO DATA", da nicht alle Maschinen Qualitätsdaten liefern.


Aufträge mehrerer Maschinen zusammenführen

Um Aufträge mehrerer Maschinen in einer Tabelle anzuzeigen, konfiguriere zwei Queries mit jeweils einer eigenen Computed Column für den Maschinennamen.

Query A (Kiefel):

Einstellung
Wert

URL

production-runs

Query Params

machine = 141e0927-..., start = ${__from:date:iso}, end = ${__to:date:iso}

Unter Computed columns: Selector "Kiefel", Title Machine

Query B (Macchi):

Einstellung
Wert

URL

production-runs

Query Params

machine = cc0d2dcb-..., start = ${__from:date:iso}, end = ${__to:date:iso}

Unter Computed columns: Selector "Macchi", Title Machine

Füge eine Merge-Transformation hinzu, um beide Queries in einer Tabelle zu vereinen.


Mit Produktdaten verknüpfen

Aufträge enthalten nur eine Produkt-UUID. Um den Produktnamen anzuzeigen, verknüpfe die Daten mit dem products-Endpunkt.

Zwei Queries erstellen

Query A (Aufträge):

Einstellung
Wert

URL

production-runs

Query Params

machine = 141e0927-..., start = ${__from:date:iso}, end = ${__to:date:iso}

Columns: production_order → Order, product → product_uuid, start → Start, productivity.score → OEE

Query B (Produkte):

Einstellung
Wert

URL

products

Root selector

$.data

Columns: uuid → product_uuid, external_id → Product ID, name → Product Name

Wichtig: Das Join-Feld muss in beiden Queries denselben Spaltennamen haben (product_uuid).

Join-Transformation

  1. Wechsle zum Tab Transform

  2. Füge Join by field hinzu: Mode INNER, Field product_uuid

  3. Optional: Organize fields hinzufügen, um product_uuid auszublenden


Stillstände

Maschinenstillstände lassen sich über den downtimes-Endpunkt abfragen:

Einstellung
Wert

URL

downtimes

Query Params

machine = {uuid}, start = ${__from:date:iso}, end = ${__to:date:iso}

Root selector

$.data

Die API liefert neben Start- und Endzeitpunkt auch den Stillstandsgrund und dessen Kategorie. Nutze Columns, um die relevanten Felder zu extrahieren:

Selector
Title
Type

uuid

Downtime ID

String

start

Start

Timestamp

end

End

Timestamp

reason.name

Reason

String

reason.category

Category

String


Tipps

  • Immer mit Table testen: Rohdaten sind in Tabellen leichter zu lesen. Erst nach funktionierender Query zu anderen Visualisierungen wechseln.

  • Query Params nutzen: Konfiguriere Parameter über die Grafana-Oberfläche statt sie direkt in die URL zu schreiben.

  • Root Selector schrittweise aufbauen: Mit $.data beginnen, Datenstruktur überprüfen, dann JSONata ergänzen.

  • Leere Daten: Zeitbereich erweitern oder prüfen, ob die Maschine im gewählten Zeitraum lief.


Nächste Schritte

Zuletzt aktualisiert