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') @sensor_blueprint.route('/plot/') 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) @sensor_blueprint.route('/postplain/', methods=['POST']) 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 -------------- @camera_blueprint.route('/video_feed/') 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') @camera_blueprint.route('/refresh_camera') 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})