TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
wie du mit der Oxocard programmgesteuert Emails mit aktuellen Daten versenden kannst. Dies ist besonders interessant, um bei bestimmten Messergebnissen Alarme auszulösen und gesammelte Messdaten zu übertragen. |
IFTTT KONFIGURIEREN |
Mit den Diensten von IFTTT kannst du über das Internet Emails an eine bestimmte Email-Adresse versenden, für die du ein Konto eingerichtet hast. Als Anwendungsbeispiel willst du selbst ein Mail erhalten, sobald die mit einem Sensor gemessene Temperatur einen bestimmten Grenzwert überschreitet.
|
MUSTERBEISPIEL |
In deinem Programm misst du mit dem Sensirion-Sensor die Temperatur. Du kannst aber auch irgendeinen anderen Sensor verwenden oder sogar die Messung simulieren. Um dem Mailversand mit IFTTT auszulösen, musst du dem Server http://maker.ifttt.com einen GET-Request mit folgenden Option zusenden: /trigger/overheat/with/key/{key}value1={value1}&value2={value2}&value3={value3} wo {key} dein Schlüssel ist und {value1}, {value2}, {value3} die Stringwerte sind, die im Mail an den gleichnamigen Platzhaltern erscheinen sollen. (Als String sollten diese URL-codiert sein. Falls du keine Umlaute oder Spezialzeichen verwendest, ist keine Codierung nötig.) Beachte, dass du das Mail nur einmal versenden willst, wenn die Temperatur die Alarmschwelle alarmTemp übersteigt. Daher musst du den Alarm mit dem Flag alarmArmed erst dann wieder aktivieren, wenn die Temperatur unter die Schwelle alarmRearmTemp sinkt. Programm: from tcpcom import * from sht31 import SHT31 from oxocard import * alarmTemp = 28 alarmRearmTemp = 27 sht = SHT31() host = "maker.ifttt.com" port = 80 key = "oPn2kQcK5zgWtX_eR4JB6LKAc9xcpN6lm5WRty" inquiry = "/trigger/overheat/with/key/" + key + "?value1=%d" Wlan.connect("myssid", "mypassword") client = HTTPClient() alarmArmed = True while True: t, h = sht.get_temp_humi() temp = int(t + 0.5) display(temp) if alarmArmed: if temp >= alarmTemp: print("Triggering alarm") alarmArmed = False insertBigChar(">", RED) client.connect(host, port) request = inquiry % temp print(request) reply = client.sendGetRequest(request) print(reply) client.closeConnection() else: if temp < alarmRearmTemp: print("Rearming alarm") alarmArmed = True insertBigChar("<", GREEN) sleep(3) Zur Demonstration werden der Request und der Reply des Servers auf der Konsole ausgeschrieben. Nach einigen Minuten kannst du in deiner Inbox ein Mail abholen. |
MERKE DIR... |
Um über HTTP Mails zu versenden, erstellst du ein Konto auf einem Gateway-Server und sendest diesem einen HTTP GET-Request. Analog könntest du vorgehen, um SMS zu versenden. Dazu benötigst du allerdings einen kostenpflichtigen HTTP-SMS Gateway, beispielsweise www.ecall.ch oder www.lox24.eu. Du musst mit Kosten von 5 Cents/Rappen pro SMS rechnen. |
ZUM SELBST LÖSEN |
|
ZUSATZSTOFF: DATENLOGGER |
Ein automatisches Messsystem soll über längere Zeit Messungen durchführen und nach einer bestimmten Zeit eine Zusammenfassung der Messwerte dir als Mail zusenden. Dazu muss die Oxocard die Messdaten in einer Log-Datei abspeichern, und zwar mit Messzeit und Messwert. Dein Programm nimmt alle 10 Sekunden einen neuer Wert auf und versendet alle 10 Minuten die Messwerte als Mail. Die Daten werden so in der Datei gespeichert, dass sie als Mail zeilenweise leicht lesbar sind, und zwar als hh:mm:ss;temp, wo hh die Stunden, mm die Minuten und ss die Sekunden, sowie temp die gemessene Temperatur sind. Als Zeilentrenner wird das HTML-Tag <br> verwendet. Programm: from tcpcom import * from sht31 import SHT31 import ntptime, utime from oxocard import * def synchTime(): Wlan.connect(ssid, pwd) ntptime.settime() Wlan.disconnect() def sendMail(log): Wlan.connect(ssid, pwd) client = HTTPClient() client.connect(host, port) request = inquiry + log print(request) reply = client.sendGetRequest(request) print(reply) client.closeConnection() Wlan.disconnect() ssid = "myssid" pwd = "mypassword" host = "maker.ifttt.com" port = 80 key = "jGKt1Nz6XXRMfJGBhje0_FFWXMecvWkEs5wwSQ" inquiry = "/trigger/MyLogger/with/key/" + key + "?value1=" sht = SHT31() synchTime() logFile = "data.txt" f = open(logFile, "w") ready = True while True: t, h = sht.get_temp_humi() temp = int(t + 0.5) yy, mm, dd, h, m, s, w, b = utime.localtime() f.write("%02d:%02d:%02d;%02d<br>" %(h, m, s, temp)) display(temp) if m % 5 == 0 and ready: insertBigChar(">", GREEN) ready = False f.close() f = open(logFile) log = f.read() sendMail(log) f.close() f = open(logFile, "w") if m % 5 == 1 and not ready: ready = True sleep(10)
|