Heute habe ich, wie die letzte Zeit fast täglich, mal wieder mit meinem Arduino gespielt und mir einige Gedanken darüber gemacht, wie man in einem lauten Raum dafür sorgen kann, dass man merkt wenn neue eMails eintreffen. Herausgekommen ist das Projekt (arduino gmail notifier), bei dem über einen Cronjob, jede Minute ein Python-Script aufgerufen wird. Das Python-Script verbindet sich zum GoogleMail-Server und schaut nach ob neue eMails vorhanden sind. Wenn neue eMails vorhanden sind, dann fängt eine sehr leuchtstarke RGB-LED an schnell zu blinken und dabei ständig ihre Farbe zu ändern.
Da ich selber einen Mac benutze und ich nicht weiß ob es etwas ähnliches wie Cronjobs auf einem Windowssystem gibt, erkläre ich das ganze hier für die Unixnutzer.
Das System besteht aus 3 Komponenten
- Python-Script das auf dem Rechner läuft
- Elektronik-Hardware die zwischen Rechner und Ausgabegerät hängt
- Software die auf dieser Elektronik-Hardware läuft
Hardware
Software
Arduino-Sketch zum empfangen von Daten über den seriellen Port
/* GetGMail Dieses Sketch wartet auf ankommende Signale überd en seriellen Port Wird ein M empfangen dann fängt eine RGB LED an im Takt zu blinken und dabei ihre Farbe zu ändern. Wenn ein N empfangen wird, dann wird die LED abgeschaltet. Zu diesem Script gehört das Python-Script check-gmail.py das minütlich durch einen CronJob aufgerufen wird. Das Python-Script verbindet sich zum Google-Mail-Server und fragt ab ob ungelesene eMails im Posteingang sind. Je nach Wert wird ein M oder ein N an der seriellen Port gesendet. */ int bluePin = 11; // Digital Pin für Blaue LED in RGB-LED int greenPin = 10; // Digital Pin für Grüne LED in RGB-LED int redPin = 9; // Digital Pin für Rote LED in RGB-LED int val = 0; // Wert aus dem seriellen Anschluss zu lesen int DELAY = 200; // Intervall zwischen Wechsel der Farben void setup () { pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(redPin, OUTPUT); digitalWrite(greenPin, LOW); digitalWrite(bluePin, LOW); digitalWrite(redPin, LOW); Serial.begin (9600); Serial.flush (); } void loop () { getNewMails(DELAY); } void getNewMails(int Pause) { while(int i=-1) { if (Serial.available()) val = Serial.read()-48; if (val > 0) { Serial.println("eMails: "+String(val)); digitalWrite(redPin,HIGH); digitalWrite(greenPin,LOW); digitalWrite(bluePin,LOW); delay(Pause); digitalWrite(redPin,LOW); digitalWrite(greenPin,HIGH); digitalWrite(bluePin,LOW); delay(Pause); digitalWrite(redPin,LOW); digitalWrite(greenPin,LOW); digitalWrite(bluePin,HIGH); delay(Pause); } else { digitalWrite(redPin,LOW); digitalWrite(greenPin,LOW); digitalWrite(bluePin,LOW); } } }
Python-Module installieren
Das Python-Script ist zwar auch einfach gehalten, jedoch sollten einige Vorraussetzungen erfüllt sein um dieses nutzen zu können. So müssen neben Python die Library pySerial, sowie das Universal Feed Parser Modul installert sein . Die pySerial Library finden Sie unter pyserial.sourceforge.net. Auf dieser Seite finden Sie neben einer großen Anzahl an Beispielen auch eine Installationsanleitung. Sollte die Anleitung einmal nicht mehr verfügbar sein, hier eine grobe Anleitung, die auch für die Installation des Universal Feed Parser Moduls Anwendung findet.
- Laden Sie sich das Archiv von der jeweiligen Seite herunter und entpacken Sie dieses an einen beliebigen Ort auf Ihrer Festplatte.
- Öffnen Sie das Terminal,
- gehen Sie in das entpackte Archiv und geben Sie den Befehl python setup.py install ein.
Das universal Feed Parser Modul können Sie unter http://code.google.com/p/feedparser/ herunterladen. Auf http://packages.python.org/feedparser/ finden Sie zudem eine ausführliche Dokumentation zu diesem Python-Modul. Wenn Sie also Python und die beiden Module installiert haben, können Sie eine neue Textdatei erstellen und folgenden Code als check-gmail.py speichern. Ich habe dieses Python-Script unter Documents/Scripts abgelegt und anschließend über das Terminal mit dem Befehl chmod 774 check-gmail.py ausführbar gemacht.
Python-Script zum ermitteln ungelesener eMails im gMail-Posteingang „check-gmail.py“
Im folgenden Script müssen Sie den seriellen Port angeben. Wenn Sie nicht wissen wie dieser bei Ihnen heißt, öffnen Sie einfach die Arduino Software und schauen im Hauptmenü unter „Tools“ welchen Seriellen Port Sie verwenden um Ihr Arduino-Board zu programmieren. Tragen Sie diesen Namen hinter SERIALPORT ein! Zusätzlich müssen Sie in Zeile 16 noch Ihre Google-Mail Adresse und Ihr Google-Mail Passwort eintragen.
#!/usr/bin/python2.7 import urllib2, serial, feedparser, time SERIALPORT = "/dev/tty.usbmodemfd121" # Serieller Port (Bitte anpassen) # Seriellen Port konfigurieren try: ser = serial.Serial(SERIALPORT, 9600) except serial.SerialException: sys.exit() auth_handler = urllib2.HTTPBasicAuthHandler() #Hier die Zugangsdaten zum GMail-Account eintragen auth_handler.add_password('New mail feed', 'https://mail.google.com/','GOOGLEMAILADRESSE', 'GOOGLEMAILPASSWORT') opener = urllib2.build_opener(auth_handler) feed_file = opener.open('https://mail.google.com/mail/feed/atom/') # Feed mit feedparser parsen d = feedparser.parse(feed_file) #Anzahl der ungelesenen eMails newmails = d.feed.fullcount # Senden der Anzahl der ungelesenen # eMails ueber den seriellen Port if newmails > 0: ser.write(str(newmails)) time.sleep(1) # Anzahl der eMails, Betreff und Autor im Terminal ausgeben print 'Anzahl eMails:', d.feed.fullcount for entry in d.entries: print '----------------------------------------------' print 'Author: ', entry.author print 'Betreff:', entry.title else: ser.write(0) time.sleep(1) # seriellen Port schliessen ser.close()
Cronjob zum aufrufen des Python-Scripts
Wie Sie einen CronJob anlegen und welche Auswirkungen die einzelnen Angaben haben, können Sie im Beitrag „Traffic eines bestimmten WLAN-Netzwerkes loggen“ nachlesen. Nur so viel, wichtig ist die erste Zeile und die Angabe des kompletten Pfades zum Python-Script. In meinem Fall wird das Script jeden Tag zu jeder Minute aufgerufen. Denkbar wäre es auch, das Script nur zu bestimmten Zeiten laufen zu lassen, in denen es z.B. besonders laut im Büro ist oder man keine Möglichkeit hat ständig auf dem Rechner nachzuschauen ob eine dringend erwartete eMail bereits angekommen ist.
#!/bin/bash * * * * * /Volumes/MAC\ OS\ X/Users/USERNAME/Documents/Scripts/check-gmail.py
The post Wir basteln uns einen Arduino gMail notifier appeared first on Fluuux - TechBlog.