김유현

merge

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
......
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()