Commit c8dec792 authored by Kylian ou Nathan's avatar Kylian ou Nathan
Browse files
parents d00e9047 fd3484f2
import requests
import socket
import datetime
import RPi.GPIO as GPIO
import picamera
import time
import sys
#Récupération de l'ip de la raspberry
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
print("Votre ip est : " + ip + "\n")
except:
print("Connexion internet non trouvé !")
sys.exit(0) #quitte le programme si pas de connexion internet
#détection intrusion
buzzerPin = 11 #Pin correspond au buzzer
buttonPin = 12 #Pin correspondant au Button
biip = False #True pour activer l'alarme du buzzer, False pour la désactiver
camera = picamera.PiCamera()
#Fonction qui initialise les Pins
def setup():
print ('Sécurisation de la maison lancé')
GPIO.setmode(GPIO.BOARD) # Permet de gérer les Pins par leurs location physique
GPIO.setup(buzzerPin, GPIO.OUT) # Met le buzzerPin mode sur output
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)# Met le buttonPin mode sur input met à la tension max (3.3V)
#Fonction pour vérifier en continue l'état des capteurs
def loop():
while True:
if GPIO.input(buttonPin)==GPIO.LOW:
if biip == True :
GPIO.output(buzzerPin,GPIO.HIGH)
print ('Un capteur a été enclenché')
#envoyer une requete get au serveur web
adresse = "http://" + ip + "/api/" + ip + "/intrusion" #serveur théorique local, c'est la requete get à cette adresse qui seras récupérer par le serveur web en cas d'intrusion
adresse = "http://lockhome.nrocher.fr/api/" + ip + "/intrusion" #serveur d'un ami
res = requests.get(addresse) #envoi la requete et res prend la réponse
print("Requete envoyé au serveur")
print(res)
record() #on lance la fonction record
else :
GPIO.output(buzzerPin,GPIO.LOW)
#a effectuer en cas de fin de programme (Ctrl-C)
def destroy():
GPIO.output(buzzerPin, GPIO.LOW) # Met le Buzzer off
GPIO.cleanup() # Relache les ressources
#lance un l'enregistrement (appeler en cas d'intrusion)
def record():
today = datetime.datetime.today()
name = today.strftime("%H:%M:%S-%d-%m-%Y") #on met comme nom de fichier l'heure et la date de l'enregistrement (hh:mm:ss-JJ-MM-YY)
camera.start_recording("Record/" + name + ".h264") #début du record avec nom du fichier
print ("Enregistrement effectuer à : "+ name)
time.sleep(5) #temps du record
camera.stop_recording()
print ("Fin enregistrement")
if __name__ == '__main__': # Démarrage Programme principale (éxécute la boucle)
setup()
try:
loop()
except KeyboardInterrupt: # Arrèter le programme quand 'Ctrl+C' est pressé
destroy()
import io
import picamera
import socket
import logging
import socketserver
from threading import Condition
from http import server
#Récupération de l'ip de la raspberry
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
print("Votre ip est : " + ip + "\n")
except:
print("Connexion internet non trouvé")
#initialisation de la page a charger en html
#la résolution de l'image ce change ici ainsi que le titre ou meme tout autre information que vous voudriez ajouter sur la page
PAGE="""\
<html>
<head>
<title>Raspberry Pi - Surveillance Camera</title>
</head>
<body>
<center><h1>Raspberry Pi - Surveillance Camera</h1></center>
<center><img src="stream.mjpg" width="1080" height="720"></center>
</body>
</html>
"""
class StreamingOutput(object):
def __init__(self):
self.frame = None
self.buffer = io.BytesIO()
self.condition = Condition()
def write(self, buf):
if buf.startswith(b'\xff\xd8'):
# New frame, copy the existing buffer's content and notify all
# clients it's available
self.buffer.truncate()
with self.condition:
self.frame = self.buffer.getvalue()
self.condition.notify_all()
self.buffer.seek(0)
return self.buffer.write(buf)
class StreamingHandler(server.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/':
self.send_response(301)
self.send_header('Location', '/index.html')
self.end_headers()
elif self.path == '/index.html':
content = PAGE.encode('utf-8')
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.send_header('Content-Length', len(content))
self.end_headers()
self.wfile.write(content)
elif self.path == '/stream.mjpg':
self.send_response(200)
self.send_header('Age', 0)
self.send_header('Cache-Control', 'no-cache, private')
self.send_header('Pragma', 'no-cache')
self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
self.end_headers()
try:
while True:
with output.condition:
output.condition.wait()
frame = output.frame
self.wfile.write(b'--FRAME\r\n')
self.send_header('Content-Type', 'image/jpeg')
self.send_header('Content-Length', len(frame))
self.end_headers()
self.wfile.write(frame)
self.wfile.write(b'\r\n')
except Exception as e:
logging.warning(
'Removed streaming client %s: %s',
self.client_address, str(e))
else:
self.send_error(404)
self.end_headers()
class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer): #serveur de stream
allow_reuse_address = True
daemon_threads = True
with picamera.PiCamera(resolution='1080x720', framerate=30) as camera:
output = StreamingOutput()
camera.rotation = 0 #changer cette variable pour effectuer une rotation de l'image (en degrés)
camera.start_recording(output, format='mjpeg')
try:
print("Demarrage du stream")
address = ('', 8000) #port utilisé
server = StreamingServer(address, StreamingHandler)
server.serve_forever() #le lancer pour toujours
finally:
camera.stop_recording()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment