Quantcast
Channel: Arduino – Fluuux – TechBlog
Viewing all articles
Browse latest Browse all 40

Wir basteln uns einen Arduino gMail notifier

$
0
0

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

  1. Python-Script das auf dem Rechner läuft
  2. Elektronik-Hardware die zwischen Rechner und Ausgabegerät hängt
  3. Software die auf dieser Elektronik-Hardware läuft
Das Python-Script überprüft in einem bestimmten Interval ob neue eMails im gMail-Postfach liegen und sendet die Anzahl der neuen eMails an Zahl über die Serielle Schnittstelle an die Elektronik-Hardware. Die Elektronik-Hardware empfängt die Daten die über den seriellen Port gesendet werden. Die Software auf der Elektronik-Hardware prüft ob der übermittelte Wert größer als null ist und schaltet entsprechend ein Ausgabegerät. Dieses Ausgabegerät kann eine LED, ein Summer, ein Servo oder sonst was sein.

 
 

Hardware

Die Elektronik-Hardware besteht in meinem Fall aus einen Arduino Uno Rev.3,  einer RGB-LED, die als Ausgabegerät dient und die wenn neue eMails vorliegen, in einem schnellen Intervall blinken und dabei ständig ihre Farbe ändern wird und ein paar Widerständen für die LED.
ArduinoPythonCronGMailNotifier2

 
 

Software

Dieses Projekt erfordert einmal die Software, die auf dem Arduino läuft und dafür sorgt dass die LED blinkt sobald neue eMails vorliegen und der Software, die auf dem Rechner läuft, im GoogleMail-Postfach nach neuen eMails schaut und die Anzahl der neuen eMails zurückgibt. Außerdem benötigen wir noch einen kleinen Cronjob der dafür sorgt dass die Software auf dem Rechner in einem bestimmten Interval ausgeführt wird.

 

Die Software für den Arduino ist relativ einfach gehalten. Im loop() wird abgefragt welcher Wert über die Serielle Schnittstelle empfangen wurde. Ist dieser Wert 0, dann liegen keine neuen eMails im Postfach und die LED wird ausgeschaltet. Ist der Wert größer als 0 dann blinkt die LED und ändert dabei ihre Farbe in der Geschwindigkeit die in der Variablen DELAY angegeben wurde. die 3 kurzen Beine der RGB-LED sind an den Pins 11, 10 und 9 angeschlossen, das lange Bein an GND.

 
 

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.

  1. Laden Sie sich das Archiv von der jeweiligen Seite herunter und entpacken Sie dieses an einen beliebigen Ort auf Ihrer Festplatte.
  2. Öffnen Sie das Terminal,
  3. 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

Can't see the video in your RSS reader or email? Click Here!

The post Wir basteln uns einen Arduino gMail notifier appeared first on Fluuux - TechBlog.


Viewing all articles
Browse latest Browse all 40