Alarmsystem für den Fall der Bewusstlosigkeit nach Schlaganfall o.ä
Nicht schön, aber funktioniert.
Folgendes ist für Alleinlebende gedacht, um im Falle von Bewusstlosigkeit einen Alarm auszulösen mittels
1. Emails an Freunde
2. Sirene im Treppenhaus mittels WLAN-Steckdose DELOCK_11826.
Der Alarm soll ausgelöst werden, wenn morgens zwischen 7 und 8 Uhr das Badezimmer nicht(!) betreten wird. Der Bewegungsmelder sollte sich vor oder im Badezimmer befinden.
Gelöst habe ich das Problem mittels eines Raspberry Zero WH und eines Bewegungsmelders HC-SR501.
Datei pir.py:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import os
import pypoweroff
GPIO.setmode(GPIO.BCM)
PIR_PIN = 23
beweg = 0
n = 0
GPIO.setup(PIR_PIN, GPIO.IN)
def MOTION(PIR_PIN):
global beweg
os.system("echo 'Bewegung erkannt'")
beweg = 1
print "beweg=" + str(beweg)
print "Bereit"
os.system("date")
#ip von smartfone:
myip = "192.168.4.100"
if os.system("ping -c 1 -q {}".format(myip)) == 0:
GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=MOTION)
while beweg == 0:
time.sleep(60)
n = n + 1
print str(n) + ". Minute"
if n == 60:
break
print "beweg=" + str(beweg)
if beweg == 0:
import pymail
GPIO.cleanup()
print ("ende")
Erläuterung:
pypoweroff.py (s.u.) schaltet die Steckdose aus (ziemlich überflüssige Zeile)
Ich bin dann zu Hause, wenn das smartfone zu hause ist und im WLAN anpingbar ist. Damit das smartfone (samsung A3(2017)) anpingbar ist, wird um 6:59 Uhr ein stiller Alarm im smartfone eingestellt, es ist dann einige Minuten anpingbar. Die verstrichene Zeit wird zur Kontrolle angezeigt.
Datei pymail.py:
#!/usr/bin/python
import time
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import pypoweron
senderEmail = "kxxx@gmx.de"
empfangsEmail1 = "xxx@googlemail.com"
empfangsEmail2 = "xxx@yyyxx.de"
empfangsEmail3 = "yyyy@outlook.de"
msg = MIMEMultipart()
msg['From'] = senderEmail
msg['To'] = empfangsEmail1
#die nächsten beiden Zeilen sollten mit dem gewünschten Text versehen werden:
msg['Subject'] = "Hallo Test"
emailText = "Diese E-Mail kommt von deinem <b>Raspberry</b> Pi"
msg.attach(MIMEText(emailText, 'html'))
server = smtplib.SMTP('mail.gmx.net', 587) # Die Server Daten
server.starttls()
server.login(senderEmail, "xy!abc123") # Das Passwort
text = msg.as_string()
server.sendmail(senderEmail, empfangsEmail1, text)
time.sleep(5)
del msg
msg = MIMEMultipart()
msg.attach(MIMEText(emailText, 'html'))
msg['From'] = senderEmail
msg['To'] = empfangsEmail2
msg['Subject'] = "Hallo Test"
text = msg.as_string()
server.sendmail(senderEmail, empfangsEmail2, text)
time.sleep(5)
del msg
msg = MIMEMultipart()
msg.attach(MIMEText(emailText, 'html'))
msg['From'] = senderEmail
msg['To'] = empfangsEmail3
msg['Subject'] = "Hallo Test"
text = msg.as_string()
server.sendmail(senderEmail, empfangsEmail3, text)
server.quit()
print("mails gesendet")
Erläuterung:
pypoweron.py (s.u.) schaltet die Steckdose ein. Der Rest dürfte selbsterklärend sein. Falls man an mehr adressen senden will, sollte man eine andere Lösung wählen.
Datei pypoweron.py:
#!/usr/bin/python
import os
print "Bereit zum Einschalten"
os.system("/usr/bin/curl --request POST http://192.168.4.107/cm?cmnd=Power%20On")
print "eingeschaltet!"
Datei pypoweroff.py:
#!/usr/bin/python
import os
print "Bereit zum Ausschalten"
os.system("/usr/bin/curl --request POST http://192.168.4.107/cm?cmnd=Power%20Off")
print "ausgeschaltet!"
Erläuterung:
192.168.4.107 ist die IP der WLAN-Steckdose
der root-crontab-eintrag:
0 7 * * * /home/pi/pir.py > /home/pi/output.txt
Man beachte, dass in output.txt (im Unterschied zur Konsole) die Meldungen nicht cronologisch sind.
Man beachte weiterhin, dass in Python-Programmen nur ASCII-Zeichen benutzt werden dürfen (auch in Kommentaren !!), es sei denn man deklariert eine Art code-page.
Wer noch Strom sparen will, kann den Raspberry in der ungenutzten Zeit noch herunterfahren. Mit folgendem crontab-eintrag:
30 08 * * * /sbin/shutdown -h now.
Und danach um ca. 9 Uhr trennt eine Zeitschaltuhr die Stromzufuhr, die Zeitschaltuhr schaltet die Stromzufuhr und damit den RPi wieder um ca. 6:30 Uhr ein.
Das größte Problem war, dass der Bewegungsmelder zu Anfang nach spätestens 12 min eine Bewegung feststellte auch in einem dunklen unzugänglichen Zimmer. Eine minimale Änderung (Austausch eines 10 cm langen Kabels gegen ein 5 cm langes) bewirkte eine einwandfreie Funktion.
Ich habe einiges abgekupfert von:
https://tutorials-raspberrypi.de/raspberry-pi-bewegungsmelder-sensor-pir/
hier kann man auch die Verkabelung betrachten.