Spaces:
Sleeping
Sleeping
from flask import Blueprint, render_template, jsonify, request, Response | |
from models import Device, db # Assuming Device is your database model from models.py | |
from device_core import Sensor, Camera # Import your Sensor class | |
from device_routes import SENSORS, CAMERAS # Import your SENSORS list | |
import json | |
import plotly | |
sensor_blueprint = Blueprint('sensor_blueprint', __name__, template_folder='templates') | |
camera_blueprint = Blueprint('camera_blueprint', __name__, template_folder='templates') | |
def generate_plot(sensor_id): | |
sensor = Sensor.find(SENSORS, sensor_id) # Assuming SENSORS is accessible here | |
if not sensor: | |
return jsonify({"error": "Sensor not found"}), 404 | |
fig = sensor.plot(Device, title=sensor.name) | |
return json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder) | |
def post_plain(): | |
data = request.get_json() | |
if not data: | |
return jsonify({'message': 'No input data provided'}), 400 | |
device_id = data.get('id') | |
device_values = data.get('values') | |
device_units = data.get('units') | |
if device_values and device_id: | |
sensor = Sensor.find(SENSORS, device_id) | |
if sensor: | |
sensor.update_values(device_values, device_units) | |
device = Device( | |
sensor_id=device_id, | |
name=sensor.name, | |
time=sensor.time, | |
) | |
for i, value in enumerate(sensor.values): | |
setattr(device, f"value{i + 1}", value) | |
for i, unit in enumerate(sensor.units): | |
setattr(device, f"unit{i + 1}", unit) | |
db.session.add(device) | |
db.session.commit() | |
return jsonify({'message': 'Success!'}), 200 | |
else: | |
return jsonify({'message': 'Sensor not found'}), 404 | |
else: | |
return jsonify({'message': 'Missing data'}), 400 | |
# -------------- CAMERA ROUTES -------------- | |
def stream_camera(camera_id): | |
""" | |
Stream the video feed from a specific camera. | |
""" | |
camera = next((cam for cam in CAMERAS if cam.id == camera_id), None) | |
if not camera: | |
return Response("Camera not found or could not be opened", status=404) | |
return Response(camera.gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame') | |
def refresh_camera(): | |
success = True | |
message = "All cameras refreshed successfully." | |
for cam in CAMERAS: | |
cam.close_camera() | |
try: | |
cam.__init__(cam.id, cam.name, cam.index) | |
except: | |
success = False | |
message = "Error occurred while refreshing cameras." | |
return jsonify({"success": success, "message": message}) | |