Showing
5 changed files
with
116 additions
and
10 deletions
| 1 | from django.db import models | 1 | from django.db import models |
| 2 | from django.conf import settings | 2 | from django.conf import settings |
| 3 | from django.utils import timezone | 3 | from django.utils import timezone |
| 4 | +from django.contrib.auth.models import User | ||
| 4 | 5 | ||
| 5 | # Create your models here. | 6 | # Create your models here. |
| 6 | class Door(models.Model) : | 7 | class Door(models.Model) : |
| ... | @@ -31,4 +32,4 @@ class Record(models.Model) : | ... | @@ -31,4 +32,4 @@ class Record(models.Model) : |
| 31 | 32 | ||
| 32 | class AddDevice(models.Model) : | 33 | class AddDevice(models.Model) : |
| 33 | id = models.IntegerField(primary_key = True) | 34 | id = models.IntegerField(primary_key = True) |
| 34 | - add = models.BooleanField(default = False) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 35 | + state = models.BooleanField(default = False) | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -10,12 +10,12 @@ django.setup() | ... | @@ -10,12 +10,12 @@ django.setup() |
| 10 | from django.core import serializers | 10 | from django.core import serializers |
| 11 | from api.models import Video, Record | 11 | from api.models import Video, Record |
| 12 | from api.serializers import VideoSerializer, RecordSerializer | 12 | from api.serializers import VideoSerializer, RecordSerializer |
| 13 | -''' | 13 | + |
| 14 | from boto3.session import Session | 14 | from boto3.session import Session |
| 15 | from src.settings import AWS_REGION, S3_ACCESS_URL, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME | 15 | from src.settings import AWS_REGION, S3_ACCESS_URL, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME |
| 16 | import RPi.GPIO as GPIO | 16 | import RPi.GPIO as GPIO |
| 17 | from picamera import PiCamera | 17 | from picamera import PiCamera |
| 18 | -''' | 18 | + |
| 19 | 19 | ||
| 20 | def record() : | 20 | def record() : |
| 21 | path = '/home/pi/recorded' # save path | 21 | path = '/home/pi/recorded' # save path |
| ... | @@ -61,7 +61,6 @@ def record() : | ... | @@ -61,7 +61,6 @@ def record() : |
| 61 | vid_time = time.strftime("%M:%S", time.gmtime(time.time()-start_time)) | 61 | vid_time = time.strftime("%M:%S", time.gmtime(time.time()-start_time)) |
| 62 | 62 | ||
| 63 | # s3 upload | 63 | # s3 upload |
| 64 | - ''' | ||
| 65 | s3 = boto3.client('s3', region_name = 'ap-northeast-2') | 64 | s3 = boto3.client('s3', region_name = 'ap-northeast-2') |
| 66 | s3.upload_file(Filename = vid_path, Bucket = S3_STORAGE_BUCKET_NAME, Key = vid_name) | 65 | s3.upload_file(Filename = vid_path, Bucket = S3_STORAGE_BUCKET_NAME, Key = vid_name) |
| 67 | s3.upload_file(Filename = thumbnail_path, Bucket = S3_STORAGE_BUCKET_NAME, Key = vid_name + '_thumb') | 66 | s3.upload_file(Filename = thumbnail_path, Bucket = S3_STORAGE_BUCKET_NAME, Key = vid_name + '_thumb') |
| ... | @@ -73,7 +72,6 @@ def record() : | ... | @@ -73,7 +72,6 @@ def record() : |
| 73 | uploadVideo['thumb'] = S3_ACCESS_URL + vid_name + '_thumb' | 72 | uploadVideo['thumb'] = S3_ACCESS_URL + vid_name + '_thumb' |
| 74 | serializer = VideoSerializer(data = uploadVideo) | 73 | serializer = VideoSerializer(data = uploadVideo) |
| 75 | serializer.save() | 74 | serializer.save() |
| 76 | - ''' | ||
| 77 | print(vid_path, "upload success") | 75 | print(vid_path, "upload success") |
| 78 | os.remove(vid_path) | 76 | os.remove(vid_path) |
| 79 | else: | 77 | else: | ... | ... |
| ... | @@ -5,6 +5,7 @@ from django.http import HttpResponse | ... | @@ -5,6 +5,7 @@ from django.http import HttpResponse |
| 5 | from django.core import serializers | 5 | from django.core import serializers |
| 6 | from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist | 6 | from django.core.exceptions import FieldDoesNotExist, ObjectDoesNotExist |
| 7 | from django.shortcuts import render | 7 | from django.shortcuts import render |
| 8 | +from django.contrib.auth.models import User | ||
| 8 | 9 | ||
| 9 | from api.videorecord import record | 10 | from api.videorecord import record |
| 10 | from api.models import Video, Device, RemoteHistory, Lock, Record, Door, AddDevice | 11 | from api.models import Video, Device, RemoteHistory, Lock, Record, Door, AddDevice |
| ... | @@ -15,19 +16,22 @@ from rest_framework import status | ... | @@ -15,19 +16,22 @@ from rest_framework import status |
| 15 | from rest_framework.views import APIView | 16 | from rest_framework.views import APIView |
| 16 | from rest_framework.request import Request | 17 | from rest_framework.request import Request |
| 17 | from rest_framework.response import Response | 18 | from rest_framework.response import Response |
| 18 | -""" | 19 | +from rest_framework.authtoken.models import Token |
| 20 | + | ||
| 19 | from boto3.session import Session | 21 | from boto3.session import Session |
| 20 | from src.settings import AWS_REGION | 22 | from src.settings import AWS_REGION |
| 21 | from src.settings import S3_ACCESS_URL | 23 | from src.settings import S3_ACCESS_URL |
| 22 | from src.settings import S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME | 24 | from src.settings import S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME |
| 23 | -""" | 25 | + |
| 24 | import time | 26 | import time |
| 25 | from datetime import datetime, timedelta | 27 | from datetime import datetime, timedelta |
| 26 | import json | 28 | import json |
| 29 | +import uuid | ||
| 27 | # Create your views here. | 30 | # Create your views here. |
| 28 | 31 | ||
| 29 | #로그인 및 토큰 반환 | 32 | #로그인 및 토큰 반환 |
| 30 | class Login(APIView) : | 33 | class Login(APIView) : |
| 34 | + | ||
| 31 | def get(self, request, format = None) : # request query에 door_id 포함되어있음 : api/auth?door_id=12345 | 35 | def get(self, request, format = None) : # request query에 door_id 포함되어있음 : api/auth?door_id=12345 |
| 32 | try : | 36 | try : |
| 33 | request_id = request.GET.get('door_id', None) | 37 | request_id = request.GET.get('door_id', None) |
| ... | @@ -35,9 +39,13 @@ class Login(APIView) : | ... | @@ -35,9 +39,13 @@ class Login(APIView) : |
| 35 | raise FieldDoesNotExist | 39 | raise FieldDoesNotExist |
| 36 | queryset = Door.objects.filter(door_id = request_id) # door_id 유효성 검색 | 40 | queryset = Door.objects.filter(door_id = request_id) # door_id 유효성 검색 |
| 37 | if queryset.exists() :# 유효할 때 | 41 | if queryset.exists() :# 유효할 때 |
| 42 | + userid = uuid.uuid4() | ||
| 43 | + pw = uuid.uuid4() | ||
| 44 | + user = User.objects.create_user(username=str(userid), password=str(pw)) | ||
| 45 | + token = Token.objects.create(user=user) | ||
| 38 | res = { | 46 | res = { |
| 39 | 'is_available' : True, | 47 | 'is_available' : True, |
| 40 | - 'access_token' : '토큰' # 토큰 도입 후 수정 필요 | 48 | + 'access_token' : token.key |
| 41 | } | 49 | } |
| 42 | else : | 50 | else : |
| 43 | res = { | 51 | res = { |
| ... | @@ -52,6 +60,18 @@ class Login(APIView) : | ... | @@ -52,6 +60,18 @@ class Login(APIView) : |
| 52 | 'date' : datetime.now() | 60 | 'date' : datetime.now() |
| 53 | }, status = status.HTTP_400_BAD_REQUEST) | 61 | }, status = status.HTTP_400_BAD_REQUEST) |
| 54 | 62 | ||
| 63 | + | ||
| 64 | + | ||
| 65 | + | ||
| 66 | +''' | ||
| 67 | + def post(self, request, format = None) : | ||
| 68 | + queryset = Door.objects.create(door_id = 12345) | ||
| 69 | + return Response({ | ||
| 70 | + 'msg' : 'doorid값 삽입 완료', | ||
| 71 | + }) | ||
| 72 | +''' | ||
| 73 | + | ||
| 74 | + | ||
| 55 | #기기 관련 api | 75 | #기기 관련 api |
| 56 | class Devices(APIView) : | 76 | class Devices(APIView) : |
| 57 | # 기기 목록 조회 | 77 | # 기기 목록 조회 | ... | ... |
| ... | @@ -41,6 +41,7 @@ INSTALLED_APPS = [ | ... | @@ -41,6 +41,7 @@ INSTALLED_APPS = [ |
| 41 | 'api', | 41 | 'api', |
| 42 | 'rest_framework', | 42 | 'rest_framework', |
| 43 | 'corsheaders', | 43 | 'corsheaders', |
| 44 | + 'rest_framework.authtoken', | ||
| 44 | ] | 45 | ] |
| 45 | 46 | ||
| 46 | MIDDLEWARE = [ | 47 | MIDDLEWARE = [ |
| ... | @@ -123,7 +124,7 @@ USE_TZ = True | ... | @@ -123,7 +124,7 @@ USE_TZ = True |
| 123 | # https://docs.djangoproject.com/en/3.1/howto/static-files/ | 124 | # https://docs.djangoproject.com/en/3.1/howto/static-files/ |
| 124 | 125 | ||
| 125 | STATIC_URL = '/static/' | 126 | STATIC_URL = '/static/' |
| 126 | -""" | 127 | + |
| 127 | AWS_REGION = 'ap-northeast-2' | 128 | AWS_REGION = 'ap-northeast-2' |
| 128 | AWS_SETTINGS = os.path.join(BASE_DIR, '.aws_key.json') | 129 | AWS_SETTINGS = os.path.join(BASE_DIR, '.aws_key.json') |
| 129 | awskey = json.loads(open(AWS_SETTINGS).read()) | 130 | awskey = json.loads(open(AWS_SETTINGS).read()) |
| ... | @@ -132,4 +133,3 @@ S3_ACCESS_KEY_ID = awskey['aws']['access_key_id'] | ... | @@ -132,4 +133,3 @@ S3_ACCESS_KEY_ID = awskey['aws']['access_key_id'] |
| 132 | S3_SECRET_ACCESS_KEY = awskey['aws']['secret_access_key'] | 133 | S3_SECRET_ACCESS_KEY = awskey['aws']['secret_access_key'] |
| 133 | S3_STORAGE_BUCKET_NAME = awskey['aws']['s3_bucket_name'] | 134 | S3_STORAGE_BUCKET_NAME = awskey['aws']['s3_bucket_name'] |
| 134 | S3_ACCESS_URL = awskey['aws']['s3_access_url'] | 135 | S3_ACCESS_URL = awskey['aws']['s3_access_url'] |
| 135 | -""" | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
videorecord.py
0 → 100644
| 1 | +import os | ||
| 2 | +import boto3 | ||
| 3 | +import botocore | ||
| 4 | +import time | ||
| 5 | +import datetime | ||
| 6 | +import django | ||
| 7 | + | ||
| 8 | +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings') | ||
| 9 | +django.setup() | ||
| 10 | +from django.core import serializers | ||
| 11 | +from api.models import Video, Record | ||
| 12 | +from api.serializers import VideoSerializer, RecordSerializer | ||
| 13 | +''' | ||
| 14 | +from boto3.session import Session | ||
| 15 | +from src.settings import AWS_REGION, S3_ACCESS_URL, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_STORAGE_BUCKET_NAME | ||
| 16 | +import RPi.GPIO as GPIO | ||
| 17 | +from picamera import PiCamera | ||
| 18 | +''' | ||
| 19 | + | ||
| 20 | +def record() : | ||
| 21 | + path = '/home/pi/recorded' # save path | ||
| 22 | + | ||
| 23 | + target = Record.objects.get(id = 1) | ||
| 24 | + serializer = RecordSerializer(target, many = False) | ||
| 25 | + state = serializer.data['recording'] | ||
| 26 | + #''' | ||
| 27 | + # rpi setting | ||
| 28 | + GPIO.setmode(GPIO.BCM) | ||
| 29 | + pir_pin = 7 | ||
| 30 | + GPIO.setup(pir_pin, GPIO.IN) | ||
| 31 | + camera = PiCamera() | ||
| 32 | + #''' | ||
| 33 | + | ||
| 34 | + try: | ||
| 35 | + while state : | ||
| 36 | + target = Record.objects.get(id = 1) | ||
| 37 | + serializer = RecordSerializer(target, many = False) | ||
| 38 | + state = serializer.data['recording'] | ||
| 39 | + | ||
| 40 | + if GPIO.input(pir_pin): # motion detected | ||
| 41 | + # take a video | ||
| 42 | + camera.resolution = [320, 240] | ||
| 43 | + camera.start_preview() | ||
| 44 | + | ||
| 45 | + now = datetime.datetime.now() | ||
| 46 | + start_time = time.time() | ||
| 47 | + | ||
| 48 | + vid_name = now.strftime('%Y%m%d-%H%M%S') | ||
| 49 | + vid_path = path + '/' + vid_name + '.h264' | ||
| 50 | + thumbnail_path = path + '/' + vid_name + '.jpg' | ||
| 51 | + | ||
| 52 | + camera.start_recording(output=vid_path) | ||
| 53 | + time.sleep(1) | ||
| 54 | + camera.capture(thumbnail_path) | ||
| 55 | + while GPIO.input(pir_pin) : | ||
| 56 | + print("recoring..") | ||
| 57 | + time.sleep(2) | ||
| 58 | + camera.stop_recording() | ||
| 59 | + camera.stop_preview() | ||
| 60 | + | ||
| 61 | + vid_time = time.strftime("%M:%S", time.gmtime(time.time()-start_time)) | ||
| 62 | + | ||
| 63 | + # s3 upload | ||
| 64 | + ''' | ||
| 65 | + s3 = boto3.client('s3', region_name = 'ap-northeast-2') | ||
| 66 | + s3.upload_file(Filename = vid_path, Bucket = S3_STORAGE_BUCKET_NAME, Key = vid_name) | ||
| 67 | + s3.upload_file(Filename = thumbnail_path, Bucket = S3_STORAGE_BUCKET_NAME, Key = vid_name + '_thumb') | ||
| 68 | + | ||
| 69 | + uploadVideo = {} | ||
| 70 | + uploadVideo['vid_name'] = vid_name | ||
| 71 | + uploadVideo['created'] = now | ||
| 72 | + uploadVideo['vid_time'] = vid_time | ||
| 73 | + uploadVideo['thumb'] = S3_ACCESS_URL + vid_name + '_thumb' | ||
| 74 | + serializer = VideoSerializer(data = uploadVideo) | ||
| 75 | + serializer.save() | ||
| 76 | + ''' | ||
| 77 | + print(vid_path, "upload success") | ||
| 78 | + os.remove(vid_path) | ||
| 79 | + else: | ||
| 80 | + camera.stop_preview() | ||
| 81 | + except KeyboardInterrupt: | ||
| 82 | + print("quit") | ||
| 83 | + GPIO.cleanup() | ||
| 84 | + | ||
| 85 | + | ||
| 86 | +if __name__ == '__main__': | ||
| 87 | + record() |
-
Please register or login to post a comment