[font="Calibri"]Hallo zusammen,[/font]
[font="Calibri"]hab mir gedacht, doppelt hält besser und möchte einen Wassersensor bauen, der nicht nur eine Alarmmeldung als Mail abgibt, sondern auch gleich ein Foto mitschickt.[/font]
[font="Calibri"]Ohne Kamera- und Attachmentbefehle für das jeweilige Bild im Skript funktioniert es problemlos.[/font]
[font="Calibri"]Anforderungen an das Skript:[/font]
[font="Calibri"]Wassersensor liegt auf PIN18.[/font]
[font="Calibri"]Bei Nässe soll ein Foto über die Raspi Cam gemacht und mit einer Mail als Anhang verschickt werden.[/font]
[font="Calibri"]Wenn der Sensor wieder trocken ist, dann erneut Foto machen und eine Mail mit Anhang verschicken.[/font]
[font="Calibri"]Aktueller Fehler beim Testen:[/font]
[font="Calibri"]In Zeile 114 [/font]
[font="Calibri"]return 0[/font]
[font="Calibri"]SyntaxError: 'return' outside function[/font]
[font="Calibri"] [/font]
[font="Calibri"]Wo liegt denn hier das Problem? Der Zähler müsste doch den Wert problemlos ausgeben können?[/font]
[font="Calibri"]Hoffe, jemand hat hier einen Tip.[/font]
[font="Calibri"]
#!/usr/bin/python[/font][/size][/color]import smtplibimport RPi.GPIO as GPIOimport stringimport timeimport picamerafrom datetime import datetimefrom email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime.multipart import MIMEMultipart# MAIL ##############################################username = "Mailpassword = "xxxxxxxxxx"From = "Absender"To = "Empf"# Conditions ########################################water_count = 0Subject_wet = "Wassersensor ist nass"Body_wet = "NASS"Subject_dry = "Wassersensor ist trocken"Body_dry = "TROCKEN"#ENTWEDER "wet" oder "dry" als Bedingungdef email(condition): print "Attempting to send email" if condition == "wet":# Bild NASS ########################## with picamera.PiCamera() as camera: camera.resolution = (1024, 768) camera.start_preview() # Camera warm-up time time.sleep(2) camera.capture("nass.jpg")f_time = datetime.now().strftime("%a %d %b @ %H:%M")msg = MIMEMultipart()msg.attach(MIMEText(file("/home/pi/nass.jpg").read()))Body = string.join(( "From: %s" % From, "To: %s" % To, "Subject: %s" % Subject_wet % f_time, "", Body_wet, ), "\r\n")if condition == "dry":# Bild TROCKEN ####################### with picamera.PiCamera() as camera: camera.resolution = (1024, 768) camera.start_preview() # Camera warm-up timetime.sleep(2)camera.capture("trocken.jpg")f_time = datetime.now().strftime("%a %d %b @ %H:%M")msg = MIMEMultipart()msg.attach(MIMEText(file("/home/pi/trocken.jpg").read())) Body = string.join(( "From: %s" % From, "To: %s" % To, "Subject: %s" % Subject_dry % f_time, "", Body_dry, ), "\r\n") # Mail Versand mit Bild als Anhang ######################server = smtplib.SMTP("smtpSERVER:587")server.starttls()print "Logging in..."server.login(username,password)print "Logged in as "+username+"."server.sendmail(From, [To], Body, msg.as_string())server.quit()print "Email wurde gesendet."# Test auf Wasser ########################################## 0 for trocken# 1 for nass# Sensor liegt auf Pin 18 def RCtime (RCpin): reading = 0 GPIO.setmode(GPIO.BCM) GPIO.setup(RCpin, GPIO.OUT) GPIO.output(RCpin, GPIO.LOW)time.sleep(1) GPIO.setup(RCpin, GPIO.IN) # loop 1 mswhile True: if (GPIO.input(RCpin) == GPIO.LOW): reading += 1 if reading >= 1000: return 0 if (GPIO.input(RCpin) != GPIO.LOW): return 1print "In Bereitschaft..."while True: time.sleep(1)# loop if longer wet ####################### water_count = 0 if RCtime(18) == 1: print "Sensor ist nass"# Mailversand erneut, wenn immer noch nass ("wet") ####### while True: time.sleep(1) if RCtime(18) == 1: print "Sensor ist immer noch nass."if water_count == 5: email("wet") water_count = water_count + 1 continue if RCtime(18) == 0: print "Sensor ist wieder trocken"# Mailversand, wenn trocken ("dry") email("dry") print "Wassersensor wieder in Bereitschaft"[color=#000000][size=14][font="Calibri"] break
Thx im Vorhinein.[/font][/size][/color]
Automatisch zusammengefügt:
ACHTUNG - bitte beachten!
Im Code sind am Anfang und Ende komischerweise Steuerzeichen für die Farbe drin - die gehören natürlich nicht zu meinem Code. Keine Ahnung, wie die reingekommen sind.