TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
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.
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.
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:
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:
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 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) 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.") |
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 |
|
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. |