reimplement start/stop of timelapse from gui
This commit is contained in:
parent
c13cb3355e
commit
416f6ec2a6
2 changed files with 37 additions and 27 deletions
|
@ -60,18 +60,25 @@ class CameraWorker(object):
|
||||||
with open(self.fifo, 'w') as fh:
|
with open(self.fifo, 'w') as fh:
|
||||||
fh.write(cmd)
|
fh.write(cmd)
|
||||||
|
|
||||||
def timelapse(self, interval = 0):
|
def start_timelapse(self, interval = 0):
|
||||||
if self.status == CameraStatus.IDLE:
|
if self.status == CameraStatus.IDLE:
|
||||||
self.send_cmd('tl {}'.format(str(interval)))
|
self.send_cmd('tl {}'.format(str(interval)))
|
||||||
self.status = CameraStatus.TIMELAPSE
|
self.status = CameraStatus.TIMELAPSE
|
||||||
elif self.status == CameraStatus.TIMELAPSE:
|
else:
|
||||||
|
raise CameraActionError('Camera not idle!')
|
||||||
|
|
||||||
|
def stop_timelapse(self):
|
||||||
|
if self.status == CameraStatus.TIMELAPSE:
|
||||||
self.send_cmd('tl 0')
|
self.send_cmd('tl 0')
|
||||||
self.status == CameraStatus.IDLE
|
self.status == CameraStatus.IDLE
|
||||||
else:
|
else:
|
||||||
raise CameraActionError('Camera neither idle nor in timelapse mode!')
|
raise CameraActionError('Camera not in timelapse mode!')
|
||||||
|
|
||||||
def get_frame(self, thumbnail=False):
|
def get_frame(self, thumbnail=False):
|
||||||
|
output = io.BytesIO()
|
||||||
img = Image.open('/dev/shm/mjpeg/cam.jpg')
|
img = Image.open('/dev/shm/mjpeg/cam.jpg')
|
||||||
return img
|
img.save(output, format='JPEG')
|
||||||
|
output.seek(0, 0)
|
||||||
|
return output.getvalue()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from flask import render_template, Response, flash, jsonify, request, stream_with_context, send_file
|
from flask import render_template, Response, flash, jsonify, request, stream_with_context, send_file
|
||||||
|
|
||||||
from phytopi.camera.camera import CameraWorker
|
from phytopi.camera.camera import CameraWorker, CameraStatus
|
||||||
from phytopi.forms import CameraSettingsForm
|
from phytopi.forms import CameraSettingsForm
|
||||||
|
|
||||||
from phytopi import app
|
from phytopi import app
|
||||||
|
@ -12,7 +12,6 @@ import zipstream
|
||||||
|
|
||||||
camera = CameraWorker(app=app)
|
camera = CameraWorker(app=app)
|
||||||
camera.start()
|
camera.start()
|
||||||
# camera = app.camera
|
|
||||||
save_frames = False
|
save_frames = False
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
|
@ -23,34 +22,38 @@ def index():
|
||||||
|
|
||||||
@app.route('/toggle_timelapse', methods=['GET', 'POST'])
|
@app.route('/toggle_timelapse', methods=['GET', 'POST'])
|
||||||
def start_stop_timelapse():
|
def start_stop_timelapse():
|
||||||
global save_frames
|
# global save_frames
|
||||||
global current_dataset
|
global current_dataset
|
||||||
global camera
|
global camera
|
||||||
if save_frames:
|
# if save_frames:
|
||||||
save_frames = False
|
# save_frames = False
|
||||||
timelapse_interval = None
|
# timelapse_interval = None
|
||||||
btn_text = "Start"
|
# btn_text = "Start"
|
||||||
btn_class = 'btn-primary'
|
# btn_class = 'btn-primary'
|
||||||
camera.current_dataset = None
|
# camera.current_dataset = None
|
||||||
camera.last_saved = None
|
# camera.last_saved = None
|
||||||
print(" > switched off timelapse mode")
|
# print(" > switched off timelapse mode")
|
||||||
else:
|
# else:
|
||||||
save_frames = True
|
# save_frames = True
|
||||||
timelapse_interval = 1200
|
# timelapse_interval = 1200
|
||||||
btn_text = "Stop"
|
# btn_text = "Stop"
|
||||||
btn_class = 'btn-danger'
|
# btn_class = 'btn-danger'
|
||||||
dataset = Dataset()
|
# dataset = Dataset()
|
||||||
db.session.add(dataset)
|
# db.session.add(dataset)
|
||||||
db.session.commit()
|
# db.session.commit()
|
||||||
camera.current_dataset = dataset.id
|
# camera.current_dataset = dataset.id
|
||||||
print(" > switched on timelapse mode")
|
# print(" > switched on timelapse mode")
|
||||||
|
|
||||||
|
# camera.set_timelapse_interval(timelapse_interval)
|
||||||
|
if camera.status == CameraStatus.IDLE:
|
||||||
|
camera.start_timelapse(1200)
|
||||||
|
elif camera.status == CameraStatus.TIMELAPSE:
|
||||||
|
camera.stop_timelapse()
|
||||||
|
|
||||||
camera.set_timelapse_interval(timelapse_interval)
|
|
||||||
return jsonify(btn_text=btn_text, btn_class=btn_class)
|
return jsonify(btn_text=btn_text, btn_class=btn_class)
|
||||||
|
|
||||||
|
|
||||||
def gen(camera):
|
def gen(camera):
|
||||||
# def gen():
|
|
||||||
"""Video streaming generator function."""
|
"""Video streaming generator function."""
|
||||||
while True:
|
while True:
|
||||||
frame = camera.get_frame(thumbnail=True)
|
frame = camera.get_frame(thumbnail=True)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue