Newer
Older
lynxi-casic-demo / main.py
zhangyingjie on 24 Jan 2 KB 增加后台接口调用
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()