Hey,
ich versuche gerde eine Interrupt in einen Programm Code einzufügen, der meine Emails Abfragen soll. Es soll aber noch der Abhandlung des Interrupts die Email Abfrage weitergeführt werden, wie stell ich das an?
Der Programm Code:
#! /usr/bin/python
# Das Script benötigt die IMAPLIB und TIME. Für POP3 wäre das POPLIB. Siehe http://docs.python.org/2/library/poplib.html
# Googlemail verwendet IMAP address: imap.gmail.com und Port 993 username ist die volle Mailaddresse
import imaplib, time
import RPi.GPIO as GPIO
GREEN_PIN = 25
RED_PIN = 24
class MailChecker:
def __init__(self, server, port):
# GPIO aufsetzen - siehe Konstanten für GREEN_PIN und RED_PIN müssen mit eurer Belegung übereinstimmen
GPIO.setmode(GPIO.BCM)
GPIO.setup(GREEN_PIN, GPIO.OUT)
GPIO.setup(RED_PIN, GPIO.OUT)
GPIO.setwarnings(False)
# verbindung mit dem IMAP server - SSL versteht sich
try:
self.m = imaplib.IMAP4_SSL(server, port)
except:
self.do_error("Server nicht erreichbar")
def do_error(self, error):
print(error)
exit()
def log_in(self, user, password):
# Login mit mailaddresse und password
try:
self.m.login(user, password)
except:
self.do_error("Fehler: Login")
def check_mail(self):
type, data = 0, 0
# Inbox nach ungelesenen Mails durchsuchen. Kann weiter eingeschränkt werden z.B. '(FROM "Horst")'
try:
self.m.select()
type, data = self.m.search(None, "UNSEEN")
except:
self.do_error("Ausnahme: Mailsabrufen")
if type == "NO":
self.do_error("Fehler: Mailsabrufen")
self.report(data)
def start_checking(self, interval):
while True:
self.check_mail()
time.sleep(interval)
def report(self, data):
message_count = len(data[0].split())
if message_count > 0:
print("Sie haben %i neue Mails" %
message_count)
GPIO.output(RED_PIN, GPIO.LOW)
for i in range(1, 100):
# Grüne LED Blinkt
GPIO.output(GREEN_PIN, GPIO.LOW)
time.sleep(.2)
GPIO.output(GREEN_PIN, GPIO.HIGH)
time.sleep(.2)
else:
print("Keine neuen Mails")
GPIO.output(GREEN_PIN, GPIO.LOW)
GPIO.output(RED_PIN, GPIO.HIGH)
if __name__ == "__main__":
user = "benutzer"
password = "passwort"
server = "serveradresse"
port = 993
# oder welcher port auch immer relevant ist
checker = MailChecker(server, port)
checker.log_in(user, password)
checker.start_checking(60)
Der Interrupt :
1. GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
2. def my_callback(channel):
print("test")
3. GPIO.add_event_detect(17, GPIO.RISING, callback=my_callback)
Ich hoffe ihr könnte mir helfen, da ich noch ein blutiger Anfänger in Sachen Python bin
Gruß Tobi