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")

print

 

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 

print "eingeschaltet!"

print

 

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

print "ausgeschaltet!"

print

 

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.