Forum

Einloggen | Registrieren | RSS  

raspberry pi und PIR (Computertechnik)

verfasst von luemar(R), 07.05.2017, 17:29 Uhr

» » Hallo Experten und bastelix,
» Das könnte man übrigens auch falsch verstehen :-P ;-)
»
» » schätze die eingehende Antwort, lerne auf diesem Forum mehr als in
» » Lehr-Texten und Tutorials.
» Das ist doch schon mal was :-) Aber das algorithmische denken musst du dir
» noch aneignen, vielleicht hilft es dir dabei wenn du mal ein einfaches
» Python-Script als Programmablaufplan/Flussdiagramm aufzeichnest um zu
» verstehen was der Rechner eigentlich mit deinen Befehlen anstellst. (
» https://de.wikipedia.org/wiki/Programmablaufplan ).
»
» » >>while True:
» » >>>time.sleep(8)
» Hier hast du wieder eine Endlosschleife deren einziger Inhalt es ist dein
» Programm für acht Sekunden schlafen zu legen ;-)
»
» Was ich bei der Gelegenheit mal loswerden muss: An Python stört mich
» extremst, dass Programmblöcke nur durch die Einrückung definiert werden.
» Das ist schei*e lesbar und fördert das einbauen logischer Fehler...
»
» So genug gemotzt ;-)
»
» » Mein PIR PI-ADA-189 verhält sich in verschiedenen Scripts erratisch d.h.
» es
» » gibt kein 1:1 Verhältnis
» Dein PIR wird nicht über dein Python-Programm gesteuert, wann der PIR den
» Data-Pin auf HIGH/LOW zieht ist über die Hardware definiert. Dein Script
» wertet die Pegeländerungen lediglich aus (um genau zu sein wann immer der
» Pin von LOW auf HIGH geht, aufgrund des Parameters gpio.RISING bei
» gpio.add_event_detect) und reagiert darauf entsprechend. Du musst also für
» die Wartezeiten die Eigenschaften des PIR berücksichtigen, z.B. dass er
» Bewegungen nur alle X Sekunden (das müsste sich über einen Poti einstellen
» lassen, aber nur bis zu einer gewissen Untergrenze)
»
» Dein Python-Script muss also selber entscheiden wann es auf den IRQ vom PIR
» reagiert und z.B. ne Mail verschickt oder den IRQ ignoriert.
»
» » Ich möchte 2 Dinge erreichen:
» Anders formuliert: Sendet der PIR einen IRQ wird eine Aktion ausgeführt,
» solange die Aktion das letzte mal vor PIR_DELAY Sekunden ausgeführt wurde.
» Danach werden alle PIR IRQs für PIR_IGNORE_TIME Sekunden ignoriert. Und
» dann beginnt das ganze wieder von vorn.
»
» Ich hab da mal was bei gist eingestellt (ist online besser lesbar als im
» Forum): https://gist.github.com/anonymous/5c25da72e1c24705d626c46a99a59b18
» Dein Foto-Machen und Mail-Verschicken Code sollte dann in Zeile 53
» aufgerufen werden, die restlichen prints sind Debug-Ausgaben. Ich hoffe in
» den Code-Kommentaren ist soweit alles erklärt. Könnte man vermutlich noch
» eleganter lösen, aber nicht nach 22 Uhr und halbwegs Anfänger-Verständlich
» ;-)
»
» » Wenn das mal funktioniert möchte ich neben dem Bild noch ein SMS
» erhalten
» » und mir einen remote access
» » einrichten.
» Divide and conquer ;-) beim remote access solltest dich aber schon etwas
» tiefer mit der Materie Netzwerksicherheit auskennen, sonst ist dein Pi
» möglicherweise bald aktives Mitglied in einem IoT-Botnetz...

Hallo bastelix,
habe mich mit Deinen Hinweisen und insbesondere mit dem auf https://gist.github.com/anonymous/5c25da72e1c24705d626c46a99a59b18 veröffentlichen
Script auseinander gesetzt .. toller Service !!

Vom remote Access sehe ich ab, habe weitere und gleichlautende Kommentare gelesen.

Glaubte mich am Ziel, werde jetzt aber einen Syntaxfehler einfach nicht los:

1. Ein einfaches Script, das bei jedem Ansprechen des PIR ein Foto macht und mir per E-Mail schickt
funktioniert problemlos:

#!/usr/bin/python3
import RPi.GPIO as gpio
import smtplib, sys, picamera, time
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

gpio.setmode(gpio.BOARD)
gpio.setup(23, gpio.IN)
def mein_callback(pin):
frm='meine E-Mail Adresse'
to='meine E-Mail Adresse'
smtpHost='smtpauth.bluewin.ch'
smtpPort=587
smtpUser='mein Name'
smtpPassword='mein Passwort'
subj='von Raspberry2'
msg='Meldung von PIR 2'
fn='foto1.jpg'
camera = picamera.PiCamera()
camera.capture(fn, resize=(640,480))
camera.close()

mime=MIMEMultipart()
mime['From']=frm
mime['To']=to
mime['Subject']=Header(subj, 'utf-8')
mime.attach(MIMEText(msg, 'plain', 'utf-8'))

f = open(fn, 'rb')
img = MIMEImage(f.read())
f.close()
mime.attach(img)
smtp=smtplib.SMTP(smtpHost, smtpPort)
smtp.login(smtpUser, smtpPassword)
smtp.sendmail(frm, to, mime.as_string())
smtp.quit()
try:
gpio.add_event_detect(23, gpio.RISING, callback = mein_callback)
while True:
time.sleep(10)
except KeyboardInterrupt:
print('ENDE')

2. Dein auf https://gist.github.com/anonymous/5c25da72e1c24705d626c46a99a59b18 veröffentlichtes
Script funktioniert ebenfalls bestens.

3. Hingegen wenn ich beide Scripts zusammenfüge:

#!/usr/bin/python3
#-*- coding: utf-8 -*-

import sys, time, smtplib, picamera
import RPi.GPIO as gpio
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

gpio.setmode(gpio.BOARD)
gpio.setup(23, gpio.IN)

MAX_COUNT = 3
PIR_DELAY = 10
PIR_IGNORE_TIME = 60

current_count = 0
last_count= 0
last_time = 0
DEBUG = True

def mein_callback(pin):
global current_count
current_count += 1
if DEBUG:
print('DEBUG: PIR2 IRQ um %s zum %sten mal' % (time.strftime('%d.%m.%Y %H:%M:%S')

gpio.add_event_detect(23, gpio.RISING, callmack = mein_callback)
if DEBUG:
print('DEBUG: PIR2 wartet auf IQR')

try:
while True:
if current_count > last_count and last_count < MAX_COUNT and time.time(last_time + PIR_DELAY)
print ('PIR2 wurde %s mal ausgeloest' % current_count)

frm = 'meine E-Mail Adresse'
to = 'meine E-Mail Adresse'
smtpHost = 'smtpauth.bluewin.ch'
smtpPort = 587
smtpUser = 'mein Name'
smtpPassword = 'mein Passwort'
subj = 'von Raspberry2'
msg = 'Meldung von PIR2'
fn = 'foto1.jpg'
camera = picamera.PiCamera()
camera.capture(fn, resize(640, 480))
camera.close()
mime = MIMEMultipart()
mime['From'] = frm
mime['To'] = to
mime['Subject'] = Header(subj, 'utf-8')
mime.attach(MIMEText(msg, 'plain', 'utf-8')

f = open(fn, 'rb')
img = MIMEImage(f.read())
f.close()
mime.attach(img)
smtp = smtplib.SMTP(smtpHost, smtpPort)
smtp.login(smtpUser, smtpPassword)
smtp.sendmail(frm, to, mime.as_string())
smtp.quit()

last_count = current_count
if last_count >= MAX_COUNT:
if DEBUG:
print('DEBUG: Beginne Ruhezustand fuer %s Sekunden' % PIR_IGNOR$
time.sleep(PIR_IGNORE_TIME)
if DEBUG:
print('Ende Ruhezustand, %s PIR2 IRQs registriert' % (current_c$
last_count = 0
current_count = 0
time.sleep(2)
except KeyboardInterrupt:
gpio.cleanup()
print('ENDE PIR_V1.py)

bekomme ich ewig einen Syntaxfehler:
File "./PIR_V1.py", line 56
f = open(fn, 'rb')
^
SyntaxError: invalid Syntax

Habe alles x-mal überprüft, neu geschrieben etc. und finde den Fehler einfach nicht obwohl die beiden
Code Blocks für E-Mail und Foto identisch sind.

Vielen Dank im voraus, luemar.



Gesamter Thread:

raspberry pi und PIR - luemar(R), 17.04.2017, 20:30
raspberry pi und PIR - Gast, 17.04.2017, 20:48
raspberry pi und PIR - luemar(R), 17.04.2017, 20:56
raspberry pi und PIR - Gast, 17.04.2017, 21:34
raspberry pi und PIR - luemar(R), 18.04.2017, 11:39
raspberry pi und PIR - finni(R), 18.04.2017, 14:12
raspberry pi und PIR - luemar(R), 18.04.2017, 17:17
raspberry pi und PIR - bastelix(R), 18.04.2017, 12:06
raspberry pi und PIR - bastelix(R), 18.04.2017, 11:56
raspberry pi und PIR - luemar(R), 20.04.2017, 12:04
raspberry pi und PIR - bastelix(R), 22.04.2017, 22:46
raspberry pi und PIR - luemar(R), 27.04.2017, 18:56
raspberry pi und PIR - bastelix(R), 27.04.2017, 23:47
raspberry pi und PIR - luemar(R), 07.05.2017, 17:29
raspberry pi und PIR - luemar(R), 07.05.2017, 17:30
raspberry pi und PIR - bastelix(R), 07.05.2017, 19:47
raspberry pi und PIR - luemar(R), 08.05.2017, 22:03
raspberry pi und PIR - ELEKTRONIK- MODELLBAU- FREUNDE, 19.04.2017, 18:10