TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
cloud2

6A. CLOUDCOMPUTING 2

 

 

DU LERNST HIER...

 

den Cloudserver als Datenspeicher und als Vermittlungsrechner für deine Projekte einzusetzen, und wie du über das Mobilfunknetz auf die Cloud zugreifst. Dabei wird vorausgesetzt, dass du auf dem Cloudserver von ThingSpeak ein Konto eingerichtet hast, so wie es im Kapitel Cloudcomputing 1 beschrieben wird.

 

 

MUSTERBEISPIEL

 

In deinem Programm verwendest du das Modul TPCloud, das zur Vereinfachung des Codes die HTTP-Requests für den Cloudserver von ThingSpeak, die du im Kapitel Cloudcomputing 1 kennen gelernt hast, in Methodenaufrufe kapselt.

 

Du hast auf thingspeak.com ein Konto erstellt und einen Channel eingerichtet. Die Channelinformationen (channel ID, Write key, Read key) findest du im Reiter API Keys, den User API key unter der Menüoption Account | MyProfile.

Einen Channel kannst du wie eine Tabelle mit String-Einträgen auffassen. Jede Tabellenzeile ist eigentlich ein Datensatz und enthält ein Feld Date mit der Datumzeit zum Zeitpunkt des Eintrags, sowie mindestens 1 bis maximal 8 Felder mit den Informationen. Diese haben eine fixe Bezeichnung Field1 bis Field8 mit den Feld-Identifikationsnummern 1..8.

 Date  Field1  Field2  Field3  Field4  Field5  Field6  Field7  Field8
                 
                 

Um einen Eintrag in die Tabelle zu machen, erstellst du zuerst eine Instanz der Klasse ThingSpeakChannel und fügst mit insert(data) die Werte für die Felder in die Tabelle ein (Zahlen werden automatisch in Strings umgewandelt). Ist data ein einzelner Wert, so wird dieser in das Feld Field1 eingetragen. Nach den Programmzeilen

chn = ThingSpeakChannel(channelId, readKey, writeKey, userKey)
chn.insert("Hallo")
chn.insert("Python")

enthält die Tabelle also zwei Datensätze:

 Date  Field1
 2019-02-20 15:18:02  Hallo
 2019-02-20 15:18:22  Python

Um mehrere Felder zu füllen, übergibst du ein Dictionary (Key-Value-Paare) mit der Feld-Identifikation als key und der Information als value, also beispielsweise

data = {1: 101, 2: 23.55, 3: "OK"}
data insert(data)

Die Tabelle enthält dann den folgenden Datensatz:

Date Field1 Field2 Field3
2019-02-20 16:55:30 101 23.55 OK

Du holst mit getData()alle Datensätze als Liste zurück, wobei du den Wert von Field1 des letzten Eintrags auch einfacher mit getLastValue() kriegst. Ist die Tabelle leer, wird None zurückgegeben. Mit clear() löschst du alle Tabelleneinträge.

Du verwendest im folgenden Beispiel eine Oxocard als Sender von Textnachrichten. Bei jedem Tastenklick wird das nächste Wort gesendet.

Programm:

from time import sleep
from oxobutton import *
from oxocard import *
from TSCloud import ThingSpeakChannel

# free account
channelId = 706279
readKey =  "VHQBD3069QDT8YF2"
writeKey = "UYF8QJRRL8PEASCD"
userKey = "RU5C4K744C29X14L"
ssid = "myssid"
pwd = "mypassword"

Wlan.connect(ssid, pwd)
chn = ThingSpeakChannel(channelId, readKey, writeKey, userKey)
chn.clear()

button = Button(BUTTON_R2) 
words = ["Guten", "Tag", "liebe", "Anna"]
index = 0
while True:
    dot(7, 7, GREEN)
    if button.wasPressed():
        display(index)
        chn.insert(words[index])
        while chn.getLastValue() != None:
            sleep(2)
        index += 1
        if index == 4:
            index = 0
► In Zwischenablage kopieren

Nach dem Absenden wartest du jeweils in einer Endlosschleife, bis der Empfänger die Daten abgeholt hat. Das merkst du daran, dass dieser den Tabelleneintrag löscht, was zur Folge hat, dass getLastValue() None zurückgibt.

Der Empfänger testet in einer Endlosschleife, ob Daten angekommen sind und schreibt den erhaltenen Text auf dem Display aus. Nachher löscht er den  Tabelleneintrag.

Programm:

from time import sleep
from oxocardext import *
from TSCloud import ThingSpeakChannel

# free account
channelId = 706279
readKey =  "VHQBD3069QDT8YF2"
writeKey = "UYF8QJRRL8PEASCD"
userKey = "RU5C4K744C29X14L"
ssid = "raspilink"
pwd = "aabbaabbaabb"

Wlan.connect(ssid, pwd)
chn = ThingSpeakChannel(channelId, readKey, writeKey, userKey)
while True:
    data = chn.getLastValue()
    if data != None:
        bigTextScroll(data)
        chn.clear()
    dot(7, 7, GREEN)
    sleep(2)
► In Zwischenablage kopieren

Um die Demonstration interaktiver zu gestalten, verwendest du im folgenden Programm als Sender einen PC, wo du einen beliebigen Text eintippen kannst. Damit kann dir jemand von irgendwo auf der Welt über das Internet eine Nachricht übermitteln, die auf der Oxocard als Lauftext ausgeschrieben wird

Programm:

from time import sleep
from tcpcom import ThingSpeakChannel

channelId = 706279
readKey =  "VHQBD3069QDT8YF2"
writeKey = "UYF8QJRRL8PEASCD"
userKey = "RU5C4K744C29X14L"

chn = ThingSpeakChannel(channelId, readKey, writeKey, userKey)
chn.clear()
while True:
    text = inputString("Message to send:")
    if text.strip() == "":
        continue
    chn.insert(text)
    print("Waiting for arrival confirmation...")
    while chn.getLastValue() != None:
        sleep(2)
    print("Arrival confirmed.")
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Eine Tabelle auf dem Cloudserver dient als Zwischenspeicher für Informationen, die über das Internet von einem Rechner zu einem anderen übertragen werden. Der Sender trägt die Information in einer Tabelle ein und wartet in einer Endlosschleife,. bis die Tabelle wieder leer ist. Der Empfänger prüft periodisch, ob die Tabelle leer ist. Ist eine Information angekommen, so holt er sie ab und löscht den Tabelleneintrag. Für den Sender ist dies eine Bestätigung dafür, dass die Information erfolgreich übermittelt wurde. Man nennt ein solches Verfahren des Datenaustauschs auch "Handshake" (Händeschütteln). In einem Ablaufdiagramm sieht dies so aus:

Dieses Verfahren Art der Datenkommunikation benötigt relativ viele Ressourcen und ist langsam. Diese Nachteile entfallen beim Pushservice (siehe Kapitel Push-Nachrichten) und MQTT (siehe Kapitel MQTT Kommunikation).

 

 

ZUM SELBST LÖSEN

 

 

1.

Um eine mobile Empfangseinrichtung zu bauen, verbindest du ein Handy über das Mobilfunknetz mit dem Internet. Dann startest du auf dem Handy einen Hotspot (Tethering) und änderst das Empfangsprogramm so, dass die Oxocard über diesen Hotspot Zugang zum Internet erhält. Sende ihr von einer anderen Oxocard oder von einem PC Informationen, die dort angezeigt werden oder einen anderen Effekt, z.B. ein akustisches Signal bewirken. Dieses Verfahren funktioniert auch für weit entfernte Sender und Empfänger.

2.

Erstelle einen Datenlogger, der Sensordaten, z.B. die Temperatur und Luftfeuchtigkeit auf dem Cloudserver speichert. Hole die Informationen mit einem in TigerJython geschriebenen Programm dort ab und stelle sie mit GPanel grafisch dar oder speichere sie in einer Datei, die du mit einer Tabellenkalkulation weiter verwendest.

 

 

ZUSATZSTOFF: MODELL EINER LAWINENSPRENGUNG

 

Zur gezielten Auslösung von Schneelawinen wird meist eine Lawinensprengung durchgeführt. Im Modell erfolgt die Sprechung über eine Internet-Funkverbindung mit einer Oxocard, welche die (x, y)-Koordinaten des Sprengsatzes (hier im Bereich 0..7 des LED-Displays) von der Einsatzzentrale erhält. Dort läuft auf einem PC ein benutzerfreundliches Programm mit einer grafischen Benutzeroberfläche. Das System ist gemäss dem oben beschriebenen Handshake-Konzept aufgebaut. Die Programme können von hier heruntergeladen werden.