Jython

11. Cloudcomputing


Cloudcomputing bezeichnet die Möglichkeit eine IT-Infrastruktur wie Datenspeicherung, Rechenkapazität und Softwarelösungen über das Internet anzubieten. Im Zusammenhang mit IoT ist insbesondere die Speicherung von Sensordaten im 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 im Cloud speichern

Nachdem man ein Konto bei ThingSpeak erstellt hat, ist es sehr einfach Daten auf den Cloudserver in einer Tabelle zu speichern und sie grafisch darzustellen.

Um die Distanz-Messwerte in der Cloud zu speichern, sendet der mbRobot als HTTP-Client einen HTTP-Request in einem bestimmten Formatan 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 (siehe Anleitung).

 

# 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)    
    sleep(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 des ThingSpeak-Kontos
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 Beschleunigung-Messwerte aufzunehmen, 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)
    sleep(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 channID 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 ein json-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 Delete-Request kann man programmgesteuert alle Daten des Channels löschen. Dazu muss man den User Key kennen, dan man unter der 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