Hallo bin neu hier. Habe gerade Phyton für mich entdeckt und versuche mich daran. Habe gerade einen Versuch
mit einem Beispielprogramm gestartet und komme da irendwie nicht weiter :
#!/usr/bin/python
# coding=utf-8
import time,sys
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.Board)
GPIO.setup(7,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
def motion(pin):
print ("Achtung!Bewegung erkannt!")
return
GPIO.add_event_detect(7, GPIO.RISINGI)
GPIO.add_event_callback(7, motion)
# mit minimaler CPU-Auslastung auf das Prog -End STRG-C
try:
while True:
time.sleep(0.5
# except KeyboardInterrupt :
# GPIO.cleanup()
sys.exit()
Die Fehlermeldung lautet :
Traceback (most recent call last):
File "/home/pi/Bewegungsmelder.py", line 23
sys.exit()
^
SyntaxError: invalid syntax
Es sollte doch eigentlich die Meldung kommen
Achtung!Bewegung erkannt!
Wo liegt hier der Fehler ?
mfg Klaus
Raspberry PI 4 2GB /Bewegungsmelder Inrarot
Zähl mal Deine Klammern.
Das sys.exit ist eh überflüssig. Warum hast Du cleanup auskommentiert? Das solle übrigens immer aufgerufen werden, nicht nur, wenn das Programm per STRG+C abgebrochen wird.
Python2 solltest du nicht mehr benutzen.
Das sys.exit ist eh überflüssig. Warum hast Du cleanup auskommentiert? Das solle übrigens immer aufgerufen werden, nicht nur, wenn das Programm per STRG+C abgebrochen wird.
Python2 solltest du nicht mehr benutzen.
- __blackjack__
- User
- Beiträge: 13938
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Kla-Sur: Weitere Anmerkungen:
``as`` beim Importieren ist zum umbenennen gedacht, `GPIO` wird aber gar nicht umbenannt.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
`GPIO` kennt weder `Board` noch `RISINGI` als Attribute. Beim ersten ist wahrscheinlich `BOARD` gemeint und beim zweiten das `I` am Ende zu viel.
Die Rückruffunktion kann man auch gleich bei `add_event_detect()` übergeben.
Der Kommentar mit minimaler CPU-Auslastung ist falsch, denn auch die ``while``-Schleife mit dem `sleep()` verbraucht CPU-Zeit. Und es geht mit weniger CPU-Zeit: `signal.pause()`.
Das ``return`` in der `motion()`-Funktion ist überflüssig.
``as`` beim Importieren ist zum umbenennen gedacht, `GPIO` wird aber gar nicht umbenannt.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
`GPIO` kennt weder `Board` noch `RISINGI` als Attribute. Beim ersten ist wahrscheinlich `BOARD` gemeint und beim zweiten das `I` am Ende zu viel.
Die Rückruffunktion kann man auch gleich bei `add_event_detect()` übergeben.
Der Kommentar mit minimaler CPU-Auslastung ist falsch, denn auch die ``while``-Schleife mit dem `sleep()` verbraucht CPU-Zeit. Und es geht mit weniger CPU-Zeit: `signal.pause()`.
Das ``return`` in der `motion()`-Funktion ist überflüssig.
Code: Alles auswählen
#!/usr/bin/env python3
from signal import pause
from RPi import GPIO
def on_motion(_pin):
print("Achtung! Bewegung erkannt!")
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.add_event_detect(7, GPIO.RISING, on_motion)
#
# Mit minimaler CPU-Auslastung auf das Programmende durch STRG-C warten.
#
try:
pause()
except KeyboardInterrupt:
pass
finally:
GPIO.cleanup()
if __name__ == "__main__":
main()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Mit gpiozero (https://gpiozero.readthedocs.io/en/stab ... ion-sensor) statt RPi.GPIO wäre das ganze übrigens noch einfacher umzusetzen. 

Alles was wir sind ist Sand im Wind Hoschi.
Hallo habe wieder gebastelt und jetzt komme ich nicht weiter.
Da brauche ich mal eure Hilfe!
import RPi.GPIO as gpio
gpio.setmode(gpio.BOARD)
gpio.setup(11, gpio.IN )
status = gpio.input(11)
gpio.wait_for_edge(11,gpio.FALLING)
print(status)
gpio.cleanup(11)
Jetzt möchte ich bei Wechsel eine Mail versenden
import smtplib, sys
from email.mime.text import MIMEText
from email.header import Header
frm = "absender"
to = "empfänger"
subj = "Betr"
msg = "Meldung"
try:
mime = MIMEText(msg, "plain", "utf-8")
mime["From"] = frm
mime["to"] = to
mime["Subject"] = Header(subj, "utf-8")
smtp = smtplib.smtp("mailserver")
smtp.starttls()
smtp.login("Anmeldung")
smtp.sendmail(frm, [to], mime.as_string())
smtp.quit()
except:
print("Beim Mail Versandt in ein Fehler aufgetreten", sys.exc_info())
Die einzelnen Scripte klappen schon , aber wie kann ich die zwei zusammenstellen !!
Dank schon jetzt.
Klaus
Da brauche ich mal eure Hilfe!
import RPi.GPIO as gpio
gpio.setmode(gpio.BOARD)
gpio.setup(11, gpio.IN )
status = gpio.input(11)
gpio.wait_for_edge(11,gpio.FALLING)
print(status)
gpio.cleanup(11)
Jetzt möchte ich bei Wechsel eine Mail versenden
import smtplib, sys
from email.mime.text import MIMEText
from email.header import Header
frm = "absender"
to = "empfänger"
subj = "Betr"
msg = "Meldung"
try:
mime = MIMEText(msg, "plain", "utf-8")
mime["From"] = frm
mime["to"] = to
mime["Subject"] = Header(subj, "utf-8")
smtp = smtplib.smtp("mailserver")
smtp.starttls()
smtp.login("Anmeldung")
smtp.sendmail(frm, [to], mime.as_string())
smtp.quit()
except:
print("Beim Mail Versandt in ein Fehler aufgetreten", sys.exc_info())
Die einzelnen Scripte klappen schon , aber wie kann ich die zwei zusammenstellen !!
Dank schon jetzt.
Klaus
Einen schönen Gruß aus dem Münsterland sendet
dir Klaus
dir Klaus
Du willst ein callback verwenden und die Mail-Geschichte in eine Funktion schreiben. https://sourceforge.net/p/raspberry-gpi ... ki/Inputs/ (wenn es unbedingt RPi.GPIO sein muss)
Btw. Verwende bitte in Zukunft Codeblocks (</>), dann bleiben auch die Einrückungen erhalten.
Btw. Verwende bitte in Zukunft Codeblocks (</>), dann bleiben auch die Einrückungen erhalten.
Alles was wir sind ist Sand im Wind Hoschi.
Das meint er damit. Das Modul gpiozero wird heutzutage eher genutzt als RPi.GPIO.hyle hat geschrieben: ↑Mittwoch 17. Juni 2020, 17:03 Mit gpiozero (https://gpiozero.readthedocs.io/en/stab ... ion-sensor) statt RPi.GPIO wäre das ganze übrigens noch einfacher umzusetzen.![]()
- __blackjack__
- User
- Beiträge: 13938
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Kla-Sur: Das ist im Computerbereich eigentlich schon immer so gewesen. Sowohl die Technik als auch die Software entwickelt sich weiter. Und aus Fehlern lernt man. `gpiozero` ist in der Regel einfacher und trotzdem etwas ”mächtiger” als `RPi.GPIO`. Die haben da auf die Benutzer, insbesondere auch die Zielgruppe der Anfänger, geschaut, und was sie für die besser machen können.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware