Update camera management and MQTT logging for improved functionality

- Changed log level in configuration from WARNING to INFO for better visibility of system operations.
- Enhanced StandaloneAutoRecorder initialization to accept camera manager, state manager, and event system for improved modularity.
- Updated recording routes to handle optional request bodies and improved error logging for better debugging.
- Added checks in CameraMonitor to determine if a camera is already in use before initialization, enhancing resource management.
- Improved MQTT client logging to provide more detailed connection and message handling information.
- Added new MQTT event handling capabilities to the VisionApiClient for better tracking of machine states.
This commit is contained in:
salirezav
2025-11-03 16:56:53 -05:00
parent 868aa3f036
commit 4acad772f9
17 changed files with 1074 additions and 83 deletions

View File

@@ -4,6 +4,7 @@ Recording-related API routes.
import logging
from fastapi import FastAPI, HTTPException
from typing import Optional
from ...camera.manager import CameraManager
from ..models import StartRecordingResponse, StopRecordingResponse, StartRecordingRequest
from ...core.timezone_utils import format_filename_timestamp
@@ -17,12 +18,19 @@ def register_recording_routes(
"""Register recording-related routes"""
@app.post("/cameras/{camera_name}/start-recording", response_model=StartRecordingResponse)
async def start_recording(camera_name: str, request: StartRecordingRequest):
async def start_recording(camera_name: str, request: Optional[StartRecordingRequest] = None):
"""Manually start recording for a camera"""
try:
if not camera_manager:
logger.error("Camera manager not available")
raise HTTPException(status_code=503, detail="Camera manager not available")
# Handle case where request body might be None or empty
if request is None:
request = StartRecordingRequest()
logger.info(f"📹 Starting recording for {camera_name} - filename: {request.filename}, exposure_ms: {request.exposure_ms}, gain: {request.gain}, fps: {request.fps}")
success = camera_manager.manual_start_recording(
camera_name=camera_name,
filename=request.filename,
@@ -37,19 +45,28 @@ def register_recording_routes(
if request.filename:
timestamp = format_filename_timestamp()
actual_filename = f"{timestamp}_{request.filename}"
else:
timestamp = format_filename_timestamp()
camera_config = camera_manager.get_camera_config(camera_name)
video_format = camera_config.video_format if camera_config else "mp4"
actual_filename = f"{camera_name}_manual_{timestamp}.{video_format}"
logger.info(f"✅ Recording started successfully for {camera_name}: {actual_filename}")
return StartRecordingResponse(
success=True,
message=f"Recording started for {camera_name}",
filename=actual_filename
)
else:
logger.error(f"❌ Failed to start recording for {camera_name} - manual_start_recording returned False")
return StartRecordingResponse(
success=False,
message=f"Failed to start recording for {camera_name}"
message=f"Failed to start recording for {camera_name}. Check camera status and logs."
)
except HTTPException:
raise
except Exception as e:
logger.error(f"Error starting recording: {e}")
logger.error(f"Error starting recording for {camera_name}: {e}", exc_info=True)
raise HTTPException(status_code=500, detail=str(e))
@app.post("/cameras/{camera_name}/stop-recording", response_model=StopRecordingResponse)