#!/usr/bin/python2 #skript kterej pri detekci pohybu pomoci PIR rozsviti IR LED #pak udela fotku webkamerou a spocita jak je tmava a pripadne zas zhasne #kdyz je moc tmava, tak ji zas smaze #David Pleskot, 2016 import time import RPi.GPIO as GPIO from datetime import datetime import imgproc import os from PIL import Image from PIL import ImageStat filename='/home/pi/pir.log' limit=1000 #maximalni pocet radku logu def loguj(co): if not os.path.isfile(filename): f=open(filename,'a') f.close() f=open(filename,'r+') old=f.read() #prectu vsechno f.seek(0) #prejedu na zacatek f.write(co+'\n'+old) f.close() return def dennoc(obr): im=Image.open(obr).convert('L') stat=ImageStat.Stat(im) #print(stat.mean[0]) return(stat.mean[0]) cesta="/home/pi/zaznamy/" GPIO.setwarnings(False) mode=GPIO.getmode() if mode==None: GPIO.setmode(GPIO.BOARD) mode=GPIO.BOARD if mode==GPIO.BOARD: cislo_portu_pir=16 cislo_portu_irled=12 else: cislo_portu_pir=23 cislo_portu_irled=18 GPIO.setup(cislo_portu_irled, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(cislo_portu_pir, GPIO.IN) loguj("%s skript pir.py spusten"% str(datetime.now())) while True: if GPIO.input(cislo_portu_pir)==GPIO.HIGH: GPIO.output(cislo_portu_irled, GPIO.HIGH) #zapnu reflektor if os.path.isfile('/home/pi/ramdisk/alarm_pir'): #prip. vyhlasim alarm s=open('/home/pi/ramdisk/alarm','w') s.close() soubor=cesta+str(datetime.now())+'.jpg' soubor=soubor.replace(' ', '_') prikaz='fswebcam -d /dev/video1 --skip 4 --rotate 180 '+soubor+' >/dev/null 2>&1' #print(prikaz) os.system(prikaz) #udelam fotku if dennoc(soubor)>=30: #svetla je dost GPIO.output(cislo_portu_irled, GPIO.LOW) #vypnu reflektor loguj("%s pohyb den"%str(datetime.now())) time.sleep(3) else: #je tma try: os.remove(soubor) #fotka nanic, mazu except OSError: print("nelze vymazat soubor %s" % soubor) loguj("%s pohyb noc"%str(datetime.now())) time.sleep(60) #pockam, motion udela obrazky z NoIR cam. GPIO.output(cislo_portu_irled, GPIO.LOW) #vypnu reflektor fi=open(filename,"r") #kdyz je log moc dlouhej radku=sum(1 for line in fi) if radku>limit: fi.seek(0) lines=fi.readlines() fi.close() for i in range(radku-limit): del lines[-1] fi=open(filename,"w") fi.writelines(lines) fi.close()