Już jakiś czas temu opisywałem bezpieczny dom z MotionEYE. Jednak często Raspberrypi już pełni jakąś funkcję i dodać kolejną spokojnie można. Motywację do tego projektu zaczerpnąłem z samego Motion gdzie detekcja ruchu odbywa się na podstawie analizy obrazy, który działa bez czujnika PIR. W niektórych przypadkach wykrywanie ruchu czujnikiem PIR i przechwytywanie obrazów byłoby bardziej skuteczne.
Skrypt wykonuje zdjęcie po wykryciu ruchu za pomocą kamery podłączonej do RaspberryPi i następnie wysyła je jako załącznik do wiadomości e-mail z alertem. Tu aby jak najbardziej uprościć całość użyłem Pythona. Potrzebować w tym przypadku będziesz konta mail z którego będzie nadawana wiadomość, ja używam kont na swoim serwerze (domyślny port 587), jednak sprawdzałem też na gmail i działało również prawidłowo. Nic nie szkodzi abyś po testował z innymi serwerami pocztowymi. Jak podłączyć kamerę do maliny, raczej nie trzeba opisywać. Co do samego czujnik PIR podłączamy do GPIO 21 lub innego wybranego przez siebie jednak jest to jedynie GPIO które u mnie pozostało wolne. Pin zasilania 5V łączymy z pinem 5V w raspberrypi GND z GND.
Zmiany w kodzie:
W programie, należy zmienić poniższe linie na własne dane. Dane które będą nam potrzebne to:
- email z którego będziemy wysyłać powiadomienia,
- dane serwera pocztowego z którego będziemy wysyłać powiadomienia, czyli adres jak i port,
- i na sam koniec nasz adres na który chcemy otrzymywać powiadomienia.
Co do samych linii gdzie szukać to odszukujemy linię ~11
odb = 'email odbiorcy'
nad = 'adres nadawcy'
oraz linię ~39
server = smtplib.SMTP('ADRES-SERWERA-POCZTOWEGO',587)
server.login(user = 'LOGIN',password='HASŁO')
Kod programu .py
from picamera import PiCamera
from time import sleep
import smtplib
import time
from datetime import datetime
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
import RPi.GPIO as GPIO
import time
#dane nadawcy i odbiorcy wiadomości
odb = 'EMAIL-ODBIORCY'
nad = 'EMAIL-NADAWCY'
Subject='Alarm wykryto ruch!!'
GPIO.setmode(GPIO.BCM)
#rozdzielczość zdjęcia
P=PiCamera()
P.resolution= (1920,1080)
P.start_preview()
#ustawienia GPIO połączenia z czujnikiem pir
GPIO.setup(21, GPIO.IN)
while True:
if GPIO.input(21):
print("Ruch...")
time.sleep(2)
P.capture('alarm_foto.jpg')
time.sleep(10)
subject='Alarm wykryto ruch!!'
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = nad
msg['To'] = odb
fp= open('alarm_foto.jpg','rb')
img = MIMEImage(fp.read())
fp.close()
msg.attach(img)
#konfiguracja SMTP
server = smtplib.SMTP('ADRES-SERWERA-POCZTOWEGO',587)
server.starttls()
server.login(user = 'LOGIN',password='HASŁO')
server.send_message(msg)
server.quit()
Na totalnego leniwca, możecie też pobrać gotowy plik bezpośrednio z Tranzystor.pl za pomocą polecenie
wget https://www.tranzystor.pl/pliki/raspberry/alarm_pir_raspberrypi.py
Po pobraniu pliku oczywiście nie zapomnijcie go zmodyfikować wg. wytycznych powyżej, aby komunikował się właściwie z waszym serwerem pocztowym.