import threading import time import pylynchipsdk as sdk from common import get_box_sn from constants import HEART_INTERVAL, HEART_URI, SERVER_BASE_URL from download_tool import check_file from global_logger import logger from http_tool import HttpTool from info_query import query_device_info from app import run_device from scene_runner import run_scene_device def upload_heart(box_sn): # todo 细化每个摄像头的推理状态? if not box_sn: logger.error('box_sn is empty, exit upload heart') return tool = HttpTool() while True: try: url = f'{SERVER_BASE_URL}{HEART_URI}' params = {'code': box_sn} tool.get(url=url,params=params,need_token=True) except Exception as e: logger.exception(f'upload heart failed: {e}') time.sleep(HEART_INTERVAL) if __name__ == "__main__": box_sn = get_box_sn() logger.info(f"box_sn = {box_sn}") lyn_device_count, ret = sdk.lyn_get_device_count() if ret != 0 or lyn_device_count <= 0: logger.error("Error: Unable to fetch device count or no devices available.") exit(1) device_list = query_device_info(box_sn) threads = [] device_idx = 0 for idx, device in enumerate(device_list): logger.debug(device) if device.mode_type == 0: model_list = device.model_relations for model in model_list: logger.debug(model) check_file(file_path=model.model_path,file_version=model.version,type='model') if model_list: lyn_device_id = (device_idx) % lyn_device_count device_idx += 1 logger.debug(f'===========================================model {len(model_list)}') run_device(device.device_no, device.input_url,device.output_url,lyn_device_id, model_list, device.alarm_interval, threads) elif device.mode_type == 1: # todo scene_info = device.scene_relation if scene_info: lyn_device_id = (device_idx) % lyn_device_count device_idx += 1 logger.debug(f'===========================================scene {scene_info}') # check_file(file_path=scene_info.scene_path,file_version=scene_info.version ,type='scene') run_scene_device(device.device_no, device.input_url,device.output_url,lyn_device_id, scene_info, device.alarm_interval, threads) pass heart_thread = threading.Thread(target=upload_heart, args=(box_sn,)) heart_thread.start() threads.append(heart_thread) # 等待所有线程完成 for thread in threads: thread.join()