diff --git a/app.py b/app.py index 6e75963..d08aa7a 100644 --- a/app.py +++ b/app.py @@ -43,6 +43,16 @@ camera_streams: Dict[str, Dict[str, Any]] = {} subscription_to_camera: Dict[str, str] = {} # Store latest frames for REST API access (separate from processing buffer) latest_frames: Dict[str, Any] = {} +# Store cached detection dict after successful pipeline completion +cached_detections: Dict[str, Dict[str, Any]] = {} +# Track frame skipping for pipeline buffer after detection +frame_skip_flags: Dict[str, bool] = {} +# Track camera connection states for immediate error handling +camera_states: Dict[str, Dict[str, Any]] = {} +# Track session ID states and pipeline modes per camera +session_pipeline_states: Dict[str, Dict[str, Any]] = {} +# Store full pipeline results for caching +cached_full_pipeline_results: Dict[str, Dict[str, Any]] = {} with open("config.json", "r") as f: config = json.load(f) @@ -69,11 +79,22 @@ logging.basicConfig( logger = logging.getLogger("detector_worker") logger.setLevel(logging.DEBUG) # Set app-specific logger to DEBUG level +# Create WebSocket communication logger +ws_logger = logging.getLogger("websocket_comm") +ws_logger.setLevel(logging.INFO) +ws_handler = logging.FileHandler("websocket_comm.log", encoding='utf-8') +ws_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s") +ws_handler.setFormatter(ws_formatter) +ws_logger.addHandler(ws_handler) +ws_logger.propagate = False # Don't propagate to root logger + # Ensure all other libraries (including root) use at least INFO level logging.getLogger().setLevel(logging.INFO) logger.info("Starting detector worker application") logger.info(f"Configuration: Target FPS: {TARGET_FPS}, Max streams: {max_streams}, Max retries: {max_retries}") +ws_logger.info("WebSocket communication logging started - TX/RX format") +logger.info("WebSocket communication will be logged to websocket_comm.log") # Ensure the models directory exists os.makedirs("models", exist_ok=True) @@ -228,6 +249,87 @@ def get_crop_coords(stream): "cropY2": stream.get("cropY2") } +# Camera state management functions +def set_camera_connected(camera_id, connected=True, error_msg=None): + """Set camera connection state and track error information""" + current_time = time.time() + + if camera_id not in camera_states: + camera_states[camera_id] = { + "connected": True, + "last_error": None, + "last_error_time": None, + "consecutive_failures": 0, + "disconnection_notified": False + } + + state = camera_states[camera_id] + was_connected = state["connected"] + + if connected: + state["connected"] = True + state["consecutive_failures"] = 0 + state["disconnection_notified"] = False + if not was_connected: + logger.info(f"📶 CAMERA RECONNECTED: {camera_id}") + else: + state["connected"] = False + state["last_error"] = error_msg + state["last_error_time"] = current_time + state["consecutive_failures"] += 1 + + # Distinguish between temporary and permanent disconnection + is_permanent = state["consecutive_failures"] >= 3 + + if was_connected and is_permanent: + logger.error(f"📵 CAMERA DISCONNECTED: {camera_id} - {error_msg} (consecutive failures: {state['consecutive_failures']})") + logger.info(f"🚨 CAMERA ERROR DETECTED - Will send detection: null to reset backend session for {camera_id}") + +def is_camera_connected(camera_id): + """Check if camera is currently connected""" + return camera_states.get(camera_id, {}).get("connected", True) + +def should_notify_disconnection(camera_id): + """Check if we should notify backend about disconnection""" + state = camera_states.get(camera_id, {}) + is_disconnected = not state.get("connected", True) + not_yet_notified = not state.get("disconnection_notified", False) + has_enough_failures = state.get("consecutive_failures", 0) >= 3 + + return is_disconnected and not_yet_notified and has_enough_failures + +def mark_disconnection_notified(camera_id): + """Mark that we've notified backend about this disconnection""" + if camera_id in camera_states: + camera_states[camera_id]["disconnection_notified"] = True + logger.debug(f"Marked disconnection notification sent for camera {camera_id}") + +def get_or_init_session_pipeline_state(camera_id): + """Get or initialize session pipeline state for a camera""" + if camera_id not in session_pipeline_states: + session_pipeline_states[camera_id] = { + "mode": "validation_detecting", # "validation_detecting", "send_detections", "waiting_for_session_id", "full_pipeline", "lightweight" + "session_id_received": False, + "full_pipeline_completed": False, + "absence_counter": 0, + "max_absence_frames": 3 + # Removed validation_counter and validation_threshold - now using only track-based validation + } + return session_pipeline_states[camera_id] + +def update_session_pipeline_mode(camera_id, new_mode, session_id=None): + """Update session pipeline mode and related state""" + state = get_or_init_session_pipeline_state(camera_id) + old_mode = state["mode"] + state["mode"] = new_mode + + if session_id: + state["session_id_received"] = True + state["absence_counter"] = 0 # Reset absence counter when session starts + + logger.info(f"📊 Camera {camera_id}: Pipeline mode changed from '{old_mode}' to '{new_mode}'") + return state + #################################################### # REST API endpoint for image retrieval #################################################### @@ -279,6 +381,47 @@ async def detect(websocket: WebSocket): async def handle_detection(camera_id, stream, frame, websocket, model_tree, persistent_data): try: + # Check camera connection state first - handle disconnection immediately + if should_notify_disconnection(camera_id): + logger.error(f"🚨 CAMERA DISCONNECTION DETECTED: {camera_id} - sending immediate detection: null") + + # Clear cached detections and occupancy state + cached_detections.pop(camera_id, None) + frame_skip_flags.pop(camera_id, None) + cached_full_pipeline_results.pop(camera_id, None) # Clear cached pipeline results + session_pipeline_states.pop(camera_id, None) # Reset session pipeline state + + # Reset pipeline state immediately + from siwatsystem.pympta import reset_tracking_state + model_id = stream.get("modelId", "unknown") + reset_tracking_state(camera_id, model_id, "camera disconnected") + + # Send immediate detection: null to backend + detection_data = { + "type": "imageDetection", + "subscriptionIdentifier": stream["subscriptionIdentifier"], + "timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + "data": { + "detection": None, # null detection for disconnection + "modelId": stream["modelId"], + "modelName": stream["modelName"] + } + } + + try: + ws_logger.info(f"TX -> {json.dumps(detection_data, separators=(',', ':'))}") + await websocket.send_json(detection_data) + except RuntimeError as e: + if "websocket.close" in str(e): + logger.warning(f"WebSocket connection closed - cannot send disconnection signal for camera {camera_id}") + return persistent_data + else: + raise + mark_disconnection_notified(camera_id) + logger.info(f"📡 SENT DISCONNECTION SIGNAL - detection: null for camera {camera_id}, backend should clear session") + + return persistent_data + # Apply crop if specified cropped_frame = frame if all(coord is not None for coord in [stream.get("cropX1"), stream.get("cropY1"), stream.get("cropX2"), stream.get("cropY2")]): @@ -296,87 +439,318 @@ async def detect(websocket: WebSocket): # Get backend session ID if available backend_session_id = session_ids.get(display_identifier) - # Create context for pipeline execution with backend sessionId + # Get or initialize session pipeline state + pipeline_state = get_or_init_session_pipeline_state(camera_id) + current_mode = pipeline_state["mode"] + + logger.debug(f"🔍 SESSIONID LOOKUP: display='{display_identifier}', session_id={repr(backend_session_id)}, mode='{current_mode}'") + logger.debug(f"🔍 Available session_ids: {session_ids}") + + # ═══ SESSION ID-BASED PROCESSING MODE ═══ + if not backend_session_id: + # No session ID - keep current mode if it's validation_detecting or send_detections + if current_mode not in ["validation_detecting", "send_detections", "waiting_for_session_id"]: + update_session_pipeline_mode(camera_id, "validation_detecting") + current_mode = "validation_detecting" + logger.debug(f"🔍 Camera {camera_id}: No session ID - in {current_mode} mode") + else: + # Session ID available - switch to full pipeline mode + if current_mode in ["send_detections", "waiting_for_session_id"]: + # Session ID just arrived - switch to full pipeline mode + update_session_pipeline_mode(camera_id, "full_pipeline", backend_session_id) + current_mode = "full_pipeline" + logger.info(f"🔥 Camera {camera_id}: Session ID received ({backend_session_id}) - switching to FULL PIPELINE mode") + + # Create context for pipeline execution pipeline_context = { "camera_id": camera_id, "display_id": display_identifier, "backend_session_id": backend_session_id } - if backend_session_id: - logger.info(f"🔥 USING BACKEND SESSION_ID: {backend_session_id} for camera {camera_id} (display: {display_identifier})") - logger.debug(f"Pipeline context includes backend session_id: {backend_session_id}") - else: - logger.debug(f"❌ No backend session_id available for display: {display_identifier} (session_ids: {session_ids})") + start_time = time.time() + detection_result = None + + if current_mode == "validation_detecting": + # ═══ TRACK VALIDATION MODE ═══ + # Run tracking-based validation with track ID stability + logger.debug(f"🔍 Camera {camera_id}: In validation_detecting mode - running track-based validation") + + # Get tracking configuration from model_tree + tracking_config = model_tree.get("tracking", {}) + tracking_enabled = tracking_config.get("enabled", True) + stability_threshold = tracking_config.get("stabilityThreshold", 4) + + # Default to "none" - only proceed after track validation + detection_result = {"class": "none", "confidence": 1.0, "bbox": [0, 0, 0, 0]} + + if tracking_enabled: + # Run full tracking detection to get track IDs + from siwatsystem.pympta import run_detection_with_tracking + all_detections, regions_dict, track_validation_result = run_detection_with_tracking(cropped_frame, model_tree, pipeline_context) + + if track_validation_result.get("validation_complete", False): + # Track validation completed - we have stable track IDs + stable_tracks = track_validation_result.get("stable_tracks", []) + logger.info(f"🎯 Camera {camera_id}: TRACK VALIDATION COMPLETED - stable tracks: {stable_tracks}") + + # Switch to send_detections mode + update_session_pipeline_mode(camera_id, "send_detections") + + # Send the best detection with stable track + if all_detections: + # Find detection with stable track ID + stable_detection = None + for detection in all_detections: + if detection.get("id") in stable_tracks: + stable_detection = detection + break + + if stable_detection: + detection_result = { + "class": stable_detection.get("class", "car"), + "confidence": stable_detection.get("confidence", 0.0), + "bbox": stable_detection.get("bbox", [0, 0, 0, 0]), + "track_id": stable_detection.get("id") + } + logger.info(f"🚗 Camera {camera_id}: SENDING STABLE DETECTION - track ID {detection_result['track_id']}") + else: + logger.warning(f"⚠️ Camera {camera_id}: Stable tracks found but no matching detection") + else: + # Track validation still in progress + stable_tracks = track_validation_result.get("stable_tracks", []) + current_tracks = track_validation_result.get("current_tracks", []) + + if current_tracks: + track_id = current_tracks[0] if current_tracks else "None" + stable_status = "STABLE" if stable_tracks else "validating" + logger.info(f"🔍 Camera {camera_id}: TRACK VALIDATION - car track_id {track_id} ({stable_status}, need {stability_threshold} consecutive frames)") + else: + logger.debug(f"👻 Camera {camera_id}: No car detected") + + logger.debug(f"📤 Camera {camera_id}: Sending 'none' (track validation in progress)") + else: + # Tracking disabled - fall back to basic detection validation + logger.debug(f"🔍 Camera {camera_id}: Tracking disabled - using basic detection validation") + from siwatsystem.pympta import run_lightweight_detection + basic_detection = run_lightweight_detection(cropped_frame, model_tree) + + if basic_detection and basic_detection.get("car_detected"): + best_detection = basic_detection.get("best_detection") + + # Increment validation counter for basic detection + pipeline_state["validation_counter"] += 1 + current_count = pipeline_state["validation_counter"] + threshold = pipeline_state["validation_threshold"] + + if current_count >= threshold: + update_session_pipeline_mode(camera_id, "send_detections") + detection_result = { + "class": best_detection.get("class", "car"), + "confidence": best_detection.get("confidence", 0.0), + "bbox": best_detection.get("bbox", [0, 0, 0, 0]) + } + logger.info(f"🎯 Camera {camera_id}: BASIC VALIDATION COMPLETED after {current_count} frames") + else: + logger.info(f"📊 Camera {camera_id}: Basic validation progress {current_count}/{threshold}") + else: + # Reset validation counter + if pipeline_state["validation_counter"] > 0: + pipeline_state["validation_counter"] = 0 + logger.info(f"🔄 Camera {camera_id}: Reset validation counter (no detection)") + + elif current_mode == "send_detections": + # ═══ SEND DETECTIONS MODE ═══ + # Validation completed - now send detection_dict for car detections, detection: null for no car + logger.debug(f"📤 Camera {camera_id}: In send_detections mode - sending detection_dict for cars") + from siwatsystem.pympta import run_lightweight_detection + basic_detection = run_lightweight_detection(cropped_frame, model_tree) + + if basic_detection and basic_detection.get("car_detected"): + # Car detected - send detection_dict + best_detection = basic_detection.get("best_detection") + detection_result = { + "class": best_detection.get("class", "car"), + "confidence": best_detection.get("confidence", 0.0), + "bbox": best_detection.get("bbox", [0, 0, 0, 0]) + } + logger.info(f"🚗 Camera {camera_id}: SENDING DETECTION_DICT - {detection_result['class']} (conf={detection_result['confidence']:.3f}) - backend should generate session ID") + else: + # No car detected - send "none" + detection_result = {"class": "none", "confidence": 1.0, "bbox": [0, 0, 0, 0]} + logger.debug(f"👻 Camera {camera_id}: No car detected - sending 'none'") + + elif current_mode == "waiting_for_session_id": + # ═══ WAITING FOR SESSION ID MODE ═══ + # Stop processing snapshots, wait for session ID + logger.debug(f"⏳ Camera {camera_id}: In waiting_for_session_id mode - not processing snapshots") + return persistent_data # Don't process or send anything + + elif current_mode == "full_pipeline": + # ═══ FULL PIPELINE MODE ═══ + logger.info(f"🔥 Camera {camera_id}: Running FULL PIPELINE (detection + branches + Redis + PostgreSQL)") + detection_result = run_pipeline(cropped_frame, model_tree, context=pipeline_context) + + if detection_result and isinstance(detection_result, dict): + # Cache the full pipeline result + cached_full_pipeline_results[camera_id] = { + "result": detection_result.copy(), + "timestamp": time.time() + } + # Switch to lightweight mode + update_session_pipeline_mode(camera_id, "lightweight") + logger.info(f"✅ Camera {camera_id}: Full pipeline completed - switching to LIGHTWEIGHT mode") + + elif current_mode == "lightweight": + # ═══ LIGHTWEIGHT MODE ═══ + # Use tracking to check for stable car presence + from siwatsystem.pympta import run_detection_with_tracking + all_detections, regions_dict, track_validation_result = run_detection_with_tracking(cropped_frame, model_tree, pipeline_context) + + stable_tracks = track_validation_result.get("stable_tracks", []) + current_tracks = track_validation_result.get("current_tracks", []) + stable_tracks_present = bool(set(stable_tracks) & set(current_tracks)) + + if stable_tracks_present: + # Stable tracked car still present - use cached result + pipeline_state["absence_counter"] = 0 + if camera_id in cached_full_pipeline_results: + detection_result = cached_full_pipeline_results[camera_id]["result"] + logger.debug(f"🔄 Camera {camera_id}: Stable tracked car still present - using cached detection") + else: + logger.warning(f"⚠️ Camera {camera_id}: Stable tracked car detected but no cached result available") + detection_result = None + else: + # No stable tracked cars - increment absence counter + pipeline_state["absence_counter"] += 1 + absence_count = pipeline_state["absence_counter"] + max_absence = pipeline_state["max_absence_frames"] + + logger.debug(f"👻 Camera {camera_id}: No stable tracked cars - absence {absence_count}/{max_absence}") + + if absence_count >= max_absence: + # Send "none" detection and reset to validation mode + detection_result = { + "class": "none", + "confidence": 1.0, + "bbox": [0, 0, 0, 0], + "branch_results": {} + } + cached_full_pipeline_results.pop(camera_id, None) # Clear cache + update_session_pipeline_mode(camera_id, "validation_detecting") + logger.info(f"📤 Camera {camera_id}: Stable tracked cars absent for {absence_count} frames - sending 'none' and resetting to track validation") + else: + # Still within absence tolerance - use cached result + if camera_id in cached_full_pipeline_results: + detection_result = cached_full_pipeline_results[camera_id]["result"] + logger.debug(f"⏳ Camera {camera_id}: Stable tracked cars absent {absence_count}/{max_absence} - still using cached detection") + else: + detection_result = None - detection_result = run_pipeline(cropped_frame, model_tree, context=pipeline_context) process_time = (time.time() - start_time) * 1000 - logger.debug(f"Detection for camera {camera_id} completed in {process_time:.2f}ms") + logger.debug(f"Detection for camera {camera_id} completed in {process_time:.2f}ms (mode: {current_mode})") + # Skip processing if no detection result (blocked by session gating) + if detection_result is None: + logger.debug(f"No detection result to process for camera {camera_id}") + return persistent_data + # Log the raw detection result for debugging logger.debug(f"Raw detection result for camera {camera_id}:\n{json.dumps(detection_result, indent=2, default=str)}") - # Extract session_id from pipeline result (uses backend sessionId) - session_id = None - if detection_result and isinstance(detection_result, dict): - # Check if pipeline used backend session_id for operations - if "session_id" in detection_result: - session_id = detection_result["session_id"] - logger.debug(f"Pipeline used session_id: {session_id}") - elif backend_session_id: - # Use backend session_id even if pipeline didn't return it - session_id = backend_session_id - logger.debug(f"Using backend session_id for WebSocket response: {session_id}") + # Extract session_id from pipeline result (always use backend sessionId) + session_id = backend_session_id + logger.debug(f"Using backend session_id: {session_id}") - # Process detection result - run_pipeline returns the primary detection directly - if detection_result and isinstance(detection_result, dict) and "class" in detection_result: - highest_confidence_detection = detection_result + + # Process detection result based on current mode + if current_mode == "validation_detecting": + # ═══ VALIDATION DETECTING MODE ═══ + # Always send detection: null during validation phase + detection_dict = None + logger.debug(f"🔍 SENDING 'NONE' - validation_detecting mode for camera {camera_id}") + + elif current_mode == "send_detections": + # ═══ SEND DETECTIONS MODE ═══ + if detection_result.get("class") == "none": + # No car detected - send detection: null + detection_dict = None + logger.debug(f"📤 SENDING 'NONE' - send_detections mode (no car) for camera {camera_id}") + else: + # Car detected - check if we have sessionId to determine what to send + if backend_session_id: + # Have sessionId - send full detection_dict for database updates + detection_dict = { + "carModel": None, + "carBrand": None, + "carYear": None, + "bodyType": None, + "licensePlateText": None, + "licensePlateConfidence": None + } + logger.info(f"📤 SENDING FULL DETECTION_DICT - send_detections mode with sessionId {backend_session_id} (conf={detection_result.get('confidence', 0):.3f}) for camera {camera_id}") + else: + # No sessionId - send empty detection_dict to trigger backend to generate sessionId + detection_dict = {} + logger.info(f"📤 SENDING EMPTY DETECTION_DICT - send_detections mode without sessionId, triggering backend to generate sessionId (conf={detection_result.get('confidence', 0):.3f}) for camera {camera_id}") + + elif detection_result.get("class") == "none": + # "None" detection in other modes (lightweight) - car left or absent for 3 frames + detection_dict = None + logger.info(f"📤 SENDING 'NONE' (detection: null) - Car absent, expecting backend to clear session for camera {camera_id}") else: - # No detection found - highest_confidence_detection = { - "class": "none", - "confidence": 1.0, - "bbox": [0, 0, 0, 0], - "branch_results": {} + # Valid detection - convert to backend format + detection_dict = { + "carModel": None, + "carBrand": None, + "carYear": None, + "bodyType": None, + "licensePlateText": None, + "licensePlateConfidence": None } - # Convert detection format to match backend expectations exactly as in worker.md section 4.2 - detection_dict = { - "carModel": None, - "carBrand": None, - "carYear": None, - "bodyType": None, - "licensePlateText": None, - "licensePlateConfidence": None - } - - # Extract and process branch results from parallel classification - branch_results = highest_confidence_detection.get("branch_results", {}) - if branch_results: - logger.debug(f"Processing branch results: {branch_results}") - - # Transform branch results into backend-expected detection attributes - for branch_id, branch_data in branch_results.items(): - if isinstance(branch_data, dict): - logger.debug(f"Processing branch {branch_id}: {branch_data}") - - # Map common classification fields to backend-expected names - if "brand" in branch_data: - detection_dict["carBrand"] = branch_data["brand"] - if "body_type" in branch_data: - detection_dict["bodyType"] = branch_data["body_type"] - if "class" in branch_data: - class_name = branch_data["class"] + # Extract and process branch results from parallel classification (only for valid detections) + if detection_result.get("class") != "none" and "branch_results" in detection_result: + def process_branch_results(branch_results, depth=0): + """Recursively process branch results including nested branches.""" + if not isinstance(branch_results, dict): + return + + indent = " " * depth + for branch_id, branch_data in branch_results.items(): + if isinstance(branch_data, dict): + logger.debug(f"{indent}Processing branch {branch_id}: {branch_data}") - # Map based on branch/model type - if "brand" in branch_id.lower(): - detection_dict["carBrand"] = class_name - elif "bodytype" in branch_id.lower() or "body" in branch_id.lower(): - detection_dict["bodyType"] = class_name - - logger.info(f"Detection payload after branch processing: {detection_dict}") - else: - logger.debug("No branch results found in detection result") + # Map common classification fields to backend-expected names + if "brand" in branch_data: + detection_dict["carBrand"] = branch_data["brand"] + logger.debug(f"{indent}Mapped carBrand: {branch_data['brand']}") + if "body_type" in branch_data: + detection_dict["bodyType"] = branch_data["body_type"] + logger.debug(f"{indent}Mapped bodyType: {branch_data['body_type']}") + if "class" in branch_data: + class_name = branch_data["class"] + + # Map based on branch/model type + if "brand" in branch_id.lower(): + detection_dict["carBrand"] = class_name + logger.debug(f"{indent}Mapped carBrand from class: {class_name}") + elif "bodytype" in branch_id.lower() or "body" in branch_id.lower(): + detection_dict["bodyType"] = class_name + logger.debug(f"{indent}Mapped bodyType from class: {class_name}") + + # Process nested branch results recursively + if "branch_results" in branch_data: + logger.debug(f"{indent}Processing nested branches in {branch_id}") + process_branch_results(branch_data["branch_results"], depth + 1) + + branch_results = detection_result.get("branch_results", {}) + if branch_results: + logger.debug(f"Processing branch results: {branch_results}") + process_branch_results(branch_results) + logger.info(f"Detection payload after branch processing: {detection_dict}") + else: + logger.debug("No branch results found in detection result") detection_data = { "type": "imageDetection", @@ -390,25 +764,38 @@ async def detect(websocket: WebSocket): } } - # Add session ID if available (from backend or pipeline operations) - if session_id is not None: + # Add session ID to detection data (NOT for "none" detections - backend uses absence of sessionId to know to clear the session) + if session_id and detection_result.get("class") != "none": detection_data["sessionId"] = session_id + logger.debug(f"Including sessionId {session_id} in WebSocket message") + elif detection_result.get("class") == "none": + logger.debug(f"NOT including sessionId in 'none' detection - backend should clear session") + + # Log detection details + if detection_result.get("class") != "none": + confidence = detection_result.get("confidence", 0.0) + logger.info(f"Camera {camera_id}: Detected {detection_result['class']} with confidence {confidence:.2f} using model {stream['modelName']}") + + # Send detection data to backend (session gating handled above in processing logic) + logger.debug(f"📤 SENDING TO BACKEND for camera {camera_id}: {json.dumps(detection_data, indent=2)}") + try: + ws_logger.info(f"TX -> {json.dumps(detection_data, separators=(',', ':'))}") + await websocket.send_json(detection_data) + logger.debug(f"Sent detection data to client for camera {camera_id}") + except RuntimeError as e: + if "websocket.close" in str(e): + logger.warning(f"WebSocket connection closed - cannot send detection data for camera {camera_id}") + return persistent_data + else: + raise + + # Log status after sending + if session_id and detection_result.get("class") != "none": logger.info(f"📤 WEBSOCKET RESPONSE with sessionId: {session_id} for camera {camera_id}") - logger.debug(f"Added session_id to WebSocket response: {session_id}") + elif detection_result.get("class") == "none": + logger.info(f"📡 SENT 'none' detection - backend should clear session for camera {camera_id}") else: - logger.debug(f"📤 WebSocket response WITHOUT sessionId for camera {camera_id}") - - if highest_confidence_detection.get("class") != "none": - confidence = highest_confidence_detection.get("confidence", 0.0) - logger.info(f"Camera {camera_id}: Detected {highest_confidence_detection['class']} with confidence {confidence:.2f} using model {stream['modelName']}") - - # Log session ID if available - if session_id: - logger.debug(f"Detection associated with session ID: {session_id}") - - await websocket.send_json(detection_data) - logger.debug(f"Sent detection data to client for camera {camera_id}") - logger.debug(f"Sent this detection data: {detection_data}") + logger.info(f"📡 Detection data sent for camera {camera_id}") return persistent_data except Exception as e: logger.error(f"Error in handle_detection for camera {camera_id}: {str(e)}", exc_info=True) @@ -427,8 +814,10 @@ async def detect(websocket: WebSocket): height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps = cap.get(cv2.CAP_PROP_FPS) logger.info(f"Camera {camera_id} opened successfully with resolution {width}x{height}, FPS: {fps}") + set_camera_connected(camera_id, True) else: logger.error(f"Camera {camera_id} failed to open initially") + set_camera_connected(camera_id, False, "Failed to open camera initially") while not stop_event.is_set(): try: @@ -443,20 +832,25 @@ async def detect(websocket: WebSocket): ret, frame = cap.read() if not ret: - logger.warning(f"Connection lost for camera: {camera_id}, retry {retries+1}/{max_retries}") + error_msg = f"Connection lost for camera: {camera_id}, retry {retries+1}/{max_retries}" + logger.warning(error_msg) + set_camera_connected(camera_id, False, error_msg) cap.release() time.sleep(reconnect_interval) retries += 1 if retries > max_retries and max_retries != -1: logger.error(f"Max retries reached for camera: {camera_id}, stopping frame reader") + set_camera_connected(camera_id, False, "Max retries reached") break # Re-open logger.info(f"Attempting to reopen RTSP stream for camera: {camera_id}") cap = cv2.VideoCapture(streams[camera_id]["rtsp_url"]) if not cap.isOpened(): logger.error(f"Failed to reopen RTSP stream for camera: {camera_id}") + set_camera_connected(camera_id, False, "Failed to reopen RTSP stream") continue logger.info(f"Successfully reopened RTSP stream for camera: {camera_id}") + set_camera_connected(camera_id, True) continue # Successfully read a frame @@ -470,6 +864,7 @@ async def detect(websocket: WebSocket): logger.debug(f"Successfully read frame from camera {camera_id}, shape: {frame.shape}") retries = 0 + set_camera_connected(camera_id, True) # Mark as connected on successful frame read # Overwrite old frame if buffer is full if not buffer.empty(): @@ -485,21 +880,28 @@ async def detect(websocket: WebSocket): time.sleep(0.01) except cv2.error as e: - logger.error(f"OpenCV error for camera {camera_id}: {e}", exc_info=True) + error_msg = f"OpenCV error for camera {camera_id}: {e}" + logger.error(error_msg, exc_info=True) + set_camera_connected(camera_id, False, error_msg) cap.release() time.sleep(reconnect_interval) retries += 1 if retries > max_retries and max_retries != -1: logger.error(f"Max retries reached after OpenCV error for camera {camera_id}") + set_camera_connected(camera_id, False, "Max retries reached after OpenCV error") break logger.info(f"Attempting to reopen RTSP stream after OpenCV error for camera: {camera_id}") cap = cv2.VideoCapture(streams[camera_id]["rtsp_url"]) if not cap.isOpened(): logger.error(f"Failed to reopen RTSP stream for camera {camera_id} after OpenCV error") + set_camera_connected(camera_id, False, "Failed to reopen after OpenCV error") continue logger.info(f"Successfully reopened RTSP stream after OpenCV error for camera: {camera_id}") + set_camera_connected(camera_id, True) except Exception as e: - logger.error(f"Unexpected error for camera {camera_id}: {str(e)}", exc_info=True) + error_msg = f"Unexpected error for camera {camera_id}: {str(e)}" + logger.error(error_msg, exc_info=True) + set_camera_connected(camera_id, False, error_msg) cap.release() break except Exception as e: @@ -517,6 +919,9 @@ async def detect(websocket: WebSocket): frame_count = 0 last_log_time = time.time() + # Initialize camera state + set_camera_connected(camera_id, True) + try: interval_seconds = snapshot_interval / 1000.0 # Convert milliseconds to seconds logger.info(f"Snapshot interval for camera {camera_id}: {interval_seconds}s") @@ -528,7 +933,9 @@ async def detect(websocket: WebSocket): if frame is None: consecutive_failures += 1 - logger.warning(f"Failed to fetch snapshot for camera: {camera_id}, consecutive failures: {consecutive_failures}") + error_msg = f"Failed to fetch snapshot for camera: {camera_id}, consecutive failures: {consecutive_failures}" + logger.warning(error_msg) + set_camera_connected(camera_id, False, error_msg) retries += 1 # Check network connectivity with a simple ping-like test @@ -541,6 +948,7 @@ async def detect(websocket: WebSocket): if retries > max_retries and max_retries != -1: logger.error(f"Max retries reached for snapshot camera: {camera_id}, stopping reader") + set_camera_connected(camera_id, False, "Max retries reached for snapshot camera") break # Exponential backoff based on consecutive failures @@ -562,6 +970,7 @@ async def detect(websocket: WebSocket): logger.debug(f"Successfully fetched snapshot from camera {camera_id}, shape: {frame.shape}") retries = 0 + set_camera_connected(camera_id, True) # Mark as connected on successful snapshot # Overwrite old frame if buffer is full if not buffer.empty(): @@ -581,10 +990,13 @@ async def detect(websocket: WebSocket): except Exception as e: consecutive_failures += 1 - logger.error(f"Unexpected error fetching snapshot for camera {camera_id}: {str(e)}", exc_info=True) + error_msg = f"Unexpected error fetching snapshot for camera {camera_id}: {str(e)}" + logger.error(error_msg, exc_info=True) + set_camera_connected(camera_id, False, error_msg) retries += 1 if retries > max_retries and max_retries != -1: logger.error(f"Max retries reached after error for snapshot camera {camera_id}") + set_camera_connected(camera_id, False, "Max retries reached after error") break # Exponential backoff for exceptions too @@ -769,6 +1181,23 @@ async def detect(websocket: WebSocket): streams[camera_id] = stream_info subscription_to_camera[camera_id] = camera_url logger.info(f"Subscribed to camera {camera_id}") + + # Send initial "none" detection to backend on camera connect + initial_detection_data = { + "type": "imageDetection", + "subscriptionIdentifier": subscriptionIdentifier, + "timestamp": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + "data": { + "detection": None, + "modelId": modelId, + "modelName": modelName + } + } + + ws_logger.info(f"TX -> {json.dumps(initial_detection_data, separators=(',', ':'))}") + await websocket.send_json(initial_detection_data) + logger.info(f"📡 Sent initial 'none' detection to backend for camera {camera_id}") + logger.debug(f"Initial detection data: {initial_detection_data}") async def unsubscribe_internal(subscription_id): """Internal unsubscription logic""" @@ -788,6 +1217,11 @@ async def detect(websocket: WebSocket): del camera_streams[camera_url] latest_frames.pop(subscription_id, None) + cached_detections.pop(subscription_id, None) # Clear cached detection + frame_skip_flags.pop(subscription_id, None) # Clear frame skip flag + camera_states.pop(subscription_id, None) # Clear camera state + cached_full_pipeline_results.pop(subscription_id, None) # Clear cached pipeline results + session_pipeline_states.pop(subscription_id, None) # Clear session pipeline state cleanup_camera_stability(subscription_id) logger.info(f"Unsubscribed from camera {subscription_id}") @@ -886,6 +1320,7 @@ async def detect(websocket: WebSocket): while True: try: msg = await websocket.receive_text() + ws_logger.info(f"RX <- {msg}") logger.debug(f"Received message: {msg}") data = json.loads(msg) msg_type = data.get("type") @@ -949,6 +1384,7 @@ async def detect(websocket: WebSocket): "subscriptionIdentifier": subscriptionIdentifier, "error": f"Failed to download model from {model_url}" } + ws_logger.info(f"TX -> {json.dumps(error_response, separators=(',', ':'))}") await websocket.send_json(error_response) continue model_tree = load_pipeline_from_zip(local_path, extraction_dir) @@ -963,6 +1399,7 @@ async def detect(websocket: WebSocket): "subscriptionIdentifier": subscriptionIdentifier, "error": f"Model file not found: {model_url}" } + ws_logger.info(f"TX -> {json.dumps(error_response, separators=(',', ':'))}") await websocket.send_json(error_response) continue model_tree = load_pipeline_from_zip(model_url, extraction_dir) @@ -1105,6 +1542,9 @@ async def detect(websocket: WebSocket): # Clean up cached frame and stability tracking latest_frames.pop(camera_id, None) + cached_detections.pop(camera_id, None) # Clear cached detection + frame_skip_flags.pop(camera_id, None) # Clear frame skip flag + camera_states.pop(camera_id, None) # Clear camera state cleanup_camera_stability(camera_id) logger.info(f"Unsubscribed from camera {camera_id}") # Note: Keep models in memory for potential reuse @@ -1148,33 +1588,67 @@ async def detect(websocket: WebSocket): display_identifier = payload.get("displayIdentifier") session_id = payload.get("sessionId") - logger.info(f"🆔 BACKEND SESSIONID RECEIVED: displayId={display_identifier}, sessionId={session_id}") + # Debug sessionId value types and contents + session_id_type = type(session_id).__name__ + if session_id is None: + logger.info(f"🆔 BACKEND SESSIONID RECEIVED: displayId={display_identifier}, sessionId=None (type: {session_id_type})") + logger.info(f"🔄 BACKEND WANTS TO CLEAR SESSION for display {display_identifier}") + elif session_id == "null": + logger.info(f"🆔 BACKEND SESSIONID RECEIVED: displayId={display_identifier}, sessionId='null' (type: {session_id_type})") + logger.info(f"🔄 BACKEND SENT STRING 'null' for display {display_identifier}") + elif session_id == "": + logger.info(f"🆔 BACKEND SESSIONID RECEIVED: displayId={display_identifier}, sessionId='' (empty string, type: {session_id_type})") + logger.info(f"🔄 BACKEND SENT EMPTY STRING for display {display_identifier}") + else: + logger.info(f"🆔 BACKEND SESSIONID RECEIVED: displayId={display_identifier}, sessionId='{session_id}' (type: {session_id_type}, length: {len(str(session_id))})") + logger.info(f"🔄 BACKEND CREATED/UPDATED SESSION: {session_id} for display {display_identifier}") + logger.debug(f"Full setSessionId payload: {payload}") + logger.debug(f"WebSocket message raw data: {json.dumps(data, indent=2)}") + logger.debug(f"Current active cameras: {list(streams.keys())}") if display_identifier: # Store session ID for this display - if session_id is None: + if session_id is None or session_id == "null" or session_id == "": + old_session_id = session_ids.get(display_identifier) session_ids.pop(display_identifier, None) - logger.info(f"🚫 BACKEND ENDED SESSION: Cleared session ID for display {display_identifier} - resetting tracking") + + if session_id is None: + logger.info(f"🚫 BACKEND ENDED SESSION: Cleared session ID for display {display_identifier} (was: {old_session_id}) - received None") + elif session_id == "null": + logger.info(f"🚫 BACKEND ENDED SESSION: Cleared session ID for display {display_identifier} (was: {old_session_id}) - received string 'null'") + elif session_id == "": + logger.info(f"🚫 BACKEND ENDED SESSION: Cleared session ID for display {display_identifier} (was: {old_session_id}) - received empty string") + + logger.debug(f"Session IDs after clearing: {session_ids}") # Reset tracking state for all cameras associated with this display with streams_lock: + affected_cameras = [] for camera_id, stream in streams.items(): if stream["subscriptionIdentifier"].startswith(display_identifier + ";"): + affected_cameras.append(camera_id) # Import here to avoid circular import from siwatsystem.pympta import reset_tracking_state model_id = stream.get("modelId", "unknown") reset_tracking_state(camera_id, model_id, "backend session ended") + + logger.info(f"Reset tracking for camera {camera_id} (display: {display_identifier})") + logger.debug(f"Reset tracking for {len(affected_cameras)} cameras: {affected_cameras}") else: + old_session_id = session_ids.get(display_identifier) session_ids[display_identifier] = session_id - logger.info(f"✅ BACKEND SESSION STARTED: Set session ID {session_id} for display {display_identifier}") - logger.debug(f"Current session_ids dict: {session_ids}") + logger.info(f"✅ BACKEND SESSION STARTED: Set session ID {session_id} for display {display_identifier} (previous: {old_session_id})") + logger.debug(f"Session IDs after update: {session_ids}") + logger.debug(f"🎯 CMS Backend created sessionId {session_id} after receiving detection data") # Clear waiting state for cameras associated with this display with streams_lock: + affected_cameras = [] for camera_id, stream in streams.items(): if stream["subscriptionIdentifier"].startswith(display_identifier + ";"): + affected_cameras.append(camera_id) from siwatsystem.pympta import get_camera_stability_data model_id = stream.get("modelId", "unknown") stability_data = get_camera_stability_data(camera_id, model_id) @@ -1182,7 +1656,11 @@ async def detect(websocket: WebSocket): if session_state.get("waiting_for_backend_session", False): session_state["waiting_for_backend_session"] = False session_state["wait_start_time"] = 0.0 - logger.info(f"🚀 PIPELINE UNBLOCKED: Backend sessionId {session_id} received - camera {camera_id} can proceed with pipeline") + logger.info(f"🚀 PIPELINE UNBLOCKED: Backend sessionId {session_id} received - camera {camera_id} can proceed with database operations") + logger.debug(f"📋 Camera {camera_id}: SessionId {session_id} now available for future database operations") + logger.debug(f"Updated session state for {len(affected_cameras)} cameras: {affected_cameras}") + else: + logger.warning(f"🚨 Invalid setSessionId message: missing displayIdentifier in payload") elif msg_type == "patchSession": session_id = data.get("sessionId") @@ -1197,6 +1675,7 @@ async def detect(websocket: WebSocket): "message": "Session patch acknowledged" } } + ws_logger.info(f"TX -> {json.dumps(response, separators=(',', ':'))}") await websocket.send_json(response) logger.info(f"Acknowledged patch for session {session_id}") @@ -1241,5 +1720,10 @@ async def detect(websocket: WebSocket): with models_lock: models.clear() latest_frames.clear() + cached_detections.clear() + frame_skip_flags.clear() + camera_states.clear() + cached_full_pipeline_results.clear() + session_pipeline_states.clear() session_ids.clear() logger.info("WebSocket connection closed") diff --git a/siwatsystem/pympta.py b/siwatsystem/pympta.py index 719fc93..d1158e8 100644 --- a/siwatsystem/pympta.py +++ b/siwatsystem/pympta.py @@ -100,9 +100,9 @@ def load_pipeline_node(node_config: dict, mpta_dir: str, redis_client, db_manage if name in trigger_classes] logger.debug(f"Converted trigger classes to indices: {trigger_class_indices}") - # Extract stability threshold from tracking config + # Extract stability threshold from main pipeline config (not tracking config) tracking_config = node_config.get("tracking", {"enabled": True, "reidConfigPath": "botsort.yaml"}) - stability_threshold = tracking_config.get("stabilityThreshold", 1) + stability_threshold = node_config.get("stabilityThreshold", 4) # Read from main config, default to 4 node = { "modelId": node_config["modelId"], @@ -113,6 +113,7 @@ def load_pipeline_node(node_config: dict, mpta_dir: str, redis_client, db_manage "crop": node_config.get("crop", False), "cropClass": node_config.get("cropClass"), "minConfidence": node_config.get("minConfidence", None), + "minBboxAreaRatio": node_config.get("minBboxAreaRatio", 0.0), "multiClass": node_config.get("multiClass", False), "expectedClasses": node_config.get("expectedClasses", []), "parallel": node_config.get("parallel", False), @@ -532,6 +533,7 @@ def resolve_field_mapping(value_template, branch_results, action_context): def run_detection_with_tracking(frame, node, context=None): """ Structured function for running YOLO detection with BoT-SORT tracking. + Now includes track ID-based validation requiring N consecutive frames of the same track ID. Args: frame: Input frame/image @@ -539,9 +541,10 @@ def run_detection_with_tracking(frame, node, context=None): context: Optional context information (camera info, session data, etc.) Returns: - tuple: (all_detections, regions_dict) where: + tuple: (all_detections, regions_dict, track_validation_result) where: - all_detections: List of all detection objects - regions_dict: Dict mapping class names to highest confidence detections + - track_validation_result: Dict with validation status and stable tracks Configuration options in node: - model: YOLO model instance @@ -551,13 +554,16 @@ def run_detection_with_tracking(frame, node, context=None): - expectedClasses: List of expected class names for multi-class validation - tracking: Dict with tracking configuration - enabled: Boolean to enable/disable tracking - - reidConfigPath: Path to ReID config file (default: "botsort.yaml") + - method: Tracking method ("botsort") + - reidConfig: Path to ReID config file + - stabilityThreshold: Number of consecutive frames required for validation """ try: # Extract tracking configuration tracking_config = node.get("tracking", {}) tracking_enabled = tracking_config.get("enabled", True) - reid_config_path = tracking_config.get("reidConfigPath", "botsort.yaml") + reid_config_path = tracking_config.get("reidConfig", tracking_config.get("reidConfigPath", "botsort.yaml")) + stability_threshold = tracking_config.get("stabilityThreshold", node.get("stabilityThreshold", 4)) # Check if we need to reset tracker after cooldown camera_id = context.get("camera_id", "unknown") if context else "unknown" @@ -579,7 +585,7 @@ def run_detection_with_tracking(frame, node, context=None): trigger_class_indices = node.get("triggerClassIndices") class_filter = {"classes": trigger_class_indices} if trigger_class_indices else {} - logger.debug(f"Running detection for {node['modelId']} - tracking: {tracking_enabled}, classes: {node.get('triggerClasses', 'all')}") + logger.debug(f"Running detection for {node['modelId']} - tracking: {tracking_enabled}, stability_threshold: {stability_threshold}, classes: {node.get('triggerClasses', 'all')}") if tracking_enabled and tracking_zone: # Use tracking with zone validation @@ -614,23 +620,29 @@ def run_detection_with_tracking(frame, node, context=None): min_confidence = node.get("minConfidence", 0.0) if res.boxes is None or len(res.boxes) == 0: - logger.debug("No detections found") - return [], {} + logger.debug(f"🚫 Camera {camera_id}: YOLO returned no detections") + + # Update stability tracking even when no detection (to reset counters) + camera_id = context.get("camera_id", "unknown") if context else "unknown" + model_id = node.get("modelId", "unknown") + track_validation_result = update_single_track_stability(node, None, camera_id, frame.shape, stability_threshold) + + # Store validation state in context for pipeline decisions + if context is not None: + context["track_validation_result"] = track_validation_result + + return [], {}, track_validation_result - logger.debug(f"Processing {len(res.boxes)} raw detections") + logger.debug(f"🔍 Camera {camera_id}: YOLO detected {len(res.boxes)} raw objects - processing with tracking...") # First pass: collect all valid detections + logger.debug(f"🔍 Camera {camera_id}: === DETECTION ANALYSIS ===") for i, box in enumerate(res.boxes): # Extract detection data conf = float(box.cpu().conf[0]) cls_id = int(box.cpu().cls[0]) class_name = node["model"].names[cls_id] - # Apply confidence filtering - if conf < min_confidence: - logger.debug(f"Detection {i} '{class_name}' rejected: {conf:.3f} < {min_confidence}") - continue - # Extract bounding box xy = box.cpu().xyxy[0] x1, y1, x2, y2 = map(int, xy) @@ -641,6 +653,13 @@ def run_detection_with_tracking(frame, node, context=None): if hasattr(box, "id") and box.id is not None: track_id = int(box.id.item()) + logger.debug(f"🔍 Camera {camera_id}: Detection {i+1}: class='{class_name}' conf={conf:.3f} track_id={track_id} bbox={bbox}") + + # Apply confidence filtering + if conf < min_confidence: + logger.debug(f"❌ Camera {camera_id}: Detection {i+1} REJECTED - confidence {conf:.3f} < {min_confidence}") + continue + # Apply tracking zone validation if enabled if tracking_enabled and tracking_zone: bbox_center_x = (x1 + x2) // 2 @@ -648,7 +667,7 @@ def run_detection_with_tracking(frame, node, context=None): # Check if detection center is within tracking zone if not _point_in_polygon((bbox_center_x, bbox_center_y), tracking_zone): - logger.debug(f"Detection {i} '{class_name}' outside tracking zone") + logger.debug(f"❌ Camera {camera_id}: Detection {i+1} REJECTED - outside tracking zone") continue # Create detection object @@ -661,17 +680,38 @@ def run_detection_with_tracking(frame, node, context=None): } candidate_detections.append(detection) - logger.debug(f"Detection {i} candidate: {class_name} (conf={conf:.3f}, id={track_id}, bbox={bbox})") + logger.debug(f"✅ Camera {camera_id}: Detection {i+1} ACCEPTED as candidate: {class_name} (conf={conf:.3f}, track_id={track_id})") # Second pass: select only the highest confidence detection overall if not candidate_detections: - logger.debug("No valid candidate detections found") - return [], {} + logger.debug(f"🚫 Camera {camera_id}: No valid candidates after filtering - no car will be tracked") + + # Update stability tracking even when no detection (to reset counters) + camera_id = context.get("camera_id", "unknown") if context else "unknown" + model_id = node.get("modelId", "unknown") + track_validation_result = update_single_track_stability(node, None, camera_id, frame.shape, stability_threshold) + + # Store validation state in context for pipeline decisions + if context is not None: + context["track_validation_result"] = track_validation_result + + return [], {}, track_validation_result + + logger.debug(f"🏆 Camera {camera_id}: === SELECTING HIGHEST CONFIDENCE CAR ===") + for i, detection in enumerate(candidate_detections): + logger.debug(f"🏆 Camera {camera_id}: Candidate {i+1}: {detection['class']} conf={detection['confidence']:.3f} track_id={detection['id']}") # Find the single highest confidence detection across all detected classes best_detection = max(candidate_detections, key=lambda x: x["confidence"]) original_class = best_detection["class"] - logger.info(f"Selected highest confidence detection: {original_class} (conf={best_detection['confidence']:.3f})") + track_id = best_detection["id"] + + logger.info(f"🎯 Camera {camera_id}: SELECTED WINNER: {original_class} (conf={best_detection['confidence']:.3f}, track_id={track_id}, bbox={best_detection['bbox']})") + + # Show which cars were NOT selected + for detection in candidate_detections: + if detection != best_detection: + logger.debug(f"🚫 Camera {camera_id}: NOT SELECTED: {detection['class']} (conf={detection['confidence']:.3f}, track_id={detection['id']}) - lower confidence") # Apply class mapping if configured mapped_class = original_class @@ -683,14 +723,14 @@ def run_detection_with_tracking(frame, node, context=None): best_detection["class"] = mapped_class best_detection["original_class"] = original_class # Keep original for reference - # Keep only the best detection with mapped class + # Keep only the single best detection with mapped class all_detections = [best_detection] regions_dict = { mapped_class: { "bbox": best_detection["bbox"], "confidence": best_detection["confidence"], "detection": best_detection, - "track_id": best_detection["id"] + "track_id": track_id } } @@ -709,18 +749,26 @@ def run_detection_with_tracking(frame, node, context=None): logger.info(f"Multi-class validation passed: {matching_classes} detected") - logger.info(f"Detection completed: {len(all_detections)} detections, {len(regions_dict)} unique classes") + logger.info(f"✅ Camera {camera_id}: DETECTION COMPLETE - tracking single car: track_id={track_id}, conf={best_detection['confidence']:.3f}") + logger.debug(f"📊 Camera {camera_id}: Detection summary: {len(res.boxes)} raw → {len(candidate_detections)} candidates → 1 selected") - # Update stability tracking for detections with track IDs (requires camera_id from context) + # Update track-based stability tracking for the single selected car camera_id = context.get("camera_id", "unknown") if context else "unknown" - update_track_stability(node, all_detections, camera_id) + model_id = node.get("modelId", "unknown") - return all_detections, regions_dict + # Update stability tracking for the single best detection + track_validation_result = update_single_track_stability(node, best_detection, camera_id, frame.shape, stability_threshold) + + # Store validation state in context for pipeline decisions + if context is not None: + context["track_validation_result"] = track_validation_result + + return all_detections, regions_dict, track_validation_result except Exception as e: logger.error(f"Error in detection_with_tracking for {node.get('modelId', 'unknown')}: {e}") logger.debug(f"Detection error traceback: {traceback.format_exc()}") - return [], {} + return [], {}, {"validation_complete": False, "stable_tracks": [], "current_tracks": []} def _point_in_polygon(point, polygon): """Check if a point is inside a polygon using ray casting algorithm.""" @@ -755,51 +803,270 @@ def get_camera_stability_data(camera_id, model_id): if model_id not in _camera_stability_tracking[camera_id]: logger.warning(f"🔄 Camera {camera_id}: Creating NEW stability data for {model_id} - this will reset any cooldown!") _camera_stability_tracking[camera_id][model_id] = { - "track_stability_counters": {}, - "stable_tracks": set(), + "track_stability_counters": {}, # Track ID -> consecutive frame count + "stable_tracks": set(), # Set of track IDs that have reached stability threshold "session_state": { "active": True, "waiting_for_backend_session": False, "wait_start_time": 0.0, "reset_tracker_on_resume": False + }, + "occupancy_state": { + "phase": "validation", # "validation", "waiting_for_session", or "occupancy" + "absence_counter": 0, # Count consecutive frames without stable tracks + "max_absence_frames": 3, # Trigger "none" after this many absent frames + "pipeline_completed": False # Track if full pipeline has run } + # Removed detection_counter - using only track-based validation now } return _camera_stability_tracking[camera_id][model_id] -def update_track_stability(node, detections, camera_id): - """Update stability counters for tracked objects per camera.""" - stability_threshold = node.get("stabilityThreshold", 1) +def update_single_track_stability(node, detection, camera_id, frame_shape=None, stability_threshold=4): + """Update track stability validation for a single highest confidence car.""" model_id = node.get("modelId", "unknown") + # Branch nodes should not do validation - only main pipeline should + is_branch_node = node.get("cropClass") is not None or node.get("parallel") is True + if is_branch_node: + logger.debug(f"⏭️ Camera {camera_id}: Skipping validation for branch node {model_id} - validation only done at main pipeline level") + return {"validation_complete": False, "branch_node": True, "stable_tracks": [], "current_tracks": []} + # Get camera-specific stability data stability_data = get_camera_stability_data(camera_id, model_id) track_counters = stability_data["track_stability_counters"] stable_tracks = stability_data["stable_tracks"] + occupancy_state = stability_data["occupancy_state"] - # Get current track IDs from detections - current_track_ids = set() - for detection in detections: - track_id = detection.get("id") - if track_id is not None: - current_track_ids.add(track_id) + current_phase = occupancy_state["phase"] + current_track_id = detection.get("id") if detection else None + + if current_phase == "validation": + # ═══ VALIDATION PHASE: Count consecutive frames for single track ═══ + logger.debug(f"📋 Camera {camera_id}: === TRACK VALIDATION ANALYSIS ===") + logger.debug(f"📋 Camera {camera_id}: Current track_id: {current_track_id}") + logger.debug(f"📋 Camera {camera_id}: Existing counters: {dict(track_counters)}") + logger.debug(f"📋 Camera {camera_id}: Stable tracks: {list(stable_tracks)}") + + if current_track_id is not None: + # Check if this is a different track than we were tracking + previous_track_ids = list(track_counters.keys()) - # Increment counter for this track - track_counters[track_id] = track_counters.get(track_id, 0) + 1 + # ALWAYS reset counter if: + # 1. This is a different track ID than before + # 2. OR if we had no previous tracking (fresh start) + should_reset = ( + len(previous_track_ids) == 0 or # No previous tracking + current_track_id not in previous_track_ids # Different track ID + ) - # Check if track becomes stable - if track_counters[track_id] >= stability_threshold and track_id not in stable_tracks: - stable_tracks.add(track_id) - logger.info(f"Camera {camera_id}: Track ID {track_id} became stable after {track_counters[track_id]} detections (threshold: {stability_threshold})") + logger.debug(f"📋 Camera {camera_id}: Previous track_ids: {previous_track_ids}") + logger.debug(f"📋 Camera {camera_id}: Should reset counters: {should_reset} (no_previous={len(previous_track_ids) == 0}, different_id={current_track_id not in previous_track_ids})") + + if should_reset and previous_track_ids: + # Clear all previous tracking - different car detected + for old_track_id in previous_track_ids: + old_count = track_counters.pop(old_track_id, 0) + stable_tracks.discard(old_track_id) + logger.info(f"🔄 Camera {camera_id}: Different car detected (track {current_track_id}) - RESET previous track {old_track_id} counter from {old_count} to 0") + logger.debug(f"🔄 Camera {camera_id}: Cleared track {old_track_id} from counters and stable_tracks") + + # Set counter to 1 for current track (fresh start each frame) + old_count = track_counters.get(current_track_id, 0) + track_counters[current_track_id] = track_counters.get(current_track_id, 0) + 1 + current_count = track_counters[current_track_id] + + logger.debug(f"🔢 Camera {camera_id}: Track {current_track_id} counter: {old_count} → {current_count}") + logger.info(f"🔍 Camera {camera_id}: Track ID {current_track_id} validation {current_count}/{stability_threshold}") + + # Check if track has reached stability threshold + logger.debug(f"📊 Camera {camera_id}: Checking stability: {current_count} >= {stability_threshold}? {current_count >= stability_threshold}") + logger.debug(f"📊 Camera {camera_id}: Already stable: {current_track_id in stable_tracks}") + + if current_count >= stability_threshold and current_track_id not in stable_tracks: + stable_tracks.add(current_track_id) + occupancy_state["phase"] = "waiting_for_session" + occupancy_state["pipeline_completed"] = False + logger.info(f"✅ Camera {camera_id}: Track ID {current_track_id} STABLE after {current_count} consecutive frames") + logger.info(f"🎯 Camera {camera_id}: TRACK VALIDATION COMPLETE") + logger.debug(f"🎯 Camera {camera_id}: Phase changed to: waiting_for_session") + logger.debug(f"🎯 Camera {camera_id}: Stable tracks now: {list(stable_tracks)}") + return { + "validation_complete": True, + "send_none_detection": True, + "stable_tracks": [current_track_id], + "newly_stable_tracks": [current_track_id], + "current_tracks": [current_track_id] + } + elif current_count >= stability_threshold: + logger.debug(f"📊 Camera {camera_id}: Track {current_track_id} already stable - not re-adding") + else: + # No car detected - ALWAYS clear all tracking and reset counters + logger.debug(f"🚫 Camera {camera_id}: NO CAR DETECTED - clearing all tracking") + if track_counters: + logger.debug(f"🚫 Camera {camera_id}: Existing counters before reset: {dict(track_counters)}") + for track_id in list(track_counters.keys()): + old_count = track_counters.pop(track_id, 0) + stable_tracks.discard(track_id) + logger.info(f"🔄 Camera {camera_id}: No car detected - RESET track {track_id} counter from {old_count} to 0") + logger.debug(f"🚫 Camera {camera_id}: Cleared track {track_id} (was at {old_count}/{stability_threshold})") + track_counters.clear() # Ensure complete reset + stable_tracks.clear() # Clear all stable tracks + logger.debug(f"🚫 Camera {camera_id}: All counters and stable tracks cleared") + else: + logger.debug(f"🚫 Camera {camera_id}: No existing counters to clear") + logger.debug(f"Camera {camera_id}: VALIDATION - no car detected (all counters reset)") - # Clean up counters for tracks that disappeared - disappeared_tracks = set(track_counters.keys()) - current_track_ids - for track_id in disappeared_tracks: - logger.debug(f"Camera {camera_id}: Track ID {track_id} disappeared, removing from counters") - track_counters.pop(track_id, None) - stable_tracks.discard(track_id) + elif current_phase == "waiting_for_session": + # ═══ WAITING PHASE: Maintain track stability ═══ + logger.debug(f"⏳ Camera {camera_id}: WAITING FOR SESSION - monitoring stable track") + logger.debug(f"⏳ Camera {camera_id}: Current track_id: {current_track_id}, Stable tracks: {list(stable_tracks)}") + + if current_track_id is None or current_track_id not in stable_tracks: + # Lost the stable track + logger.debug(f"⏳ Camera {camera_id}: Stable track lost - clearing all tracking") + stable_tracks.clear() + track_counters.clear() + logger.info(f"🔄 Camera {camera_id}: Lost stable track during waiting phase") + else: + logger.debug(f"⏳ Camera {camera_id}: Stable track {current_track_id} still present") + + elif current_phase == "occupancy": + # ═══ OCCUPANCY PHASE: Monitor track presence ═══ + logger.debug(f"🏢 Camera {camera_id}: OCCUPANCY MONITORING") + logger.debug(f"🏢 Camera {camera_id}: Current track_id: {current_track_id}, Stable tracks: {list(stable_tracks)}") + logger.debug(f"🏢 Camera {camera_id}: Absence counter before: {occupancy_state['absence_counter']}") + + if current_track_id is not None and current_track_id in stable_tracks: + old_absence = occupancy_state["absence_counter"] + occupancy_state["absence_counter"] = 0 + if old_absence > 0: + logger.debug(f"🏢 Camera {camera_id}: Stable car returned - absence counter reset from {old_absence} to 0") + else: + occupancy_state["absence_counter"] += 1 + logger.debug(f"🏢 Camera {camera_id}: Stable car absent - absence counter: {occupancy_state['absence_counter']}") + if occupancy_state["absence_counter"] == 1: + logger.info(f"👻 Camera {camera_id}: Stable car disappeared - absence counter: {occupancy_state['absence_counter']}") - logger.debug(f"Camera {camera_id}: Track stability: active={list(current_track_ids)}, stable={list(stable_tracks)}, counters={track_counters}") + # Final return - validation not complete + result = { + "validation_complete": False, + "stable_tracks": list(stable_tracks), + "current_tracks": [current_track_id] if current_track_id is not None else [] + } + + logger.debug(f"📋 Camera {camera_id}: Track stability result: {result}") + logger.debug(f"📋 Camera {camera_id}: Final counters: {dict(track_counters)}") + logger.debug(f"📋 Camera {camera_id}: Final stable tracks: {list(stable_tracks)}") + + return result + +# Keep the old function for backward compatibility but mark as deprecated +def update_track_stability_validation(node, detections, camera_id, frame_shape=None, stability_threshold=4): + """DEPRECATED: Use update_single_track_stability instead.""" + logger.warning(f"update_track_stability_validation called for camera {camera_id} - this function is deprecated, use update_single_track_stability instead") + if detections: + best_detection = max(detections, key=lambda x: x.get("confidence", 0)) + return update_single_track_stability(node, best_detection, camera_id, frame_shape, stability_threshold) + else: + return update_single_track_stability(node, None, camera_id, frame_shape, stability_threshold) + +def update_detection_stability(node, detections, camera_id, frame_shape=None): + """Legacy detection-based stability counter - DEPRECATED.""" + # This function is deprecated in favor of track-based validation only + logger.warning(f"update_detection_stability called for camera {camera_id} - this function is deprecated, use track-based validation instead") + return {"validation_complete": False, "valid_detections": 0, "deprecated": True} + +def update_track_stability(node, detections, camera_id, frame_shape=None): + """Update stability counters with two-phase detection system: validation → occupancy.""" + stability_threshold = node.get("stabilityThreshold", 1) + model_id = node.get("modelId", "unknown") + min_bbox_area_ratio = node.get("minBboxAreaRatio", 0.0) + + # Note: This function is deprecated - using detection-based stability now + + # Get camera-specific stability data + stability_data = get_camera_stability_data(camera_id, model_id) + track_counters = stability_data["track_stability_counters"] + stable_tracks = stability_data["stable_tracks"] + occupancy_state = stability_data["occupancy_state"] + + # Validate detections against confidence + area requirements + valid_detections = [] + if frame_shape is not None: + frame_height, frame_width = frame_shape[:2] + frame_area = frame_width * frame_height + + for detection in detections: + bbox = detection.get("bbox", []) + if len(bbox) >= 4: + x1, y1, x2, y2 = bbox + bbox_width = abs(x2 - x1) + bbox_height = abs(y2 - y1) + bbox_area = bbox_width * bbox_height + area_ratio = bbox_area / frame_area if frame_area > 0 else 0.0 + + if area_ratio >= min_bbox_area_ratio: + valid_detections.append(detection) + pass # Valid detection - no debug spam + else: + pass # Small detection - no debug spam + else: + valid_detections = detections + + current_phase = occupancy_state["phase"] + + if current_phase == "validation": + # ═══ VALIDATION PHASE: Count detections until stable ═══ + detection_key = f"camera_{camera_id}_detections" + + if valid_detections: + # Valid detection found - increment counter + track_counters[detection_key] = track_counters.get(detection_key, 0) + 1 + current_count = track_counters[detection_key] + + pass # Validation count - shown in main logs + + # Check if we've reached the stability threshold + if current_count >= stability_threshold and detection_key not in stable_tracks: + stable_tracks.add(detection_key) + # Switch to waiting for backend session phase + occupancy_state["phase"] = "waiting_for_session" + occupancy_state["absence_counter"] = 0 + occupancy_state["pipeline_completed"] = False + logger.info(f"✅ Camera {camera_id}: VALIDATION COMPLETE after {current_count} detections - READY FOR FULL PIPELINE") + else: + # No valid detections - reset validation counter for consecutive requirement + if detection_key in track_counters: + old_count = track_counters[detection_key] + track_counters.pop(detection_key, None) + stable_tracks.discard(detection_key) + logger.info(f"🔄 Camera {camera_id}: VALIDATION RESET - no valid detection, counter reset from {old_count} to 0 (requires consecutive detections)") + else: + logger.debug(f"Camera {camera_id}: VALIDATION - no valid detection, counter remains 0") + + elif current_phase == "waiting_for_session": + # ═══ WAITING FOR BACKEND SESSION PHASE ═══ + # Don't do occupancy monitoring yet, just maintain validation of current detections + # The main pipeline will handle sessionId detection and phase transition + pass # Waiting phase - no occupancy logic yet + + elif current_phase == "occupancy": + # ═══ OCCUPANCY PHASE: Monitor car presence ═══ + if valid_detections: + # Car still present - reset absence counter + if occupancy_state["absence_counter"] > 0: + pass # Car detected - counter reset (no debug spam) + occupancy_state["absence_counter"] = 0 + else: + # No car detected - increment absence counter + occupancy_state["absence_counter"] += 1 + pass # Absence count - will show in timeout log + + pass # Phase summary - excessive debug + + # Return occupancy state for pipeline decisions + return occupancy_state def check_stable_tracks(camera_id, model_id, regions_dict): """Check if any stable tracks match the detected classes for a specific camera.""" @@ -810,8 +1077,9 @@ def check_stable_tracks(camera_id, model_id, regions_dict): if not stable_tracks: return False, [] - # Check if any detection in regions_dict has a stable track ID + # Check for track-based stability stable_detections = [] + for class_name, region_data in regions_dict.items(): detection = region_data.get("detection", {}) track_id = detection.get("id") @@ -868,6 +1136,35 @@ def cleanup_camera_stability(camera_id): del _camera_stability_tracking[camera_id] logger.info(f"Cleaned up stability tracking data for camera {camera_id}") +def occupancy_detector(camera_id, model_id, enable=True): + """ + Temporary function to stop model inference after pipeline completion. + + Args: + camera_id (str): Camera identifier + model_id (str): Model identifier + enable (bool): True to enable occupancy mode (stop model after pipeline), False to disable + + When enabled: + - Model stops inference after completing full pipeline + - Backend sessionId handling continues in background + + Note: This is a temporary function that will be changed in the future. + """ + stability_data = get_camera_stability_data(camera_id, model_id) + session_state = stability_data["session_state"] + + if enable: + session_state["occupancy_mode"] = True + session_state["occupancy_enabled_at"] = time.time() + logger.info(f"Camera {camera_id}: 🏢 OCCUPANCY MODE ENABLED - model will stop after pipeline completion") + else: + session_state["occupancy_mode"] = False + session_state.pop("occupancy_enabled_at", None) + logger.info(f"Camera {camera_id}: 🔄 OCCUPANCY MODE DISABLED - model will continue running") + + return session_state.get("occupancy_mode", False) + def validate_pipeline_execution(node, regions_dict): """ Pre-validate that all required branches will execute successfully before @@ -927,6 +1224,143 @@ def validate_pipeline_execution(node, regions_dict): logger.info(f"Pipeline pre-validation PASSED: all required branches {list(required_branches)} will execute") return True, [] +def run_lightweight_detection_with_validation(frame, node: dict, min_confidence=0.7, min_bbox_area_ratio=0.3): + """ + Run lightweight detection with validation rules for session ID triggering. + Returns detection info only if it passes validation thresholds. + """ + logger.debug(f"Running lightweight detection with validation: {node['modelId']} (conf>={min_confidence}, bbox_area>={min_bbox_area_ratio})") + + try: + # Run basic detection only - no branches, no actions + model = node["model"] + trigger_classes = node.get("triggerClasses", []) + trigger_class_indices = node.get("triggerClassIndices") + + # Run YOLO inference + res = model(frame, verbose=False) + + best_detection = None + frame_height, frame_width = frame.shape[:2] + frame_area = frame_height * frame_width + + for r in res: + boxes = r.boxes + if boxes is None or len(boxes) == 0: + continue + + for box in boxes: + # Extract detection info + xyxy = box.xyxy[0].cpu().numpy() + conf = box.conf[0].cpu().numpy() + cls_id = int(box.cls[0].cpu().numpy()) + class_name = model.names[cls_id] + + # Apply confidence threshold + if conf < min_confidence: + continue + + # Apply trigger class filtering if specified + if trigger_class_indices and cls_id not in trigger_class_indices: + continue + if trigger_classes and class_name not in trigger_classes: + continue + + # Calculate bbox area ratio + x1, y1, x2, y2 = xyxy + bbox_area = (x2 - x1) * (y2 - y1) + bbox_area_ratio = bbox_area / frame_area if frame_area > 0 else 0 + + # Apply bbox area threshold + if bbox_area_ratio < min_bbox_area_ratio: + logger.debug(f"Detection filtered out: bbox_area_ratio={bbox_area_ratio:.3f} < {min_bbox_area_ratio}") + continue + + # Validation passed + if not best_detection or conf > best_detection["confidence"]: + best_detection = { + "class": class_name, + "confidence": float(conf), + "bbox": [int(x) for x in xyxy], + "bbox_area_ratio": float(bbox_area_ratio), + "validation_passed": True + } + + if best_detection: + logger.debug(f"Validation PASSED: {best_detection['class']} (conf: {best_detection['confidence']:.3f}, area: {best_detection['bbox_area_ratio']:.3f})") + return best_detection + else: + logger.debug(f"Validation FAILED: No detection meets criteria (conf>={min_confidence}, area>={min_bbox_area_ratio})") + return {"validation_passed": False} + + except Exception as e: + logger.error(f"Error in lightweight detection with validation: {str(e)}", exc_info=True) + return {"validation_passed": False} + +def run_lightweight_detection(frame, node: dict): + """ + Run lightweight detection for car presence validation only. + Returns basic detection info without running branches or external actions. + """ + logger.debug(f"Running lightweight detection: {node['modelId']}") + + try: + # Run basic detection only - no branches, no actions + model = node["model"] + min_confidence = node.get("minConfidence", 0.5) + trigger_classes = node.get("triggerClasses", []) + trigger_class_indices = node.get("triggerClassIndices") + + # Run YOLO inference + res = model(frame, verbose=False) + + car_detected = False + best_detection = None + + for r in res: + boxes = r.boxes + if boxes is None or len(boxes) == 0: + continue + + for box in boxes: + # Extract detection info + xyxy = box.xyxy[0].cpu().numpy() + conf = box.conf[0].cpu().numpy() + cls_id = int(box.cls[0].cpu().numpy()) + class_name = model.names[cls_id] + + # Apply confidence threshold + if conf < min_confidence: + continue + + # Apply trigger class filtering if specified + if trigger_class_indices and cls_id not in trigger_class_indices: + continue + if trigger_classes and class_name not in trigger_classes: + continue + + # Car detected + car_detected = True + if not best_detection or conf > best_detection["confidence"]: + best_detection = { + "class": class_name, + "confidence": float(conf), + "bbox": [int(x) for x in xyxy] + } + + logger.debug(f"Lightweight detection result: car_detected={car_detected}") + if best_detection: + logger.debug(f"Best detection: {best_detection['class']} (conf: {best_detection['confidence']:.3f})") + + return { + "car_detected": car_detected, + "best_detection": best_detection + } + + except Exception as e: + logger.error(f"Error in lightweight detection: {str(e)}", exc_info=True) + return {"car_detected": False, "best_detection": None} + def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): """ Enhanced pipeline that supports: @@ -943,8 +1377,6 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): if backend_session_id: logger.info(f"🔑 PIPELINE USING BACKEND SESSION_ID: {backend_session_id} for camera {camera_id}") - else: - logger.debug(f"❌ No backend session_id in pipeline context for camera {camera_id}") task = getattr(node["model"], "task", None) @@ -982,61 +1414,163 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): execute_actions(node, frame, det, context.get("regions_dict") if context else None) return (det, None) if return_bbox else det + # ─── Occupancy mode check (stop future frames after pipeline completion) ─────────────────────────────────────── + # Old occupancy mode logic removed - now using two-phase detection system + # ─── Session management check ─────────────────────────────────────── if not is_camera_active(camera_id, model_id): - logger.debug(f"⏰ Camera {camera_id}: Waiting for backend sessionId, skipping pipeline") - return (None, None) if return_bbox else None + logger.debug(f"⏰ Camera {camera_id}: Waiting for backend sessionId, sending 'none' detection") + none_detection = { + "class": "none", + "confidence": 1.0, + "bbox": [0, 0, 0, 0], + "branch_results": {} + } + return (none_detection, [0, 0, 0, 0]) if return_bbox else none_detection # ─── Detection stage - Using structured detection function ────────────────── - all_detections, regions_dict = run_detection_with_tracking(frame, node, context) + all_detections, regions_dict, track_validation_result = run_detection_with_tracking(frame, node, context) if not all_detections: - logger.warning("No detections from structured detection function - returning null") - return (None, None) if return_bbox else None + logger.debug("No detections from structured detection function - sending 'none' detection") + none_detection = { + "class": "none", + "confidence": 1.0, + "bbox": [0, 0, 0, 0], + "branch_results": {} + } + return (none_detection, [0, 0, 0, 0]) if return_bbox else none_detection # Extract bounding boxes for compatibility all_boxes = [det["bbox"] for det in all_detections] - # ─── Stability validation (only for root pipeline node) ──────────────────────── - stability_threshold = node.get("stabilityThreshold", 1) - if stability_threshold > 1: - # Extract camera_id for stability check - camera_id = context.get("camera_id", "unknown") if context else "unknown" + # ─── Track-Based Validation System: Using Track ID Stability ──────────────────────── + tracking_config = node.get("tracking", {}) + stability_threshold = tracking_config.get("stabilityThreshold", node.get("stabilityThreshold", 1)) + + camera_id = context.get("camera_id", "unknown") if context else "unknown" + + if stability_threshold > 1 and tracking_config.get("enabled", True): + # Extract occupancy state from stability data (updated by track validation function) model_id = node.get("modelId", "unknown") + stability_data = get_camera_stability_data(camera_id, model_id) + occupancy_state = stability_data["occupancy_state"] - # Check if we have stable tracks for this specific camera - has_stable_tracks, stable_detections = check_stable_tracks(camera_id, model_id, regions_dict) + current_phase = occupancy_state.get("phase", "validation") + absence_counter = occupancy_state.get("absence_counter", 0) + max_absence_frames = occupancy_state.get("max_absence_frames", 3) - if not has_stable_tracks: - logger.info(f"Camera {camera_id}: Track not stable yet (threshold: {stability_threshold}) - validation only, skipping branches") - # Return early with just the detection result, no branch processing - primary_detection = max(all_detections, key=lambda x: x["confidence"]) if all_detections else {"class": "none", "confidence": 0.0, "bbox": [0, 0, 0, 0]} - primary_bbox = primary_detection.get("bbox", [0, 0, 0, 0]) - return (primary_detection, primary_bbox) if return_bbox else primary_detection - else: - logger.info(f"Camera {camera_id}: Stable tracks {[det[1] for det in stable_detections]} detected - checking backend sessionId") + if current_phase == "validation": + # ═══ TRACK VALIDATION PHASE ═══ + # Check if this is a branch node - branches should execute regardless of main validation state + is_branch_node = node.get("cropClass") is not None or node.get("parallel") is True - # Check if we need to wait for backend sessionId - if not backend_session_id: - logger.info(f"Camera {camera_id}: Stable car detected, waiting for backend sessionId...") + if is_branch_node: + # This is a branch node - allow normal execution regardless of main pipeline validation + logger.debug(f"🔍 Camera {camera_id}: Branch node {model_id} executing during track validation phase") + else: + # Main pipeline node during track validation - check for stable tracks + stable_tracks = track_validation_result.get("stable_tracks", []) + + if not stable_tracks: + # No stable tracks yet - return detection without branches until track validation completes + if all_detections: + # Return the best detection but skip branches during validation + primary_detection = max(all_detections, key=lambda x: x["confidence"]) + logger.debug(f"🔍 Camera {camera_id}: TRACK VALIDATION PHASE - returning detection without branches (stable_tracks: {len(stable_tracks)}, sessionId: {backend_session_id or 'none'})") + else: + # No detection - return none + primary_detection = {"class": "none", "confidence": 0.0, "bbox": [0, 0, 0, 0]} + logger.debug(f"🔍 Camera {camera_id}: TRACK VALIDATION PHASE - no detection found (sessionId: {backend_session_id or 'none'})") + + primary_bbox = primary_detection.get("bbox", [0, 0, 0, 0]) + return (primary_detection, primary_bbox) if return_bbox else primary_detection + else: + # We have stable tracks - validation is complete, proceed with pipeline + logger.info(f"🎯 Camera {camera_id}: STABLE TRACKS DETECTED - proceeding with full pipeline (tracks: {stable_tracks})") + + elif current_phase == "waiting_for_session": + # ═══ WAITING FOR BACKEND SESSION PHASE ═══ + if backend_session_id: + # Backend has responded with sessionId - NOW run the full pipeline for the first time + logger.info(f"🎯 Camera {camera_id}: BACKEND SESSION RECEIVED - RUNNING FULL PIPELINE (sessionId: {backend_session_id})") + occupancy_state["phase"] = "occupancy" + occupancy_state["absence_counter"] = 0 + # Continue with normal pipeline processing now that we have sessionId + else: + # Still waiting for backend sessionId - send None detection dict to trigger sessionId generation + if not occupancy_state["pipeline_completed"]: + # First time in waiting phase - send empty detection to trigger sessionId + logger.info(f"⚙️ Camera {camera_id}: WAITING PHASE - sending empty detection {{}} for sessionId generation") + occupancy_state["pipeline_completed"] = True + + # Return a special detection that signals app.py to send empty detection: {} + none_detection = { + "class": "validation_complete", + "confidence": 1.0, + "bbox": [0, 0, 0, 0], + "send_empty_detection": True + } + return (none_detection, [0, 0, 0, 0]) if return_bbox else none_detection + else: + # Already sent None detection - continue waiting for sessionId + logger.debug(f"⏳ Camera {camera_id}: WAITING FOR BACKEND SESSION - None detection already sent, waiting for sessionId") + + waiting_detection = { + "class": "waiting_session_id", + "confidence": 1.0, + "bbox": [0, 0, 0, 0], + "waiting_for_session": True + } + return (waiting_detection, [0, 0, 0, 0]) if return_bbox else waiting_detection + + elif current_phase == "occupancy": + # ═══ OCCUPANCY PHASE ═══ + stable_tracks = track_validation_result.get("stable_tracks", []) + current_tracks = track_validation_result.get("current_tracks", []) + + # Check if any stable tracks are still present + stable_tracks_present = bool(set(stable_tracks) & set(current_tracks)) + + if absence_counter >= max_absence_frames: + # Stable tracks have been absent for too long - trigger "none" detection and reset + logger.info(f"🕒 Camera {camera_id}: OCCUPANCY TIMEOUT - Stable tracks absent for {absence_counter} frames, resetting to validation (sessionId: {backend_session_id or 'none'})") + + # Reset occupancy state to validation phase stability_data = get_camera_stability_data(camera_id, model_id) - session_state = stability_data["session_state"] + stability_data["occupancy_state"]["phase"] = "validation" + stability_data["occupancy_state"]["absence_counter"] = 0 + stability_data["track_stability_counters"].clear() + stability_data["stable_tracks"].clear() - if not session_state.get("waiting_for_backend_session", False): - # Start waiting for backend sessionId - session_state["waiting_for_backend_session"] = True - session_state["wait_start_time"] = time.time() - logger.info(f"⏳ Camera {camera_id}: WAITING FOR BACKEND SESSION_ID (timeout: {_session_timeout_seconds}s)") - logger.info(f"📡 Stable car detected - sending imageDetection to trigger backend session creation") + logger.info(f"🔄 Camera {camera_id}: RESET TO VALIDATION PHASE - cleared track stability tracking (sessionId should become null)") - # Return detection to signal backend, but don't proceed with pipeline - primary_detection = max(all_detections, key=lambda x: x["confidence"]) if all_detections else {"class": "none", "confidence": 0.0, "bbox": [0, 0, 0, 0]} - primary_bbox = primary_detection.get("bbox", [0, 0, 0, 0]) - return (primary_detection, primary_bbox) if return_bbox else primary_detection - - logger.info(f"🚀 Camera {camera_id}: BACKEND SESSION_ID AVAILABLE ({backend_session_id}) - proceeding with full pipeline") + # Return "none" detection to trigger cache clearing in app.py + none_detection = {"class": "none", "confidence": 1.0, "bbox": [0, 0, 0, 0], "occupancy_triggered": True} + return (none_detection, [0, 0, 0, 0]) if return_bbox else none_detection + else: + # Still in occupancy phase - check if stable tracks are present + if stable_tracks_present: + # Stable tracks detected - continue with cached result or light processing + logger.debug(f"👁️ Camera {camera_id}: OCCUPANCY PHASE - stable tracks present: {set(stable_tracks) & set(current_tracks)} (sessionId: {backend_session_id or 'none'})") + else: + # No stable tracks - absence counter was already incremented in track validation + logger.debug(f"👁️ Camera {camera_id}: OCCUPANCY PHASE - stable tracks absent {absence_counter}/{max_absence_frames} (sessionId: {backend_session_id or 'none'})") + + # Continue with normal pipeline processing + pass - # ─── Pre-validate pipeline execution ──────────────────────── + # ─── Pre-validate pipeline execution (only proceed if we have stable tracks for main pipeline) ──────────────────────── + is_branch_node = node.get("cropClass") is not None or node.get("parallel") is True + + if not is_branch_node and stability_threshold > 1 and tracking_config.get("enabled", True): + # Main pipeline node with tracking - check for stable tracks before proceeding + stable_tracks = track_validation_result.get("stable_tracks", []) + if not stable_tracks: + logger.debug(f"🔒 Camera {camera_id}: Main pipeline requires stable tracks - none found, skipping pipeline execution") + none_detection = {"class": "none", "confidence": 1.0, "bbox": [0, 0, 0, 0], "awaiting_stable_tracks": True} + return (none_detection, [0, 0, 0, 0]) if return_bbox else none_detection + pipeline_valid, missing_branches = validate_pipeline_execution(node, regions_dict) if not pipeline_valid: @@ -1051,21 +1585,14 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): **(context or {}) } - # ─── Check backend sessionId before database operations ──── + # ─── Database operations will be handled when backend sessionId is received ──── if node.get("db_manager") and regions_dict: detected_classes = list(regions_dict.keys()) - logger.debug(f"Valid detections found - checking for backend sessionId: {detected_classes}") + logger.debug(f"Valid detections found: {detected_classes}") - if not backend_session_id: - logger.error(f"🚫 Camera {camera_id}: No backend sessionId available - cannot proceed with database operations") - logger.error(f"🚫 Camera {camera_id}: Pipeline requires backend sessionId for Redis/PostgreSQL operations") - # Reset tracking and wait for new stable car - reset_tracking_state(camera_id, model_id, "missing backend sessionId") - return (None, None) if return_bbox else None - - # Use backend sessionId for database operations - if detected_classes: + if backend_session_id: + # Backend sessionId is available, proceed with database operations from datetime import datetime display_id = detection_result.get("display_id", "unknown") timestamp = datetime.now().strftime("%Y-%m-%dT%H-%M-%S") @@ -1073,7 +1600,7 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): inserted_session_id = node["db_manager"].insert_initial_detection( display_id=display_id, captured_timestamp=timestamp, - session_id=backend_session_id # Use backend sessionId + session_id=backend_session_id ) if inserted_session_id: @@ -1083,8 +1610,12 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): logger.debug(f"Database record: display_id={display_id}, timestamp={timestamp}") else: logger.error(f"Failed to create database record with backend session_id: {backend_session_id}") - reset_tracking_state(camera_id, model_id, "database insertion failed") - return (None, None) if return_bbox else None + else: + logger.info(f"📡 Camera {camera_id}: Full pipeline completed, detection data will be sent to backend. Database operations will occur when sessionId is received.") + # Store detection info for later database operations when sessionId arrives + detection_result["awaiting_session_id"] = True + from datetime import datetime + detection_result["timestamp"] = datetime.now().strftime("%Y-%m-%dT%H-%M-%S") # Execute actions for root node only if it doesn't have branches # Branch nodes with actions will execute them after branch processing @@ -1147,9 +1678,18 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): logger.warning(f"Crop class {crop_class} not found in detected regions for {br['modelId']}, skipping branch") continue - # Add regions_dict to context for child branches + # Add regions_dict and session_id to context for child branches branch_context = dict(context) if context else {} branch_context["regions_dict"] = regions_dict + + # Pass session_id from detection_result to branch context for Redis actions + if "session_id" in detection_result: + branch_context["session_id"] = detection_result["session_id"] + logger.debug(f"Added session_id to branch context: {detection_result['session_id']}") + elif backend_session_id: + branch_context["session_id"] = backend_session_id + logger.debug(f"Added backend_session_id to branch context: {backend_session_id}") + future = executor.submit(run_pipeline, sub_frame, br, True, branch_context) futures[future] = br @@ -1185,9 +1725,18 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): continue try: - # Add regions_dict to context for child branches + # Add regions_dict and session_id to context for child branches branch_context = dict(context) if context else {} branch_context["regions_dict"] = regions_dict + + # Pass session_id from detection_result to branch context for Redis actions + if "session_id" in detection_result: + branch_context["session_id"] = detection_result["session_id"] + logger.debug(f"Added session_id to sequential branch context: {detection_result['session_id']}") + elif backend_session_id: + branch_context["session_id"] = backend_session_id + logger.debug(f"Added backend_session_id to sequential branch context: {backend_session_id}") + result, _ = run_pipeline(sub_frame, br, True, branch_context) if result: branch_results[br["modelId"]] = result @@ -1206,8 +1755,17 @@ def run_pipeline(frame, node: dict, return_bbox: bool=False, context=None): if node.get("parallelActions") and "branch_results" in detection_result: execute_parallel_actions(node, frame, detection_result, regions_dict) - # ─── Note: Tracking will be reset when backend sends setSessionId: null ───────────────── - logger.info(f"Camera {camera_id}: Pipeline completed successfully - waiting for backend to end session") + # ─── Auto-enable occupancy mode after successful pipeline completion ───────────────── + camera_id = context.get("camera_id", "unknown") if context else "unknown" + model_id = node.get("modelId", "unknown") + + # Enable occupancy detector automatically after first successful pipeline + logger.info(f"Camera {camera_id}: Pipeline completed successfully - auto-enabling occupancy mode") + occupancy_detector(camera_id, model_id, enable=True) + + logger.info(f"✅ Camera {camera_id}: Pipeline completed, detection data will be sent to backend") + logger.info(f"🛑 Camera {camera_id}: Model will stop inference for future frames") + logger.info(f"📡 Backend sessionId will be handled when received via WebSocket") # ─── Execute actions after successful detection AND branch processing ────────── # This ensures detection nodes (like frontal_detection_v1) execute their actions diff --git a/websocket_comm.log b/websocket_comm.log new file mode 100644 index 0000000..daaf88c --- /dev/null +++ b/websocket_comm.log @@ -0,0 +1,801 @@ +2025-08-27 19:32:11,903 [INFO] WebSocket communication logging started - TX/RX format +2025-08-27 19:32:44,133 [INFO] TX -> {"type":"stateReport","cpuUsage":20.9,"memoryUsage":87.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:46,136 [INFO] TX -> {"type":"stateReport","cpuUsage":14.2,"memoryUsage":87.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:48,162 [INFO] TX -> {"type":"stateReport","cpuUsage":13.9,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:50,189 [INFO] TX -> {"type":"stateReport","cpuUsage":16.6,"memoryUsage":87.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:52,182 [INFO] TX -> {"type":"stateReport","cpuUsage":20.2,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:54,170 [INFO] TX -> {"type":"stateReport","cpuUsage":14.1,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:56,188 [INFO] TX -> {"type":"stateReport","cpuUsage":15.3,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:32:58,195 [INFO] TX -> {"type":"stateReport","cpuUsage":15.1,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:33:00,198 [INFO] TX -> {"type":"stateReport","cpuUsage":17.0,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:33:02,202 [INFO] TX -> {"type":"stateReport","cpuUsage":20.7,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:33:04,206 [INFO] TX -> {"type":"stateReport","cpuUsage":14.2,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:33:06,226 [INFO] TX -> {"type":"stateReport","cpuUsage":17.9,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:33:06,500 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123306Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=df972f271a1a73c1795d984030fefee6a0723be4191bf11ef23eee1079543690","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:33:12,753 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:12,756 [INFO] TX -> {"type":"stateReport","cpuUsage":19.3,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:13,587 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:13Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:14,779 [INFO] TX -> {"type":"stateReport","cpuUsage":22.0,"memoryUsage":89.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:14,921 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:14Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:16,783 [INFO] TX -> {"type":"stateReport","cpuUsage":16.1,"memoryUsage":89.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:16,936 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:16Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:18,776 [INFO] TX -> {"type":"stateReport","cpuUsage":16.7,"memoryUsage":89.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:19,022 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:19Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:20,760 [INFO] TX -> {"type":"stateReport","cpuUsage":32.4,"memoryUsage":92.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:21,004 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:21Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:22,768 [INFO] TX -> {"type":"stateReport","cpuUsage":51.0,"memoryUsage":90.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:23,054 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:23Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:24,775 [INFO] TX -> {"type":"stateReport","cpuUsage":24.2,"memoryUsage":90.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:25,133 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:25Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:26,768 [INFO] TX -> {"type":"stateReport","cpuUsage":17.4,"memoryUsage":90.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:27,161 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:27Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:28,768 [INFO] TX -> {"type":"stateReport","cpuUsage":25.3,"memoryUsage":88.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:29,158 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:29Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:30,772 [INFO] TX -> {"type":"stateReport","cpuUsage":20.6,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:31,194 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:31Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:32,780 [INFO] TX -> {"type":"stateReport","cpuUsage":18.2,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:33,235 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:33Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:34,786 [INFO] TX -> {"type":"stateReport","cpuUsage":22.8,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:35,283 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:35Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:36,498 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123336Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=5817dbe7129eb56cdb41d70c10d62049c5b409b11ca300745c4defe96087fc7b","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:33:36,855 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:36,857 [INFO] TX -> {"type":"stateReport","cpuUsage":21.9,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:37,478 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:38,867 [INFO] TX -> {"type":"stateReport","cpuUsage":17.9,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:39,489 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:39Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:40,883 [INFO] TX -> {"type":"stateReport","cpuUsage":17.6,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:41,584 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:41Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:42,910 [INFO] TX -> {"type":"stateReport","cpuUsage":18.0,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:43,507 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:43Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:44,898 [INFO] TX -> {"type":"stateReport","cpuUsage":18.2,"memoryUsage":87.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:45,553 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:45Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:46,924 [INFO] TX -> {"type":"stateReport","cpuUsage":17.2,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:47,576 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:47Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:48,923 [INFO] TX -> {"type":"stateReport","cpuUsage":20.4,"memoryUsage":87.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:49,094 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:49Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:50,913 [INFO] TX -> {"type":"stateReport","cpuUsage":19.9,"memoryUsage":87.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:51,164 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:51Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:52,942 [INFO] TX -> {"type":"stateReport","cpuUsage":17.2,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:53,192 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:53Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:54,930 [INFO] TX -> {"type":"stateReport","cpuUsage":32.9,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:55,152 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:55Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:56,951 [INFO] TX -> {"type":"stateReport","cpuUsage":27.5,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:57,200 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:57Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:33:58,971 [INFO] TX -> {"type":"stateReport","cpuUsage":32.6,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:33:59,355 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:33:59Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:00,963 [INFO] TX -> {"type":"stateReport","cpuUsage":27.7,"memoryUsage":87.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:01,324 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:01Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:02,983 [INFO] TX -> {"type":"stateReport","cpuUsage":20.7,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:03,401 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:03Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:04,994 [INFO] TX -> {"type":"stateReport","cpuUsage":38.4,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:05,442 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:05Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:06,499 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123406Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=ca980e1e53eb2cc6571314abefbaa675d8addb32ee7773fe4b460850dd752c14","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:34:06,990 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:06,992 [INFO] TX -> {"type":"stateReport","cpuUsage":30.8,"memoryUsage":85.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:07,682 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:07Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:09,001 [INFO] TX -> {"type":"stateReport","cpuUsage":19.6,"memoryUsage":85.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:09,703 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:09Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:11,021 [INFO] TX -> {"type":"stateReport","cpuUsage":28.0,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:11,629 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:11Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:13,023 [INFO] TX -> {"type":"stateReport","cpuUsage":30.6,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:13,664 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:13Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:15,026 [INFO] TX -> {"type":"stateReport","cpuUsage":31.8,"memoryUsage":86.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:15,190 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:15Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:17,029 [INFO] TX -> {"type":"stateReport","cpuUsage":19.4,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:17,252 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:17Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:19,041 [INFO] TX -> {"type":"stateReport","cpuUsage":19.8,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:19,227 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:19Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:21,040 [INFO] TX -> {"type":"stateReport","cpuUsage":29.2,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:21,290 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:21Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:23,053 [INFO] TX -> {"type":"stateReport","cpuUsage":28.0,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:23,278 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:23Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:25,080 [INFO] TX -> {"type":"stateReport","cpuUsage":16.0,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:25,322 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:25Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:27,095 [INFO] TX -> {"type":"stateReport","cpuUsage":26.4,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:27,415 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:27Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:29,107 [INFO] TX -> {"type":"stateReport","cpuUsage":24.5,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:29,469 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:29Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:31,090 [INFO] TX -> {"type":"stateReport","cpuUsage":30.8,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:31,508 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:31Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:33,105 [INFO] TX -> {"type":"stateReport","cpuUsage":21.5,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:33,495 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:33Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:35,100 [INFO] TX -> {"type":"stateReport","cpuUsage":15.3,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:35,550 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:35Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:36,501 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123436Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=9506b72d5086fae6a2a6b9c31c4a1d3688177ae0147b37a6519d98b4d6bd81a6","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:34:37,156 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:37,159 [INFO] TX -> {"type":"stateReport","cpuUsage":22.0,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:37,750 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:39,156 [INFO] TX -> {"type":"stateReport","cpuUsage":23.0,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:39,744 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:39Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:41,134 [INFO] TX -> {"type":"stateReport","cpuUsage":15.2,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:41,794 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:41Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:43,153 [INFO] TX -> {"type":"stateReport","cpuUsage":17.5,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:43,771 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:43Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:45,139 [INFO] TX -> {"type":"stateReport","cpuUsage":18.2,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:45,813 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:45Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:47,154 [INFO] TX -> {"type":"stateReport","cpuUsage":25.2,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:47,898 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:47Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:49,175 [INFO] TX -> {"type":"stateReport","cpuUsage":15.6,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:49,371 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:49Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:51,173 [INFO] TX -> {"type":"stateReport","cpuUsage":18.4,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:51,421 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:51Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:53,181 [INFO] TX -> {"type":"stateReport","cpuUsage":24.7,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:53,451 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:53Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:55,177 [INFO] TX -> {"type":"stateReport","cpuUsage":25.7,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:55,518 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:55Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:57,183 [INFO] TX -> {"type":"stateReport","cpuUsage":17.5,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:57,525 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:57Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:34:59,197 [INFO] TX -> {"type":"stateReport","cpuUsage":32.5,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:34:59,533 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:34:59Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:01,222 [INFO] TX -> {"type":"stateReport","cpuUsage":26.0,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:01,612 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:01Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:03,232 [INFO] TX -> {"type":"stateReport","cpuUsage":39.7,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:03,555 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:03Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:05,236 [INFO] TX -> {"type":"stateReport","cpuUsage":44.7,"memoryUsage":86.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:05,719 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:05Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:06,506 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123506Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=100ebd94adbb2de5b85719b1c3e199fe6fe6f9ebb87ea415f58cd7c5d6669321","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:35:07,290 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:07Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:07,297 [INFO] TX -> {"type":"stateReport","cpuUsage":28.6,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:08,023 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:09,305 [INFO] TX -> {"type":"stateReport","cpuUsage":29.6,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:10,184 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:11,327 [INFO] TX -> {"type":"stateReport","cpuUsage":26.1,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:12,114 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:13,336 [INFO] TX -> {"type":"stateReport","cpuUsage":21.3,"memoryUsage":86.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:13,993 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:13Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:15,351 [INFO] TX -> {"type":"stateReport","cpuUsage":19.3,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:15,967 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:15Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:17,353 [INFO] TX -> {"type":"stateReport","cpuUsage":20.6,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:17,997 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:17Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:19,380 [INFO] TX -> {"type":"stateReport","cpuUsage":27.3,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:19,498 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:19Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:21,393 [INFO] TX -> {"type":"stateReport","cpuUsage":24.9,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:21,642 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:21Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:23,405 [INFO] TX -> {"type":"stateReport","cpuUsage":17.2,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:23,600 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:23Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:25,417 [INFO] TX -> {"type":"stateReport","cpuUsage":20.3,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:25,619 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:25Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:27,438 [INFO] TX -> {"type":"stateReport","cpuUsage":23.8,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:27,732 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:27Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:29,442 [INFO] TX -> {"type":"stateReport","cpuUsage":20.9,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:29,731 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:29Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:31,449 [INFO] TX -> {"type":"stateReport","cpuUsage":24.0,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:31,750 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:31Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:33,444 [INFO] TX -> {"type":"stateReport","cpuUsage":20.7,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:33,769 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:33Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:35,464 [INFO] TX -> {"type":"stateReport","cpuUsage":25.8,"memoryUsage":85.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:35,827 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:35Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:36,504 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123536Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2f2af3a51acc5abc3593b80e3097ad5dae97d1bc8bea7a0b46e36daad6a4146c","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:35:37,425 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:37,488 [INFO] TX -> {"type":"stateReport","cpuUsage":26.4,"memoryUsage":85.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:38,034 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:39,495 [INFO] TX -> {"type":"stateReport","cpuUsage":26.1,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:40,058 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:41,517 [INFO] TX -> {"type":"stateReport","cpuUsage":34.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:42,098 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:42Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:43,535 [INFO] TX -> {"type":"stateReport","cpuUsage":29.8,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:44,089 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:44Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:45,537 [INFO] TX -> {"type":"stateReport","cpuUsage":33.3,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:46,108 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:46Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:47,693 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:47Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:47,695 [INFO] TX -> {"type":"stateReport","cpuUsage":28.1,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:49,697 [INFO] TX -> {"type":"stateReport","cpuUsage":35.0,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:50,256 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:50Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:51,779 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:51Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:51,781 [INFO] TX -> {"type":"stateReport","cpuUsage":30.9,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:53,796 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:53Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:53,798 [INFO] TX -> {"type":"stateReport","cpuUsage":30.9,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:55,801 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:55Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:55,803 [INFO] TX -> {"type":"stateReport","cpuUsage":27.8,"memoryUsage":86.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:57,752 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:57Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:57,821 [INFO] TX -> {"type":"stateReport","cpuUsage":28.0,"memoryUsage":86.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:35:59,823 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:35:59Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:35:59,824 [INFO] TX -> {"type":"stateReport","cpuUsage":33.1,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:01,795 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:01Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:01,833 [INFO] TX -> {"type":"stateReport","cpuUsage":31.3,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:03,845 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:03Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:03,846 [INFO] TX -> {"type":"stateReport","cpuUsage":24.7,"memoryUsage":87.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:05,854 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:05Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:05,855 [INFO] TX -> {"type":"stateReport","cpuUsage":14.8,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:06,505 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123606Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=a4b09295a15145beda38fbfe467db83086b5d13214a040da4a51116cc118c327","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:36:07,529 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:07Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:07,855 [INFO] TX -> {"type":"stateReport","cpuUsage":23.8,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:08,140 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:09,882 [INFO] TX -> {"type":"stateReport","cpuUsage":20.9,"memoryUsage":86.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:10,185 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:11,911 [INFO] TX -> {"type":"stateReport","cpuUsage":20.6,"memoryUsage":86.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:12,242 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:13,806 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:13Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:13,903 [INFO] TX -> {"type":"stateReport","cpuUsage":26.0,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:15,779 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:15Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:15,886 [INFO] TX -> {"type":"stateReport","cpuUsage":20.9,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:17,806 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:17Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:17,896 [INFO] TX -> {"type":"stateReport","cpuUsage":13.6,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:19,854 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:19Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:19,890 [INFO] TX -> {"type":"stateReport","cpuUsage":18.8,"memoryUsage":86.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:21,915 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:21Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:21,917 [INFO] TX -> {"type":"stateReport","cpuUsage":26.9,"memoryUsage":86.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:23,949 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:23Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:23,950 [INFO] TX -> {"type":"stateReport","cpuUsage":23.7,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:25,971 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:25Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:25,972 [INFO] TX -> {"type":"stateReport","cpuUsage":22.7,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:27,986 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:27Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:27,988 [INFO] TX -> {"type":"stateReport","cpuUsage":39.1,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:30,043 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:30,044 [INFO] TX -> {"type":"stateReport","cpuUsage":28.8,"memoryUsage":88.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:32,067 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:32,069 [INFO] TX -> {"type":"stateReport","cpuUsage":25.0,"memoryUsage":88.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:34,188 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:34,190 [INFO] TX -> {"type":"stateReport","cpuUsage":31.1,"memoryUsage":88.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:36,143 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:36,199 [INFO] TX -> {"type":"stateReport","cpuUsage":24.6,"memoryUsage":88.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:36,507 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123636Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1c57f5567d81679524d29d5937f1d7e1172124d95b5eba45c5fe71adedbb59d5","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:36:37,658 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:38,377 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:38,381 [INFO] TX -> {"type":"stateReport","cpuUsage":30.8,"memoryUsage":89.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:40,388 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:40,390 [INFO] TX -> {"type":"stateReport","cpuUsage":35.4,"memoryUsage":89.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:42,430 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:42Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:42,432 [INFO] TX -> {"type":"stateReport","cpuUsage":36.9,"memoryUsage":90.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:44,447 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:44Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:44,449 [INFO] TX -> {"type":"stateReport","cpuUsage":33.9,"memoryUsage":90.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:46,464 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:46Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:46,465 [INFO] TX -> {"type":"stateReport","cpuUsage":22.8,"memoryUsage":90.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:48,017 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:48Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:48,489 [INFO] TX -> {"type":"stateReport","cpuUsage":19.0,"memoryUsage":89.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:50,070 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:50Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:50,497 [INFO] TX -> {"type":"stateReport","cpuUsage":20.2,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:52,050 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:52Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:52,513 [INFO] TX -> {"type":"stateReport","cpuUsage":21.6,"memoryUsage":88.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:54,094 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:54Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:54,525 [INFO] TX -> {"type":"stateReport","cpuUsage":18.2,"memoryUsage":88.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:56,116 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:56Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:56,532 [INFO] TX -> {"type":"stateReport","cpuUsage":15.8,"memoryUsage":88.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:36:58,131 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:36:58Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:36:58,543 [INFO] TX -> {"type":"stateReport","cpuUsage":19.7,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:00,177 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:00,542 [INFO] TX -> {"type":"stateReport","cpuUsage":21.4,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:02,189 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:02,549 [INFO] TX -> {"type":"stateReport","cpuUsage":16.1,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:04,293 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:04,557 [INFO] TX -> {"type":"stateReport","cpuUsage":26.5,"memoryUsage":90.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:06,272 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:06,509 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123706Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=86fd5e153da950b378ce9e1e216e92b362ea2c42ed325b458a806fd49e03690a","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:37:07,789 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:07Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:07,793 [INFO] TX -> {"type":"stateReport","cpuUsage":26.3,"memoryUsage":89.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:08,490 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:09,797 [INFO] TX -> {"type":"stateReport","cpuUsage":28.9,"memoryUsage":88.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:10,490 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:11,809 [INFO] TX -> {"type":"stateReport","cpuUsage":27.3,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:12,677 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:13,831 [INFO] TX -> {"type":"stateReport","cpuUsage":21.5,"memoryUsage":88.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:14,024 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:14Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:15,881 [INFO] TX -> {"type":"stateReport","cpuUsage":19.9,"memoryUsage":88.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:16,068 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:16Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:17,898 [INFO] TX -> {"type":"stateReport","cpuUsage":24.9,"memoryUsage":88.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:18,074 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:18Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:19,897 [INFO] TX -> {"type":"stateReport","cpuUsage":19.4,"memoryUsage":88.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:20,129 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:20Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:21,912 [INFO] TX -> {"type":"stateReport","cpuUsage":32.3,"memoryUsage":89.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:22,155 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:22Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:23,943 [INFO] TX -> {"type":"stateReport","cpuUsage":34.0,"memoryUsage":88.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:24,206 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:24Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:25,950 [INFO] TX -> {"type":"stateReport","cpuUsage":35.1,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:26,203 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:26Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:27,963 [INFO] TX -> {"type":"stateReport","cpuUsage":33.5,"memoryUsage":89.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:28,235 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:28Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:29,986 [INFO] TX -> {"type":"stateReport","cpuUsage":30.2,"memoryUsage":89.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:30,264 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:31,985 [INFO] TX -> {"type":"stateReport","cpuUsage":30.0,"memoryUsage":89.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:32,324 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:33,997 [INFO] TX -> {"type":"stateReport","cpuUsage":30.9,"memoryUsage":89.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:34,371 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:36,018 [INFO] TX -> {"type":"stateReport","cpuUsage":36.5,"memoryUsage":89.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:36,405 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:36,509 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123736Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=334aeadca2c53bc51ae2425d05062d07fcc34537a280a1c1dfc7663038d99d40","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:37:37,926 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:38,019 [INFO] TX -> {"type":"stateReport","cpuUsage":36.6,"memoryUsage":89.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:38,557 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:40,027 [INFO] TX -> {"type":"stateReport","cpuUsage":28.1,"memoryUsage":90.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:40,572 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:42,030 [INFO] TX -> {"type":"stateReport","cpuUsage":23.4,"memoryUsage":90.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:42,614 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:42Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:44,029 [INFO] TX -> {"type":"stateReport","cpuUsage":10.6,"memoryUsage":90.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:44,221 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:44Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:46,050 [INFO] TX -> {"type":"stateReport","cpuUsage":14.6,"memoryUsage":89.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:46,302 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:46Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:48,059 [INFO] TX -> {"type":"stateReport","cpuUsage":21.4,"memoryUsage":89.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:48,230 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:48Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:50,067 [INFO] TX -> {"type":"stateReport","cpuUsage":17.3,"memoryUsage":89.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:50,310 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:50Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:52,046 [INFO] TX -> {"type":"stateReport","cpuUsage":13.6,"memoryUsage":89.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:52,276 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:52Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:54,067 [INFO] TX -> {"type":"stateReport","cpuUsage":14.9,"memoryUsage":89.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:54,332 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:54Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:56,072 [INFO] TX -> {"type":"stateReport","cpuUsage":14.5,"memoryUsage":89.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:56,371 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:56Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:37:58,095 [INFO] TX -> {"type":"stateReport","cpuUsage":16.8,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:37:58,426 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:37:58Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:00,104 [INFO] TX -> {"type":"stateReport","cpuUsage":18.7,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:00,444 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:02,129 [INFO] TX -> {"type":"stateReport","cpuUsage":14.1,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:02,466 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:04,138 [INFO] TX -> {"type":"stateReport","cpuUsage":14.6,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:04,515 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:06,152 [INFO] TX -> {"type":"stateReport","cpuUsage":16.4,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:06,613 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:06,614 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123806Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=dd9cac91477fd8992e7cd48c314effd2bd800f6b974012a4c5962fabc4e2b7a2","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:38:08,072 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:08,163 [INFO] TX -> {"type":"stateReport","cpuUsage":15.8,"memoryUsage":89.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:08,670 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:10,180 [INFO] TX -> {"type":"stateReport","cpuUsage":11.5,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:10,712 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:12,327 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:12,328 [INFO] TX -> {"type":"stateReport","cpuUsage":16.1,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:14,303 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:14Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:14,325 [INFO] TX -> {"type":"stateReport","cpuUsage":15.3,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:16,372 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:16Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:16,373 [INFO] TX -> {"type":"stateReport","cpuUsage":13.6,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:18,393 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:18Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:18,394 [INFO] TX -> {"type":"stateReport","cpuUsage":16.9,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:20,405 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:20Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:20,406 [INFO] TX -> {"type":"stateReport","cpuUsage":24.9,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:22,428 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:22Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:22,429 [INFO] TX -> {"type":"stateReport","cpuUsage":15.3,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:24,464 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:24Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:24,465 [INFO] TX -> {"type":"stateReport","cpuUsage":17.9,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:26,416 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:26Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:26,473 [INFO] TX -> {"type":"stateReport","cpuUsage":14.5,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:28,518 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:28Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:28,519 [INFO] TX -> {"type":"stateReport","cpuUsage":13.5,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:30,468 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:30,529 [INFO] TX -> {"type":"stateReport","cpuUsage":16.8,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:32,574 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:32,575 [INFO] TX -> {"type":"stateReport","cpuUsage":20.3,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:34,567 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:34,588 [INFO] TX -> {"type":"stateReport","cpuUsage":12.9,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:36,683 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:36,683 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123836Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=d2d5a6fe8534d9559ee0a850d32d2bed4f6f11388efc12a6029c82b1a9694049","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:38:38,225 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:38,227 [INFO] TX -> {"type":"stateReport","cpuUsage":12.6,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:38,833 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:40,251 [INFO] TX -> {"type":"stateReport","cpuUsage":20.3,"memoryUsage":89.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:40,364 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:42,255 [INFO] TX -> {"type":"stateReport","cpuUsage":14.0,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:42,899 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:42Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:44,276 [INFO] TX -> {"type":"stateReport","cpuUsage":16.8,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:44,525 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:44Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:46,300 [INFO] TX -> {"type":"stateReport","cpuUsage":16.3,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:46,530 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:46Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:48,312 [INFO] TX -> {"type":"stateReport","cpuUsage":16.0,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:48,506 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:48Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:50,319 [INFO] TX -> {"type":"stateReport","cpuUsage":12.3,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:50,555 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:50Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:52,329 [INFO] TX -> {"type":"stateReport","cpuUsage":18.9,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:52,598 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:52Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:54,321 [INFO] TX -> {"type":"stateReport","cpuUsage":15.9,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:54,664 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:54Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:56,337 [INFO] TX -> {"type":"stateReport","cpuUsage":24.4,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:56,715 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:56Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:38:58,361 [INFO] TX -> {"type":"stateReport","cpuUsage":18.8,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:38:58,689 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:38:58Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:00,379 [INFO] TX -> {"type":"stateReport","cpuUsage":21.0,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:00,715 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:02,384 [INFO] TX -> {"type":"stateReport","cpuUsage":19.7,"memoryUsage":88.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:02,743 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:04,399 [INFO] TX -> {"type":"stateReport","cpuUsage":28.2,"memoryUsage":88.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:04,769 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:06,386 [INFO] TX -> {"type":"stateReport","cpuUsage":28.2,"memoryUsage":87.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:06,516 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123906Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=9b4d9eb8abdf088c03ce1144edbeb095b71a86e043982c504ef78182e18edac5","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:39:08,351 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:08,397 [INFO] TX -> {"type":"stateReport","cpuUsage":20.1,"memoryUsage":85.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:08,942 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:10,420 [INFO] TX -> {"type":"stateReport","cpuUsage":23.8,"memoryUsage":85.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:10,937 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:12,434 [INFO] TX -> {"type":"stateReport","cpuUsage":27.0,"memoryUsage":85.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:13,069 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:13Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:14,544 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:14Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:14,544 [INFO] TX -> {"type":"stateReport","cpuUsage":11.2,"memoryUsage":85.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:16,592 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:16Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:16,593 [INFO] TX -> {"type":"stateReport","cpuUsage":17.8,"memoryUsage":85.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:18,641 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:18Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:18,642 [INFO] TX -> {"type":"stateReport","cpuUsage":19.4,"memoryUsage":85.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:20,697 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:20Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:20,699 [INFO] TX -> {"type":"stateReport","cpuUsage":26.2,"memoryUsage":85.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:22,652 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:22Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:22,717 [INFO] TX -> {"type":"stateReport","cpuUsage":20.7,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:24,664 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:24Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:24,725 [INFO] TX -> {"type":"stateReport","cpuUsage":27.4,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:26,749 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:26Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:26,750 [INFO] TX -> {"type":"stateReport","cpuUsage":19.2,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:28,767 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:28Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:28,768 [INFO] TX -> {"type":"stateReport","cpuUsage":17.7,"memoryUsage":85.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:30,875 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:30,876 [INFO] TX -> {"type":"stateReport","cpuUsage":18.1,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:32,829 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:32,883 [INFO] TX -> {"type":"stateReport","cpuUsage":21.0,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:34,852 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:34,891 [INFO] TX -> {"type":"stateReport","cpuUsage":16.6,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:36,518 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T123936Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=a79ce9dd2583e6f1fb7aef013cfd30b00f36098267581d287042addf955d2c70","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:39:38,472 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:38,476 [INFO] TX -> {"type":"stateReport","cpuUsage":17.8,"memoryUsage":85.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:39,075 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:39Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:40,472 [INFO] TX -> {"type":"stateReport","cpuUsage":13.7,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:40,659 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:42,484 [INFO] TX -> {"type":"stateReport","cpuUsage":27.0,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:43,137 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:43Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:44,497 [INFO] TX -> {"type":"stateReport","cpuUsage":25.9,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:45,133 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:45Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:46,520 [INFO] TX -> {"type":"stateReport","cpuUsage":12.8,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:46,726 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:46Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:48,528 [INFO] TX -> {"type":"stateReport","cpuUsage":16.4,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:48,721 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:48Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:50,527 [INFO] TX -> {"type":"stateReport","cpuUsage":28.1,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:50,733 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:50Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:52,546 [INFO] TX -> {"type":"stateReport","cpuUsage":20.0,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:52,764 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:52Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:54,560 [INFO] TX -> {"type":"stateReport","cpuUsage":14.4,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:54,799 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:54Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:56,575 [INFO] TX -> {"type":"stateReport","cpuUsage":19.1,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:56,902 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:56Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:39:58,586 [INFO] TX -> {"type":"stateReport","cpuUsage":23.3,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:39:58,804 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:39:58Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:00,611 [INFO] TX -> {"type":"stateReport","cpuUsage":21.7,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:00,887 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:02,613 [INFO] TX -> {"type":"stateReport","cpuUsage":18.8,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:02,893 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:04,610 [INFO] TX -> {"type":"stateReport","cpuUsage":14.6,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:04,889 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:06,518 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124006Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=e4d127d03f79459fe442645b7c5c5b7fa43aac113a80562a77937c0bd9827808","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:40:06,617 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:06,620 [INFO] TX -> {"type":"stateReport","cpuUsage":24.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:06,898 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:08,634 [INFO] TX -> {"type":"stateReport","cpuUsage":17.9,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:08,925 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:10,644 [INFO] TX -> {"type":"stateReport","cpuUsage":15.6,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:10,959 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:12,674 [INFO] TX -> {"type":"stateReport","cpuUsage":11.3,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:12,988 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:14,678 [INFO] TX -> {"type":"stateReport","cpuUsage":20.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:15,008 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:15Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:16,703 [INFO] TX -> {"type":"stateReport","cpuUsage":20.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:17,049 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:17Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:18,724 [INFO] TX -> {"type":"stateReport","cpuUsage":14.1,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:19,118 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:19Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:20,729 [INFO] TX -> {"type":"stateReport","cpuUsage":18.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:21,205 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:21Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:22,713 [INFO] TX -> {"type":"stateReport","cpuUsage":23.2,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:23,249 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:23Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:24,736 [INFO] TX -> {"type":"stateReport","cpuUsage":20.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:25,208 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:25Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:26,723 [INFO] TX -> {"type":"stateReport","cpuUsage":22.8,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:27,271 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:27Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:28,731 [INFO] TX -> {"type":"stateReport","cpuUsage":16.1,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:29,287 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:29Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:30,755 [INFO] TX -> {"type":"stateReport","cpuUsage":18.8,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:31,311 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:31Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:32,779 [INFO] TX -> {"type":"stateReport","cpuUsage":19.0,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:33,350 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:33Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:34,796 [INFO] TX -> {"type":"stateReport","cpuUsage":17.6,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:35,361 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:35Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:36,523 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124036Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=f6a13f3d369875138cd9b3d53d97c6538c1eca61160a0219b892d06cdfe4953f","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:40:36,725 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:36,816 [INFO] TX -> {"type":"stateReport","cpuUsage":14.5,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:37,368 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:37Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:38,948 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:38,949 [INFO] TX -> {"type":"stateReport","cpuUsage":21.6,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:40,929 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:40,950 [INFO] TX -> {"type":"stateReport","cpuUsage":26.8,"memoryUsage":86.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:42,952 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:42Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:42,953 [INFO] TX -> {"type":"stateReport","cpuUsage":16.7,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:45,086 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:45Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:45,087 [INFO] TX -> {"type":"stateReport","cpuUsage":19.1,"memoryUsage":86.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:40:47,086 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:40:47Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:40:47,087 [INFO] TX -> {"type":"stateReport","cpuUsage":16.4,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:44:13,495 [INFO] WebSocket communication logging started - TX/RX format +2025-08-27 19:44:44,784 [INFO] TX -> {"type":"stateReport","cpuUsage":19.1,"memoryUsage":86.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:46,766 [INFO] TX -> {"type":"stateReport","cpuUsage":13.6,"memoryUsage":86.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:48,786 [INFO] TX -> {"type":"stateReport","cpuUsage":20.0,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:50,783 [INFO] TX -> {"type":"stateReport","cpuUsage":18.7,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:52,759 [INFO] TX -> {"type":"stateReport","cpuUsage":15.4,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:54,780 [INFO] TX -> {"type":"stateReport","cpuUsage":8.9,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:56,767 [INFO] TX -> {"type":"stateReport","cpuUsage":24.4,"memoryUsage":86.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:58,773 [INFO] TX -> {"type":"stateReport","cpuUsage":11.8,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[]} +2025-08-27 19:44:59,847 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124459Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=8fd479a0828d0edbff1924f42508baba788dbca60d93217e799e461e8bef6f5b","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:45:05,969 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:05Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:05,971 [INFO] TX -> {"type":"stateReport","cpuUsage":17.1,"memoryUsage":87.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:06,676 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:07,989 [INFO] TX -> {"type":"stateReport","cpuUsage":19.5,"memoryUsage":85.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:08,616 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:09,991 [INFO] TX -> {"type":"stateReport","cpuUsage":17.4,"memoryUsage":85.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:10,697 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:11,998 [INFO] TX -> {"type":"stateReport","cpuUsage":21.9,"memoryUsage":85.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:12,231 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:14,016 [INFO] TX -> {"type":"stateReport","cpuUsage":18.5,"memoryUsage":85.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:14,195 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:14Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:16,030 [INFO] TX -> {"type":"stateReport","cpuUsage":25.3,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:16,238 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:16Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:18,046 [INFO] TX -> {"type":"stateReport","cpuUsage":23.4,"memoryUsage":87.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:18,337 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:18Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:20,055 [INFO] TX -> {"type":"stateReport","cpuUsage":26.3,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:20,272 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:20Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:22,073 [INFO] TX -> {"type":"stateReport","cpuUsage":16.0,"memoryUsage":87.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:22,382 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:22Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:24,082 [INFO] TX -> {"type":"stateReport","cpuUsage":17.6,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:24,369 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:24Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:26,085 [INFO] TX -> {"type":"stateReport","cpuUsage":20.4,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:26,387 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:26Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:28,113 [INFO] TX -> {"type":"stateReport","cpuUsage":21.5,"memoryUsage":86.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:28,396 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:28Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:29,851 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124529Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=d9d228302554626ef1de3473dbf98dde2b6c0b318ab7f3db0266ca7df6ae41d6","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:45:30,053 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:30,111 [INFO] TX -> {"type":"stateReport","cpuUsage":19.1,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:30,455 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:32,121 [INFO] TX -> {"type":"stateReport","cpuUsage":18.0,"memoryUsage":86.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:32,436 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:34,131 [INFO] TX -> {"type":"stateReport","cpuUsage":12.7,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:34,529 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:36,132 [INFO] TX -> {"type":"stateReport","cpuUsage":32.3,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:36,504 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:38,156 [INFO] TX -> {"type":"stateReport","cpuUsage":14.5,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:38,567 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:38Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:45:38,598 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":146}} +2025-08-27 19:45:40,170 [INFO] TX -> {"type":"stateReport","cpuUsage":21.1,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:40,619 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:40Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:42,182 [INFO] TX -> {"type":"stateReport","cpuUsage":20.7,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:42,644 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:42Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:44,170 [INFO] TX -> {"type":"stateReport","cpuUsage":20.0,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:44,662 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:44Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:46,173 [INFO] TX -> {"type":"stateReport","cpuUsage":17.9,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:46,696 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:46Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:48,188 [INFO] TX -> {"type":"stateReport","cpuUsage":19.3,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:48,740 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:48Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:50,188 [INFO] TX -> {"type":"stateReport","cpuUsage":11.6,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:50,781 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:50Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:52,177 [INFO] TX -> {"type":"stateReport","cpuUsage":21.1,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:52,323 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:52Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:54,174 [INFO] TX -> {"type":"stateReport","cpuUsage":15.2,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:54,358 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:54Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:56,192 [INFO] TX -> {"type":"stateReport","cpuUsage":15.8,"memoryUsage":85.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:56,437 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:56Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:58,203 [INFO] TX -> {"type":"stateReport","cpuUsage":14.9,"memoryUsage":85.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:45:58,458 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:45:58Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":146} +2025-08-27 19:45:59,855 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124559Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=561e2e1469a5ffa40f3746be2face4cd6f706e957dba86aaaa45ce4ee17cf72d","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:46:00,186 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:00,209 [INFO] TX -> {"type":"stateReport","cpuUsage":20.2,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:00,210 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-27 19:46:00,446 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:02,227 [INFO] TX -> {"type":"stateReport","cpuUsage":22.0,"memoryUsage":85.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:02,565 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:04,241 [INFO] TX -> {"type":"stateReport","cpuUsage":16.7,"memoryUsage":85.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:04,496 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:06,260 [INFO] TX -> {"type":"stateReport","cpuUsage":15.7,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:06,539 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:08,280 [INFO] TX -> {"type":"stateReport","cpuUsage":27.4,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:08,576 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:08Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:08,598 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":147}} +2025-08-27 19:46:10,300 [INFO] TX -> {"type":"stateReport","cpuUsage":23.3,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:10,642 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:10Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:12,306 [INFO] TX -> {"type":"stateReport","cpuUsage":15.7,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:12,644 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:12Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:14,320 [INFO] TX -> {"type":"stateReport","cpuUsage":21.0,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:14,665 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:14Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:16,350 [INFO] TX -> {"type":"stateReport","cpuUsage":21.6,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:16,691 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:16Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:18,342 [INFO] TX -> {"type":"stateReport","cpuUsage":24.5,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:18,848 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:18Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:20,352 [INFO] TX -> {"type":"stateReport","cpuUsage":24.8,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:20,847 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:20Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:22,369 [INFO] TX -> {"type":"stateReport","cpuUsage":19.6,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:22,780 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:22Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:24,395 [INFO] TX -> {"type":"stateReport","cpuUsage":13.1,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:24,841 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:24Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:26,412 [INFO] TX -> {"type":"stateReport","cpuUsage":20.6,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:26,896 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:26Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:28,408 [INFO] TX -> {"type":"stateReport","cpuUsage":17.2,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:28,999 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:28Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":147} +2025-08-27 19:46:29,857 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124629Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=8c5e5a2c026dbc63f7e4bdb9f61d5ecbde713dc1371839b72bbf34e784bcfe48","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:46:30,337 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:30,371 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-27 19:46:30,414 [INFO] TX -> {"type":"stateReport","cpuUsage":18.7,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:30,939 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:32,422 [INFO] TX -> {"type":"stateReport","cpuUsage":16.9,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:33,016 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:33Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:34,569 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:34,570 [INFO] TX -> {"type":"stateReport","cpuUsage":25.8,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:36,557 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:36,587 [INFO] TX -> {"type":"stateReport","cpuUsage":20.8,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:38,603 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:38Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:46:38,604 [INFO] TX -> {"type":"stateReport","cpuUsage":18.3,"memoryUsage":86.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:38,621 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":148}} +2025-08-27 19:46:40,606 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:40Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:40,608 [INFO] TX -> {"type":"stateReport","cpuUsage":20.8,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:42,631 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:42Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:42,632 [INFO] TX -> {"type":"stateReport","cpuUsage":18.5,"memoryUsage":86.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:44,734 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:44Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:44,736 [INFO] TX -> {"type":"stateReport","cpuUsage":17.7,"memoryUsage":86.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:46,689 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:46Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:46,753 [INFO] TX -> {"type":"stateReport","cpuUsage":21.6,"memoryUsage":86.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:48,762 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:48Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:48,763 [INFO] TX -> {"type":"stateReport","cpuUsage":22.8,"memoryUsage":87.7,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:50,758 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:50Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:50,759 [INFO] TX -> {"type":"stateReport","cpuUsage":29.7,"memoryUsage":89.5,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:52,967 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:52Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:52,970 [INFO] TX -> {"type":"stateReport","cpuUsage":26.0,"memoryUsage":89.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:55,049 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:55Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:55,051 [INFO] TX -> {"type":"stateReport","cpuUsage":26.7,"memoryUsage":89.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:57,033 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:57Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:57,079 [INFO] TX -> {"type":"stateReport","cpuUsage":21.2,"memoryUsage":89.4,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:58,969 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:46:58Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":148} +2025-08-27 19:46:59,081 [INFO] TX -> {"type":"stateReport","cpuUsage":22.9,"memoryUsage":88.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:46:59,864 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124659Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2c634b5e97c25f9fcc88782992b7a2754430b33c32483ea18b4c158bf78ee21d","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:47:00,462 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:00,480 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-27 19:47:01,098 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:01Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:01,099 [INFO] TX -> {"type":"stateReport","cpuUsage":23.6,"memoryUsage":88.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:03,085 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:03Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:03,086 [INFO] TX -> {"type":"stateReport","cpuUsage":18.7,"memoryUsage":88.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:04,659 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:05,095 [INFO] TX -> {"type":"stateReport","cpuUsage":20.5,"memoryUsage":88.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:06,807 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:07,106 [INFO] TX -> {"type":"stateReport","cpuUsage":18.7,"memoryUsage":88.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:08,822 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:08Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:08,841 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":149}} +2025-08-27 19:47:09,128 [INFO] TX -> {"type":"stateReport","cpuUsage":17.8,"memoryUsage":88.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:10,759 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:10Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:11,146 [INFO] TX -> {"type":"stateReport","cpuUsage":24.4,"memoryUsage":87.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:12,785 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:12Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:13,148 [INFO] TX -> {"type":"stateReport","cpuUsage":12.1,"memoryUsage":87.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:14,817 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:14Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:15,142 [INFO] TX -> {"type":"stateReport","cpuUsage":12.6,"memoryUsage":87.8,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:16,879 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:16Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:17,156 [INFO] TX -> {"type":"stateReport","cpuUsage":19.9,"memoryUsage":87.9,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:18,916 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:18Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:19,170 [INFO] TX -> {"type":"stateReport","cpuUsage":20.2,"memoryUsage":88.0,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:20,999 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:20Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:21,181 [INFO] TX -> {"type":"stateReport","cpuUsage":21.5,"memoryUsage":87.6,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:23,005 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:23Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:23,205 [INFO] TX -> {"type":"stateReport","cpuUsage":20.8,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:25,052 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:25Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:25,213 [INFO] TX -> {"type":"stateReport","cpuUsage":17.7,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:27,057 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:27Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:27,226 [INFO] TX -> {"type":"stateReport","cpuUsage":16.8,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:29,075 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:29Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":149} +2025-08-27 19:47:29,252 [INFO] TX -> {"type":"stateReport","cpuUsage":14.2,"memoryUsage":87.3,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:29,865 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124729Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=6fd2f997434a4947ac596b17b36b971ba10b068afd3a4e7ecf333ba3cee583f4","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:47:30,598 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:30,627 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-27 19:47:31,192 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:31Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:31,263 [INFO] TX -> {"type":"stateReport","cpuUsage":14.4,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:33,244 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:33Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:33,275 [INFO] TX -> {"type":"stateReport","cpuUsage":19.2,"memoryUsage":87.2,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:47:35,274 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:47:35Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:47:35,274 [INFO] TX -> {"type":"stateReport","cpuUsage":21.4,"memoryUsage":87.1,"gpuUsage":null,"gpuMemoryUsage":null,"cameraConnections":[{"subscriptionIdentifier":"test2;webcam-local-01","modelId":20,"modelName":"bangchak_full","online":true,"rtspUrl":null,"snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000}]} +2025-08-27 19:48:45,364 [INFO] WebSocket communication logging started - TX/RX format +2025-08-27 19:48:53,127 [INFO] RX <- {"type":"subscribe","payload":{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"","modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124853Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=ee67f7674c24eedefdb9ddca6b0c2aba268ed11063e0601ec2fe00786e73ec37","modelName":"bangchak_full","modelId":20}} +2025-08-27 19:48:59,879 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124859Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=bb6408c8df465a5331f01a1600c1c13f2f52168bdc2b5d636eb80dfe0342199d","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:48:59,880 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:48:59Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:00,525 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:02,504 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:04,444 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:06,468 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:08,513 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:08Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:08,531 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":150}} +2025-08-27 19:49:10,629 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:10Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:12,575 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:12Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:14,135 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:14Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:16,196 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:16Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:18,324 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:18Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:20,361 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:20Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:22,329 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:22Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:24,424 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:24Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:26,427 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:26Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:28,516 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:28Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":150} +2025-08-27 19:49:29,880 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124929Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=45aaaf27b2756c214e6b930c29e844a4ff450b4b8225889337c5e78492199099","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:49:30,027 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:30,046 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-27 19:49:30,453 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:32,542 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:34,610 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:36,593 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:38,581 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:38Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:40,619 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:40Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:42,643 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:42Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:44,697 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:44Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:46,686 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:46Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:48,813 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:48Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:50,271 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:50Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:52,782 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:52Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:54,786 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:54Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:56,360 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:56Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:58,306 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:49:58Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:49:59,879 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T124959Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=02f629c0b0b6db85781932ad17e5cd7432be9c6d455cd147b52e800b2b01fedc","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:50:00,152 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:00,338 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:00Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:02,375 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:02Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:04,420 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:04Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:06,476 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:06Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:08,525 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:08Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:10,531 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:10Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:12,562 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:12Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:14,685 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:14Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:16,632 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:16Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:16,649 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":151}} +2025-08-27 19:50:18,673 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:18Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":151} +2025-08-27 19:50:20,807 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:20Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":151} +2025-08-27 19:50:22,769 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:22Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":151} +2025-08-27 19:50:24,811 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:24Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":151} +2025-08-27 19:50:26,772 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:26Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":151} +2025-08-27 19:50:28,802 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:28Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":151} +2025-08-27 19:50:29,879 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_full-1756285886566.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250827%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250827T125029Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=1349011364def2df06f0498387ef5d0e9fff56e419d077fc3038f36aa6b0ec1f","modelId":20,"modelName":"bangchak_full"}]} +2025-08-27 19:50:30,271 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:30,299 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-27 19:50:30,868 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:30Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:32,933 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:32Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:34,975 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:34Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:36,523 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:36Z","data":{"detection":null,"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:38,578 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:38Z","data":{"detection":{},"modelId":20,"modelName":"bangchak_full"}} +2025-08-27 19:50:38,595 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":152}} +2025-08-27 19:50:40,706 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:40Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":152} +2025-08-27 19:50:43,416 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:43Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":152} +2025-08-27 19:50:44,846 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:44Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":152} +2025-08-27 19:50:46,727 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-27T12:50:46Z","data":{"detection":{"carModel":null,"carBrand":null,"carYear":null,"bodyType":null,"licensePlateText":null,"licensePlateConfidence":null},"modelId":20,"modelName":"bangchak_full"},"sessionId":152} +2025-08-28 01:41:13,800 [INFO] WebSocket communication logging started - TX/RX format +2025-08-28 01:44:02,219 [INFO] WebSocket communication logging started - TX/RX format +2025-08-28 01:51:20,240 [INFO] WebSocket communication logging started - TX/RX format +2025-08-28 11:20:05,469 [INFO] WebSocket communication logging started - TX/RX format +2025-08-28 11:20:16,810 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_poc-1756312318569.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250828%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250828T042016Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=8fe7abc333e68ed2a7c30710fd8f0b15850a5f2e8631dbdc058b31670c46cb4a","modelId":21,"modelName":"bangchak_poc"}]} +2025-08-28 11:20:24,371 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:24Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:31,136 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:31Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:31,359 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:31Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:31,363 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":null}} +2025-08-28 11:20:32,799 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:32Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:34,995 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:34Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:36,899 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:36Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:38,975 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:38Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:40,972 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:40Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:43,322 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:43Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:45,637 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:45Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:46,716 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_poc-1756312318569.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250828%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250828T042046Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=54a8e18cdc4958a8140a48a94eb2fcacf94ee1a66d37270b2984dc223c642382","modelId":21,"modelName":"bangchak_poc"}]} +2025-08-28 11:20:48,472 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:48Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:49,241 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:49Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:51,452 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:51Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:53,377 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:53Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:55,270 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:55Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:56,793 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:56Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:20:58,745 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:20:58Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:01,530 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:01Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:03,347 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:03Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:05,344 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:05Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:07,551 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:07Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:09,566 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:09Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:10,996 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:10Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:13,125 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:13Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:15,131 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:15Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:16,699 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_poc-1756312318569.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250828%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250828T042116Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=20dc86a7131462dd0bbdf01922ea44c5c272e70fa1fda444b38a6fe5df14968c","modelId":21,"modelName":"bangchak_poc"}]} +2025-08-28 11:21:18,605 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:18Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:19,401 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:19Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:21,422 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:21Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:23,454 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:23Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:25,415 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:25Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:27,449 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:27Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:29,352 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:29Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:31,302 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:31Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:33,402 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:33Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:35,408 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:35Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:37,418 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:37Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:39,512 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:39Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:41,505 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:41Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:43,456 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:43Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:45,473 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:45Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:46,699 [INFO] RX <- {"type":"setSubscriptionList","subscriptions":[{"subscriptionIdentifier":"test2;webcam-local-01","rtspUrl":"rtsp://10.101.1.4:8554/stream","snapshotUrl":"http://10.101.1.4:8080/snapshot","snapshotInterval":2000,"modelUrl":"https://s3.adsist.net/adsist-cms-staging/models/bangchak_poc-1756312318569.mpta?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=cms-1752937116-2480%2F20250828%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250828T042146Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=3ad593cd5ab8dbe843e4acd83843009fdbbfc3492a75a7e6a05e59d5d945b334","modelId":21,"modelName":"bangchak_poc"}]} +2025-08-28 11:21:46,714 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:46Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:47,522 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:47Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:49,073 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:49Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:51,177 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:51Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:53,304 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:53Z","data":{"detection":null,"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:55,221 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:55Z","data":{"detection":{},"modelId":21,"modelName":"bangchak_poc"}} +2025-08-28 11:21:55,249 [INFO] RX <- {"type":"setSessionId","payload":{"displayIdentifier":"test2","sessionId":153}} +2025-08-28 11:21:59,139 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:59Z","data":{"detection":{"carModel":null,"carBrand":"Isuzu","carYear":null,"bodyType":"Pickup","licensePlateText":null,"licensePlateConfidence":null},"modelId":21,"modelName":"bangchak_poc"},"sessionId":153} +2025-08-28 11:21:59,497 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:21:59Z","data":{"detection":{"carModel":null,"carBrand":"Isuzu","carYear":null,"bodyType":"Pickup","licensePlateText":null,"licensePlateConfidence":null},"modelId":21,"modelName":"bangchak_poc"},"sessionId":153} +2025-08-28 11:22:01,445 [INFO] TX -> {"type":"imageDetection","subscriptionIdentifier":"test2;webcam-local-01","timestamp":"2025-08-28T04:22:01Z","data":{"detection":{"carModel":null,"carBrand":"Isuzu","carYear":null,"bodyType":"Pickup","licensePlateText":null,"licensePlateConfidence":null},"modelId":21,"modelName":"bangchak_poc"},"sessionId":153}