Last Event Cache in der Watson IoT Platform

Bildquelle: Mike Nottebrock / pixelio.de

Manchmal ist ein Client offline und soll trotzdem wenn er wieder online geht auf dem letzten Stand sein. Dann stellt sich die Frage „was war der letzte Wert von…?“ Dafür gibt es in der Watson IoT Platform den Last Event Cache. Der macht genau was der Name sagt: er liefert das letzte Event eines Geräts, unabhängig davon, ob das Gerät gerade online oder offline ist. Das Event darf nur nicht älter als 365 Tage sein. Dass der Last Event Cache echt einfach zu benutzen ist, zeige ich Dir in diesem Artikel.

Die Theorie…

Der Last Event Cache wird per REST API nach folgendem Muster aufgerufen:

GET https://<org-id>.internetofthings.ibmcloud.com/api/v0002/device/types/<device-type>/devices/<device-id>/events/<event-id>

Willst Du alle letzten Events unabhängig von der Event-ID bekommen, die das Device geschickt hat, dann verwendest Du

GET https://<org-id>.internetofthings.ibmcloud.com/api/v0002/device/types/<device-type>/devices/<device-id>/events

Damit die Daten auch nur in autorisierte Hänge gelangen, muss man sich per Basic Auth authentifizieren. Dazu erstellst Du in der Watson IoT Platform einen API Key. Den Key nimmst Du als Benutzernamen, als Passwort verwendest Du das Athentication Token.

…und Praxis

Beispiel gefällig? Ich möchte für mein Thermostat die letzten Werte abrufen, dafür sieht der Aufruf wie folgt aus:

GET https://<meine-org>.internetofthings.ibmcloud.com/api/v0002/device/types/Thermostat/devices/ThermostatDGKinderzimmer/events

Als Ergebnis bekomme ich folgende JSON-Struktur:

[
{
"typeId": "Thermostat",
"deviceId": "ThermostatDGKinderzimmer",
"eventId": "event",
"format": "json",
"timestamp": "2017-04-03T21:39:12.673+0000",
"payload": "eyJkIjp7Imh1bWlkaXR5Ijo0MiwidGVtcGVyYXR1cmUiOjIyLjl9fQ=="
}
]

Bitte beachten: das ganze ist ein Array, das ein Objekt enthält. Würde das Device verschiedene Events mit unterschiedlicher Event-ID schicken, wäre zu jeder Event-ID das letzte Event im Array. Interessant sind meist die letzten beiden Felder im Objekt: timestamp zeigt an, wann die Watson IoT Platform die Nachricht vom Gerät empfangen hat, payload enthält die eigentlichen Devicedaten als Base64 kodierten String. Die Payload lässt sich z.B. mit Node-RED sehr einfach in die ursprünglichen Devicedaten zurückwandeln:

Node-RED Flow um Last Event Cache zu lesen

Wir starten mit dem HTTP Request wie oben dargestellt (z.B. getriggert durch einen Inject-Knoten zum Testen). Im nächsten Knoten holen wir einfach das erste Objekt aus dem Array:

msg.payload = msg.payload[0].payload;
return msg;

Dann lassen wir mit dem Base64-Knoten den String zurück kodieren und machen im nächsten Funktion-Knoten einen UTF8 String daraus:

msg.payload = msg.payload.toString('utf8');
return msg;

Mit dem JSON-Knoten machen wir aus dem String ein JSON-Objekt, mit dem wir im weiteren Verlauf des Flows einfacher arbeiten können. Aus obigem Beispiel erhalte ich folgende msg.payload:

{
d: {

(Visited 46 times, 1 visits today)

Nichts mehr verpassen?

Abonniere unseren Newsletter und Du verpasst keinen Artikel mehr. Versprochen!

*Pflichtfeld

Über René Auberger 12 Artikel

René ist IT Architekt für Internet of Things, Industrie 4.0, Analytics und Cognitive Computing. In seiner Freizeit macht er Schritt für Schritt sein Haus smarter. 2017 hat René das Internet-of-Things.blog gegründet. Er schreibt auch regelmäßig auf Twitter.

Zu Renés kompletten Profil…

Ersten Kommentar schreiben

Antworten

Deine E-Mail-Adresse wird nicht veröffentlicht.


*