Title: M1.3.2: Cloud-Server mit REST API
Course: LF07 - Cyber-physische Systeme ergänzen - FI/ITSE - Raspberry Pi > Section: LS7.1: Messdatenerfassungssysteme funktional zusammenführen

Überblick

HTTP nutzt die Topologie einer Client-Server Struktur. Ein Server stellt Ressourcen zur Verfügung und der Client greift über das Protokoll HTTP auf diese Ressourcen zu. REST nutzt die Verben (Befehle), die HTTP zur Verfügung stellt. Der Client hat damit die Möglichkeit, die Datenressourcen des Servers abzurufen und zu verarbeiten, neue Daten auf dem Server hinzuzufügen oder bestehende Daten zu ändern.

Hier werden verschiedene Lösungen für die Bereitstellung eines Servers beschrieben, die sich auch für den Datenaustausch in cyberphysischen Systemen eignen. Eine Möglichkeit bietet sich bei den großen Anbietern wie Microsoft, AWS oder Google. Dort kann Software und Infrastructure as a Service kostenlos ausprobiert und danach gemietet werden. Der Einarbeitungsaufwand in diese Plattformen ist nicht unerheblich, liefert abschließend eine sehr professionelle Lösung.

Eine gerade in der IoT-Welt (Internet of Things) bekannte Cloudlösung ist Adafruit. Diese zeichnet sich durch eine schnell erlernbare API aus. Auf der anderen Seite entbindet sie den Anwendungsentwickler von vielen Aufgaben, wie Speicherung und Darstellung der Ressourcen. Die Daten werden dabei in sogenannten Feeds abgelegt. Daten aus den Feeds können mit verschiedenen Diagrammarten repräsentiert werden.

Auf einer beliebigen Serverhardware kann jedoch auch ein IoT geeigneter Webserver zum Beispiel in Python erstellt werden, der dann die HTTP-Anfragen bearbeitet. Bei einer solchen Lösung müssen Datenformate, Interpretation und Speicherung von der selbst erstellten Serverapp geleistet werden. Das Verfahren wird im Abschnitt M1.3.3: Eigener Webserver mit REST API beschrieben.

Adafruit Cloud

Einen guten ersten Eindruck verschafft man sich unter https://learn.adafruit.com/welcome-to-adafruit-io. Die Arbeit mit Python und Adafruit.io wird kurz beschrieben unter https://io.adafruit.com/support --> Quick Guides --> Getting Started With Python

Identifikation der relevanten API Prozeduren und Webquests für die adafruit Cloud

Die Dokumentation der AdaFruit-API für Python findet man auf der folgenden Website: https://adafruit-io-python-client.readthedocs.io/en/latest/quickstart.html

Die benötigte Library zum Zugriff auf die Adafruit Cloud installiert man auf dem Pi mit:

```pip3 install adafruit-io```

In einem ersten Beispielprogramm zum Schreiben eines Wertes in einen Feed lassen sich drei relevante Befehle identifizieren:
```# Import Adafruit library
from Adafruit_IO import Client

# Create instance of REST client
aio = Client('YOUR ADAFRUIT USER', 'YOUR ADAFRUIT IO KEY')

# Send the value 100 to a feed called 'Foo'
aio.send('Foo', 100)```

Wie man sieht, benötigt man einen Adafruit Usernamen und einen Key. Diese beiden Tokens müssen zunächst auf der Adafruit-Seite erstellt werden. Dann gelingt es mit drei Befehlen bereits, Daten in der Cloud zu speichern.

Account und Feed auf io.adafruit.com anlegen

Schritt 1: Account anlegen

Schritt 2: Einloggen und auf „My Key“ klicken

Schritt 3: Username und Passwort aufschreiben, bzw. in die Zwischenablage kopieren (Copy&Paste)

Schritt 4: Wichtig! Einen Feed erstellen. Namen des Feeds merken. Er wird in Python benötigt!

Es hat sich gezeigt, dass die Verwendung von Großbuchstaben und dem Unterstrich_ für den Namen eines feeds zu Problemen geführt hat. Also besser Kleinbuchstaben und keine _ , Leerzeichen oder Umlaute verwenden.

Nun sind die Vorarbeiten für die Adafruit-Cloud erledigt. Es kann programmiert und Daten aus dem Temperatusensor in einem Feed gespeichert werden.

Pythonquelltext für den ReST Publisher Raspberry Pi

Und hier nochmal als Datei.

Ausgabe der Messdaten mit dem Adafruit-Dashboard