Im Jahr 2015 ist mit dem Begriff IoT ein neuer IT Trend vermehrt aufgetaucht. Gartner zählt IoT als einen der 10 wichtigsten IT Trends des Jahres 2016:
http://www.gartner.com/newsroom/id/3143521
Ich habe dies zum Anlass genommen und wollte die in der HCP zur Verfügung gestellten Services im IoT Bereich einem Praxistest unterziehen. Um den neuen IoT Service der HCP zu testen habe ich meinen RaspberryPi als Sensor Datenlieferant umfunktioniert.
Hierzu gibt es unzählige Guides und unterschiedliche Sensoren auf die ich hier nicht genauer eingehen möchte. Für mein Beispiel habe ich jedenfalls einen DHT22 (Temperatur/ Luftfeuchtigkeit) von AdaFruit verwendet. Er soll seine Daten später zum IoT-Service der HCP schicken.
Einrichten der HCP
Zuerst benötigen wir einen Account auf der HCP Trial. Dieser kann via https://account.hanatrial.ondemand.com erstellt werden. Haben wir unsere Zugangsdaten erhalten so aktivieren wir zuerst im Menüpunkt Services den „Internet of Things Service“:
Die HCP generiert nun ein Schema und auch eine Java Applikation welche wir im über den Menüpunkt Subscriptions(iotcockpit) sehen können und auch starten wollen. Im IoT Cockpit ist es nun ganz wichtig im Menüpunkt Roles den eigenen User zuzuweisen. Da es hier bei mir immer zur Verwirrung gekommen ist habe ich kurzerhand beide User assigned die in der HCP immer wieder auftauchen(also s-User und s-User+trial).
Ist dies erledigt finden wir im Punkt Overview die Start-URL zu unserem IoT Cockpit.
Mit einem Klick auf die URL starten wir nun das Cockpit.
Devicekonfiguration
Im Cockpit müssen wir nun unsere Devices konfigurieren, damit unser IoT Service auch mitbekommt welche Geräte Sensordaten schicken dürfen.
Dazu bekommen wir pro registriertem Device einen Token, doch dazu später mehr. Im Device Management sehen wir nun die 3 Kacheln:
- Device Types
- Message Types
- Devices
In dieser Reihenfolge werden wir nun auch vorgehen um unser IoT zu konfigurieren.
Device Types
Zuerst legen wir mit einem Klick auf die Kachel „Device Types“ den Device Type an. Am unteren Ende findet man einen Button mit einem Plus. Hier muss man sonst eigentlich nur einen Namen vergeben.
Message Types
Nun weiter zum Message Type. Hier definieren wir eine Struktur wie die Daten geliefert werden sollen. Mit dem Plus am unteren Ende können wir nun einen neuen Namen auswählen und im Folgeschritt die Struktur definieren. In meinem Fall habe ich hier den Namen temperatur gewählt mit 2 Feldern, temperatur(Temperatur) und humidity(Luftfeuchtigkeit).
Device
Auch hier beim Device haben wir wieder ein ähnliches vorgehen. Mit dem Plus unten legen wir das neue Device an und wählen unseren Namen gemeinsam mit der Device Type die wir im Schritt 1 angelegt haben.
Ist das Device angelegt bekommen wir in einem Popup einen OAuth token angezeigt.
In der Registerkarte Information sehen wir nun eine generierte Device ID, diese gemeinsam mit dem OAuth token aus dem Poup im Anlegeprozess zuvor brauchen wir in einem späteren Schritt. Deshalb bitte Beides notieren.
Geschafft unser Device ist nun eingerichtet!
Zurück im Overview starten wir nun die Kachel „Deploy Message Management Service“.
Auf Deploy klicken, Popup bestätigen und die angezeigte URL klicken, damit wird das HCP Cockpit gestartet.
Hier sehen wir nun im Overview beim Punkt State, dass der Service am Starten ist. Es kann sein, dass es bis zu 5 Minuten dauert bis der Status auf Grün und gestartet ist.
Ist der Status einmal auf Grün so können wir von unserem Cockpit Daten zum IoT Service schicken.
Hierzu gibt es auf GitHub ein Starterkit(basierend auf PYTHON) welches man verwenden kann: https://github.com/SAP/iot-starterkit
Ich habe mich jedoch für PHP mit der cURL Extension entschieden, da ich bereits ein PHP Script hatte welches die Daten für einen anderen Service zur Verfügung stellte.
Die in eckige Klammern gesetzten Zeichen:
[USER]: HCP Trial User
[MessageTypeID]: Message Type ID aus dem Cockpit
[oAuth Token]: oAuth Token aus dem Cockpit des registrierten Device
[DeviceID]: DeviceID aus dem Cockpit des registrierten Device
Bitte mit den zuvor notierten Daten richtig versorgen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
function readSensor($sensor) { $output = array(); $return_var = 0; $i=1; exec('sudo /usr/local/bin/loldht '.$sensor, $output, $return_var); while (substr($output[$i],0,1)!="H") { $i++; } $humid=substr($output[$i],11,5); $temp=substr($output[$i],33,5); $ch = curl_init(); $url = 'https://iotmmss[USER].hanatrial.ondemand.com/com.sap.iotservices.mms/v1/api/http/data/[DeviceID]'; // Build body $data_string = '{"mode":"async", "messageType":"[MessageTypeID]", "messages":[{"temperature":'.$temp.', "humidity":'.$humid.'}]}'; // Build headers $headers = Array(); $headers[0] = 'Authorization: Bearer ' . '[oAuth Token]'; $headers[1] = 'Content-Type: ' . 'application/json;charset=utf-8'; $headers[2] = 'Content-Length: ' . strlen($data_string); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); } |
Dieses Script habe ich in der Crontab des auf Linux basierenden Raspbian Betriebssystem eingetragen und wird in meinem Fall alle 5 Minuten aufgerufen.
Das Ergebnis können wir nun in unserem MMS Cockpit betrachten, welches wir aus dem iot Cockpit heraus mit der Entsprechenden Kachel starten können.