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