Seite 1 von 1

Dateiname speichern oder auslesen[?]

Verfasst: Mittwoch 22. Januar 2014, 19:53
von lackschuh
Hallo

Hab einen RPI mit Kamera und PIR. Es soll nun ein Foto aufgenommen werden und anschliessend das aktuelle Foto per Mail versandt werden:

Code: Alles auswählen

pfad_bilder = '/home/pi/camera/bilder/'

def bild_aufnehmen():
    global bild # eventuell für die Funktion send_mail()
    with picamera.PiCamera() as camera:
        camera.resolution = (1024, 768)
        camera.start_preview()
        # Camera warm-up time
        time.sleep(2)
        camera.capture(pfad_bilder + '%s.jpg' % time.strftime("%Y-%M-%H-%M-%S", time.gmtime()))
        print 'Bild aufgenommen'

def send_mail(to, subject, text, files=[]):
    ....

def main():
    bild_aufnehmen()
    send_mail(["meine@mail.com"], u"PI Cam augelöst!", "Bild ist im Anhang", bild])
Das Aufnehmen etc geht alles. Auch das Versenden der Mails, aber nur wenn ich den Dateipfad manuell eintrage zB /home/pi/Python/Camera/bilder/2014-46-18-46-42.jpg.

Meine Frage ist nun, wie ich am einfachsten den Dateinamen des gemachten Bildes der Funktion send_mail() übergebe. Ich habe mal mit dem Modul glob.glob mit eine Liste aus den Elementen des Ordners bilder generiert und dann halt das letzte Element [-1] genommen. Dies geht auch, aber ich denke, dass ist der falsche Weg. Irgendwie steh ich gerade auch dem Schlauch :roll:

Re: Dateiname speichern oder auslesen[?]

Verfasst: Mittwoch 22. Januar 2014, 19:57
von cofi
Lass `bild_aufnehmen` den Pfad zurueckgeben und uebergib ihn als Parameter an `send_mail`. `global bild` solltest du dagegen schnell wieder loeschen.

Re: Dateiname speichern oder auslesen[?]

Verfasst: Donnerstag 23. Januar 2014, 12:54
von lackschuh
cofi hat geschrieben:Lass `bild_aufnehmen` den Pfad zurueckgeben und uebergib ihn als Parameter an `send_mail`. `global bild` solltest du dagegen schnell wieder loeschen.
Hallo

Verzeih mir meine Dämlichkeit, aber wenn ich mit 'global bild' arbeite, dann geht alles.

Code: Alles auswählen

def bild_aufnehmen():
    global blid
    with picamera.PiCamera() as camera:
        camera.resolution = (1024, 768)
        camera.start_preview()
        # Camera warm-up time
        time.sleep(2)
        blid = os.path.join(pfad_bilder, '%s.jpg' % time.strftime("%Y-%M-%H-%M-%S", time.gmtime()))
        camera.capture(blid)
        #return bild

def main():
    bild_aufnehmen()
    send_mail( ["my@mail.com"],
                     u"PI Cam augelöst!",
                     "Bild ist im Anhang",
                      [bild])
Ich hab schon paar mal hier gelesen, dass man die Finger von globalen Variablen lassen soll, aber wie kriege ich sonst den Wert von 'bild' in die main-Funktion?

So ungefähr?: :K

Code: Alles auswählen

def bild_aufnehmen():
    ....
    ....
    return bild

bild = bild_aufnehmen()
print bild

Re: Dateiname speichern oder auslesen[?]

Verfasst: Donnerstag 23. Januar 2014, 12:56
von Darii
Ja genau so, was funktioniert denn nicht (verschrieben blid vs bild)?