NAV
shell

LineMetrics API (v1)

Willkommen bei der LineMetrics REST API Dokumentation. Die LineMetrics API soll es Ihnen ermöglichen, auf die Basisfunktionalität der LineMetrics Cloud zuzugreifen. Dazu gehört unter anderem das Abfragen von bestehenden Streams und das Speichern von Daten in einem der API zugewiesenen Eingang.

Beispielcode stellen wir aktuell zum Testen nur für Unix-Kommandozeile (Shell) zur Verfügung. Es ist geplant, den Beispielcode für andere Programmiersprachen sukzessive auszubauen. Wir freuen uns hier gerne über Ihre Mithilfe.

Die API befindet sich aktuell in der Version 1, wobei sich diese Version gerade im Aufbau befindet. Bestehende Endpunkten “sollten” sich nicht mehr verändern, es werden aber laufend neue Endpunkte hinzukommen. Die Versionierung soll eine nahtlose Adaptierung von bestehenden Endpunkten ermöglichen, ohne die Abwärtskompatibilität zu beeinflussen.

Authentifizierung

OAuth2

Authentifizieren mittels OAuth & Client-Credentials

curl "https://lm3api.linemetrics.com/oauth/access_token"
  -d 'client_id={{CLIENT_ID}}&grant_type=client_credentials&client_secret={{CLIENT_SECRET}}'
  -X POST

Antwort vom Server

{
    "access_token": "{{key}}",
    "token_type": "Bearer",
    "expires_in": 3600
}

Die aktuelle Version der REST API Dokumentation unterstützt ausschließlich eine Authentifizierung mittels Client-Credentials über das OAuth2 Protokoll. Dabei muss über einen REST Aufruf und der Parameter Client ID und Client Secret ein Session Token erzeugt werden. Mit diesem Session Token können dann Abfragen auf die anderen Ressourcen (Daten/Objekt Ressourcen) durchgeführt werden.

Parameter

Parameter Beschreibung
client_id ID die den Zugang eindeutig identifiziert
client_secret Client Secret, welche den Zugriff mittels Client ID authorisiert und es erlaubt einen neuen Session Token zu erzeugen
grant_type Art der OAuth-Authentifizierung. Aktuell wird nur die client_credentials Authentifizierung unterstützt. Dh ein Zugriff über Session Token, welcher mittels client_id und client_secret erzeugt wird.

Antwort

Parameter Beschreibung
access_token Session Token der für alle weiteren Abfragen auf API Ressourcen verwendet und per Header übergeben wird.
token_type Definiert die Art des Session Tokens und wird beim Authentifizieren als Prefix im Header mitangegeben.
expires_in Gültigkeitsdauer des Tokens in Sekunden

Daten Typen

Daten Typen sind ein essenzieller Bestandteil im Umgang mit Daten in der LineMetrics Cloud bzw. im Umgang mit der Rest API, weil durch Daten Typen festgelegt werden kann, wie die eigentlichen Daten aussehen bzw. welche Ausprägungen ein einzelner Datenpunkt besitzt.

Daten Typen erhält man einerseits bei der Abfrage der für den API Endpunkt verfügbaren Eingänge (Inputs) bzw. auch wenn konkrete Messpunkte eines Objekts abgefragt werden.

Double

{
  "val" : 123.0
}

Einfacher Datentyp der nur einen primitiven double Datentyp kapselt.

Parameter Prim. Datentyp Beschreibung
val Double Wert

DoubleAverage

{
  "val" : 123.3,
  "min" : 10.0,
  "max" : 456.12
}

Ein Datentyp der neben dem Durchschnittswert auch die Grenzwerte (Min/Max) eines Datenpunkts liefert.

Parameter Prim. Datentyp Beschreibung
val Double Durchschnittswert
min Double Minimum Wert
max Double Maximum Wert

Bool

{
  "val" : 0
}

Einfacher Datentyp der nur einen primitiven bool Datentyp kapselt.

Parameter Prim. Datentyp Beschreibung
val Boolean Booleanwert 0 oder 1

GeoCoord

{
  "lat" : 48.20863000,
  "long" : 16.39741000
}

Ein Datentyp der Geokoordinaten in Form eines Longitude und Latitude Wertes kapselt.

Parameter Prim. Datentyp Beschreibung
lat Double Latitude GPS Wert (Geographische Breite)
long Double Longitude GPS Wert (Längengrad)

String

{
  "val" : "Mein Text"
}

Einfacher Datentyp der nur einen primitiven String Datentyp kapselt.

Parameter Prim. Datentyp Beschreibung
val String Text

Daten Ressourcen

Liste mit API Eingängen

Abfragen der verfügbaren Eingänge des API Endpunkts

curl "https://lm3api.linemetrics.com/v1/data/inputs"
  -H "Authorization: Bearer {{key}}"

Antwort vom Server

[
  {
    "input_title": "Temperatur",
    "input_id": "...",
    "data_type": "DoubleAverage"
  },
  {
    "input_title": "Luftfeuchtigkeit",
    "input_id": "...",
    "data_type": "DoubleAverage"
  }
]

Für jeden API Zugang können auch API Eingänge konfiguriert werden. Diese Eingänge können verwendet werden um Daten an die LineMetrics Cloud zu schicken. Über die /v1/data/inputs Schnittstelle können alle verfügbaren API Eingänge abgerufen werden.

Antwort

Parameter Beschreibung
input_title Name des Eingangs
input_id Eindeutige Kennzeichnung des Eingangs
data_type Datentyp des Eingangs. Dieser definiert auch das Schema der Daten, welches beim Speichern berücksichtigt werden muss.

HTTP Status

Status Beschreibung
2*, 3* Aufruf erfolgreich
409 Es gibt keine Eingänge auf die geschrieben werden kann

Daten schreiben

Speichern von Werten

curl "https://lm3api.linemetrics.com/v1/data/write"
  -H "Authorization: Bearer {{key}}"
  -d "
  [
    {
      "input_id" : "...",
      "data_type" : "DoubleAverage",
      "data_payload" : {
        "min" : 0.234,
        "val" : 1.678, 
        "max" : 6.890
      }
    }
  ]
  "

Antwort vom Server

[
  {
    "input_id": "34f899b4aa60450b89661a07403bd3cf",
    "response": "Success"
  }
]

Zum Speichern von neuen Werten muss eine Liste von Elementen übergeben werden, die jeweils einen zu speichernden Messpunkt repräsentieren. Sollten Sie nur einen einzelnen Wert speichern wollen, übergeben Sie bitte eine Liste mit nur einem Element.

Sollte der Speichervorgang fehl schlagen, überprüfen Sie bitte den HTTP Status bzw. den Speicherstatus.

Parameter

Parameter Beschreibung
input_id ID die den Eingang auf den geschrieben wird, eindeutig identifiert. Die verfügbaren Inputs können mit der API Ressource Liste mit API Eingängen abgefragt werden.
data_type Definiert den Datentyp des Messpunkts der gespeichert werden soll. Dieser muss mit der Einstellung des Eingangs übereinstimmen.
data_payload Die eigentlichen Daten des Messpunkts. Richtet sich nach dem Datentyp (siehe Abschnitt “Daten Typen”)

Antwort

Parameter Beschreibung
input_id ID die den Eingang auf den geschrieben wurde, eindeutig identifiert.
response Status die definiert, ob ein Wert gespeichert wurde.

Speicherstatus

Status Beschreibung
success Speichervorgang erfolgreich
Unknown Datentyp entspricht nicht der Einstellung oder Input wurde nicht gefunden

HTTP Status

Status Beschreibung
2*, 3* Speichervorgang erfolgreich
400 Falsche JSON Struktur / Formatierung / Daten fehlen
409 Es gibt keine Eingänge auf die geschrieben werden kann

Daten lesen

Lesen von Werten

curl "https://lm3api.linemetrics.com/v1/data/read"
  -H "Authorization: Bearer {{key}}"
  -d "
    {
      "function" : "avg",
      "attributes" : {
        "object_id" : "{{OBJECT_ID}}",
        "time_from" : 1461327519000,
        "time_to" : 1461427519000,
        "time_zone" : "Europe/Vienna",
        "granularity" : "PT15M"
      }
    }
  "

Antwort vom Server

[
  {
    "average": 2.2991219917933146,
    "min": 1.6733490228652954,
    "max": 7.464624881744385,
    "count": 90,
    "sum": 206.92097926139832,
    "ts": 1461332700000
  },
  {
    "average": 0.6561659008264542,
    "min": 0.4281260073184967,
    "max": 4.751817226409912,
    "count": 90,
    "sum": 59.054931074380875,
    "ts": 1461339000000
  },
  {
    "average": 1.4405192838774787,
    "min": 1.1693300008773804,
    "max": 6.496118068695068,
    "count": 90,
    "sum": 129.64673554897308,
    "ts": 1461357900000
  },
  { "..." : "..." }
]

Für das Abfragen von Daten werden sogenannte Funktionen verwendet. Eine Funktion definiert hierbei, wie die Daten zurückgegeben werden sollen. Für die Abfrage werden verschiedenste Attribute benötigt (Zeitraum der Abfrage, Aggregation, …) die aber immer Funktionsspezifisch sind. Aus diesem Grund finden Sie im Unterabschnitt Abfragearten die unterschiedlichen Funktionen und die benötigten Attribute.

Parameter

Parameter Beschreibung
function Die Funktion die verwendet werden soll um Daten abzufragen
attributes Die Funktions spezifischen Attribute die für die Abfrage benötigt werden

Antwort

Als Antwort erhalten Sie immer eine JSON Liste mit Datenpunkten. Die Datenpunkte varieren hier nach dem Datentyp. Ein jedes Element beinhaltet aber immer einen Zeitstempel.

Abfragearten

Abfrage von Summen - Function = sum

Attribut Optional Beschreibung
time_from Nein Abfrage Startzeit als Unixzeitstempel in Millisekunden
time_to Nein Abfrage Endzeit als Unixzeitstempel in Millisekunden
object_id Nein Eindeutige Kennzeichnung des Streams, der abgefragt werden soll (z.B. input_id). Die verfügbaren Streams können über die Objekt Ressource abgefragt werden.
time_zone Ja Zeitzone die für die Aggregation verwendet werden soll
granularity Ja Definiert die Größe eines Batches bei der Aggregation. Angabe nach ISO8601

Abfrage von Min/Max/Avg - Function = avg

Attribut Optional Beschreibung
time_from Nein Abfrage Startzeit als Unixzeitstempel in Millisekunden
time_to Nein Abfrage Endzeit als Unixzeitstempel in Millisekunden
object_id Nein Eindeutige Kennzeichnung des Streams, der abgefragt werden soll (z.B. input_id). Die verfügbaren Streams können über die Objekt Ressource abgefragt werden.
time_zone Ja Zeitzone die für die Aggregation verwendet werden soll
granularity Ja Definiert die Größe eines Batches bei der Aggregation. Angabe nach ISO8601

Abfrage von Rohdaten - Function = raw

Attribut Optional Beschreibung
time_from Nein Abfrage Startzeit als Unixzeitstempel in Millisekunden
time_to Nein Abfrage Endzeit als Unixzeitstempel in Millisekunden
object_id Nein Eindeutige Kennzeichnung des Streams, der abgefragt werden soll (z.B. input_id). Die verfügbaren Streams können über die Objekt Ressource abgefragt werden.

Standardabfrage = default

Um nicht bei jeder Abfrage unterscheiden zu müssen, mit welcher Funktion abgefragt werden soll, gibt es die default Funktion. Für jeden Datentyp ist eine Standard Funktion hinterlegt, die in diesem Fall dann verwendet wird.

Attribut Optional Beschreibung
time_from Nein Abfrage Startzeit als Unixzeitstempel in Millisekunden
time_to Nein Abfrage Endzeit als Unixzeitstempel in Millisekunden
object_id Nein Eindeutige Kennzeichnung des Streams, der abgefragt werden soll (z.B. input_id). Die verfügbaren Streams können über die Objekt Ressource abgefragt werden.
time_zone Ja Zeitzone die für die Aggregation verwendet werden soll
granularity Ja Definiert die Größe eines Batches bei der Aggregation. Angabe nach ISO8601

HTTP Status

Status Beschreibung
2*, 3* Speichervorgang erfolgreich
403 Angegebene Funktion wird nicht unterstützt
404 Stream der abgefragt wird, existiert nicht
500 Fehler beim Abfragen der Stream Daten

Objekt Ressourcen

Mit dem LineMetrics Objekt Modell werden verschiedenste Daten in eine strukturierte Form gebracht, sodass aus Benutzersicht Zusammenhänge und Relationen zwischen diesen Daten besser hergestellt werden können.

So gibt es beispielweise ein spezielles Objekt Modell, welches nur die verfügbaren Datenquellen eines Accounts darstellt, oder ein Objekt Modell, welches Messpunkte (dh Daten die vom Kunden aufgezeichnet werden) so strukturiert, dass es einem Kunden möglich ist, alle Messpunkte einer geografischen Einheit (z.B. Filiale) zusammenzufassen.

In einem Objektmodell werden aber nicht nur Messpunkte oder Devices abgelegt. Es werden hier auch Eigenschaften von Objekten abgelegt (zB Mitarbeiteranzahl, Raumgröße, …), die es später ermöglichen, Objekt übergreifende Auswertungen und Datenbereinigung durchzuführen (Benchmarking des Energieverbrauchs pro Quadratmeter der einzelnen Filialen).

Einzelnes Objekt abfragen

Objekt abfragen

curl "https://lm3api.linemetrics.com/v1/object/read"
  -H "Authorization: Bearer {{key}}"
  -d "
  {
      "object_id" : "...",
  }
  "

Antwort vom Server

{
    "object_id": "...",
    "object_type": "object",
    "model_type": "object",
    "template_id": "...",
    "parent_id": "...",
    "payload": { "..." : "..." }    
}

Mit dieser Schnittstelle kann ein einzelnen Objekt anhand seiner eindeutigen ID abgefragt werden.

Parameter

Parameter Beschreibung
object_id Die eindeutige ID des Objekts

Antwort

Parameter Beschreibung
object_id Die eindeutige ID des Objekts
object_type Typ des Objekts
model_type Model Typ (siehe Einleitungstext Objekt Ressourcen)
template_id Referenz auf ein Template Objekt (Objekt wurde als Instanz eines Templates angelegt)
parent_id Referenz auf das Mutterelement
payload Objekt Typ spezifische Daten
data Wert der Eigenschaft (sofern das Objekt vom Typ “property” ist
input Referenz auf Datenquelle (sofern eine Verknüpfung existiert)
children_info Key/Value Liste mit Objekt Typ als Schlüssel und Anzahl der Unterobjekte als Wert

HTTP Status

Status Beschreibung
2*, 3* Abfrage erfolgreich
400 Parameter erforderlich
500 Fehler beim Verarbeiten der Abfrage

Liste von Kinder Objekte abfragen

Kinder Objekte abfragen

curl "https://lm3api.linemetrics.com/v1/object/children"
  -H "Authorization: Bearer {{key}}"
  -d "
  {
      "object_id" : "...",
      "limit" : 100,
      "offset" : 0
  }
  "

Antwort vom Server

[
    {
        "object_id": "...",
        "object_type": "object",
        "model_type": "object",
        "template_id": "...",
        "parent_id": "...",
        "payload": { "..." : "..." }
    },
    { "..." : "..." }
]

Mit dieser Schnittstelle ist es möglich, alle Kinder Objekte eines Objekts abzufragen.

Parameter

Parameter Optional Beschreibung
object_id Ja Die eindeutige ID des Mutter Objekts
model_type Ja Objekt Modell das abgefragt werden soll
limit Ja Anzahl der Objekte die geladen werden sollen
offset Ja Anzahl der Objekte die übersprungen werden sollen
object_type Ja Objekt Typen die geladen werden sollen (String und Liste von Typen möglich)

Antwort

Liste von Objekten

Parameter Beschreibung
object_id Die eindeutige ID des Objekts
object_type Typ des Objekts
model_type Model Typ (siehe Einleitungstext Objekt Ressourcen)
template_id Referenz auf ein Template Objekt (Objekt wurde als Instanz eines Templates angelegt)
parent_id Referenz auf das Mutterelement
payload Objekt Typ spezifische Daten

HTTP Status

Status Beschreibung
2*, 3* Abfrage erfolgreich
400 Parameter erforderlich