TigerJython xx
für Gymnasien
Deutsch   English 

11. Cloudcomputing


Beim Cloudcomputing werden Rechenleistungen auf einen externen Server ausgelagert, auf den über das Internet zugegriffen wird.Im Zusammenhang mit IoT ist insbesondere die Speicherung von Sensordaten in der Cloud interessant, da diese Daten danach über das Internet von überall abrufbar sind.

 


Wir verwenden den Cloudserver von ThingSpeak, der für kleine Datenvolumen kostenlos zur Verfügung steht. Ausserdem bietet dieser Clouddienst Mathworks (Distribution von MathLab) an, mit dem sich die Messdaten sehr einfach grafisch darstellen lassen.

 

Um die Dienste zu verwenden, muss man bei ThingSpeak (www.thingspeak.com) ein persönliches Konto erstellen. Eine kurze Anleitung dazu findet man hier: ThingSpeak Konto erstellen.

 

Beispiel 1: Messwerte des Distanzsensors in der Cloud speichern

Um die Distanz-Messwerte in der Cloud zu speichern, sendet der mbRobot als HTTP-Client einen HTTP-Request in einem bestimmten Format an den Cloud-Server. Im folgenden Programm wird alle 15 Sekunden ein neuer Wert erzeugt (bei einem kostenlosen Konto kann man nicht häufiger als alle 15 Sekunden, bei einem bezahlten Konto jede Sekunde). Den benötigten API-Key erhält man bei der Erstellung des ThingSpeak Channels.

 

# ThingSpeakDist.py
from microbit import *
from linkup import *
from mbrobot import *

key = "456FPOXESR6L8WYX"
print("Sending AP connection command")
connectAP("mySSID", "myPassword")
while True:
    dist = getDistance()
    print("Sending new distance:", dist)
    url = "http://api.thingspeak.com/update?api_key=" + key + "&field1=" + str(dist)
    httpGet(url)    
    delay(15000)
► In Zwischenablage kopieren
 

 

Nach einiger Zeit erhält man auf der ThingSpeak-Webseite folgende Grafik:

Der Cloudserver stellt Tools zur Verfügung, mit welchen man die Daten auf einer beliebigen Webseite in Tabellenform oder als Grafik abrufen kann.

Erklärungen zum Programmcode:

key = "7893POXESR6L8WUX": Schüssel (write key) des ThingSpeak-Channels
httpGet(url): Sendet den aktuellen Sensorwert mit einem GET-Request


Beispiel 2
: Messwerte des Beschleunigungssensors in der Cloud speichern

Mit dem Beschleunigungssensor des micro:bits wird die x-Komponente der Beschleunigung gemessen. Steht der mbRobot auf einer waagrechten Unterlage ist der Messwert 0, bei einer Seitwärtsneigung nach rechts sind die Werte positiv, kippt man ihn nach links sind die Werte negativ.

Um die Messwerte abzuspeichern, sendet der mbRobot als HTTP-Client alle 15 Sekunden einen HTTP-Request an den Cloud-Server, wo der Messwert gespeichert wird.

 

# ThingSpeakAcc.py
from microbit import *
from linkup import *
from mbrobot import *

key = "7567FPOXESR6L8WXY"
print("Sending AP connection command")
connectAP("mySSID", "myPassword")
while True:
    acc = accelerometer.get_x()
    print("Sending acc:", acc)
    url = "http://api.thingspeak.com/update?api_key=" + key + "&field1=" + str(acc)
    response = httpGet(url)
    print("Response:", response)
    delay(15000)
► In Zwischenablage kopieren
 

 


Nach einiger Zeit erhält man auf der ThingSpeak-Webseite folgende Grafik:

 

Beispiel 3: Daten mit einem Programm aus der Cloud holen

Mit einem GET-Request kann man die auf ThinkSpeak gespeicherten Daten abrufen. Dazu benötigt man vom Channel den read key und die channel ID, die man nach dem Einloggen in sein Konto unter dem Menu-Punkt API Keys entnehmen kann. Das Format der URL ist das Folgende:

http://api.thingspeak.com/channels/channelID/feeds.json?api_key=readKey&results=100

wo channelID und readKey durch die aktuellen Werte ersetzt werden müssen. Der Wert von results entspricht der maximalen Anzahl zurückgegebener Werte (es können maximal 8000 Werte gespeichert werden). Der Rückgabewert ist einJSON-formatierter String, der die gesamten Informationen des Channels enthält.

Tippt man diese URL in einen Browser ein, so werden die Daten angezeigt (sowohl im Raw-Format wie JSON-formattiert).
Im Beispiel werden die aufgenommenen Daten mit einem GPanel grafisch dargestellt. Dazu wird der Rückgabestring mit eval() in ein Python-Dictionary umgewandelt. Unter dem Key feeds erhält man eine Liste mit dem Messwerten (jeder Messwert wiederum als ein Dictionary). Der Key field1 liefert den Messwert als String.

   

# ThingSpeakFeeds.py

import urllib2
from gpanel import *

makeGPanel(-2, 22, -600, 600)
drawGrid(0, 20, -500, 500)
x = 0

readKey = "LGHJ1UDKXABYCIJ"
channelID = "4924629"

url = "http://api.thingspeak.com/channels/"+channelID+"/feeds.json?api_key="+readKey+"&results=100" 
data = urllib2.urlopen(url).read()
dataDict = eval(data)
print dataDict
feeds = dataDict['feeds']
for feed in feeds:
    a = feed['field1']
    y = int(a)
    if x == 0:
        pos(x, y)
    else:
        draw(x, y)
    x += 1
► In Zwischenablage kopieren

Mit einem HTTP-DELETE-Request kann man programmgesteuert alle Daten des Channels löschen. Dazu muss man den User Key kennen, den man unter Account | My Profile des ThingSpeak-Kontos findet.

# ThingSpeekDel.py

from linkup import *

channelId = "123456"
userKey = "A4YKXGJEIC8J1L48"

connectAP("myssid", "mypassword")
url = "https://api.thingspeak.com/channels/" + channelId + "/feeds.json?api_key=" + userKey
httpDelete(url)
► In Zwischenablage kopieren