import requests import json def load_config(config_path="stattioncfg.json"): """ 从JSON配置文件加载配置信息 :param config_path: 配置文件路径(默认当前目录config.json) :return: 配置字典(成功时),None(失败时) """ try: with open(config_path, "r", encoding="utf-8") as f: config = json.load(f) # 验证必要字段 if "station_name" not in config: print("配置错误:缺少 station_name 字段") return None return config except FileNotFoundError: print(f"配置文件 {config_path} 未找到") return None except json.JSONDecodeError: print("配置文件解析失败,请检查JSON格式") return None def get_camera_rtsp_config(station_name): """ 获取指定变电站的摄像头RTSP配置信息 :param station_name: 变电站名称(字符串) :return: 包含摄像头配置的列表(成功时),None(失败时) """ # 接口地址 url = "http://192.168.110.229:38091/api/services/isas/VideoElectronicFence/GetVideoCameraRTSPConfigure" # 请求参数 params = { "stationName": station_name } try: # 发送GET请求 response = requests.get(url, params=params, timeout=10) if response.status_code != 200: print(f"请求失败,HTTP状态码:{response.status_code}") return None json_data = response.json() if not json_data.get("success", False): print(f"接口返回错误:{json_data.get('result', {}).get('message', '未知错误')}") return None result = json_data.get("result", {}) if not (result.get("flag", False) and "resultData" in result): print("未找到有效的摄像头配置数据") return None # 提取并处理摄像头配置 cameras = result["resultData"] for cam in cameras: # 转换ROI格式 roi = cam.get('roi', '0,0,0,0') if isinstance(roi, str): cam['roi'] = tuple(map(int, roi.split(','))) elif isinstance(roi, list): cam['roi'] = tuple(map(int, roi)) else: cam['roi'] = (0, 0, 0, 0) # 补全RTSP参数 # rtsp_url = cam['url'] # if 'transportmode' not in rtsp_url: # connector = '&' if '?' in rtsp_url else '?' # cam['url'] = f"{rtsp_url}{connector}" print(f"成功获取 {result['totalCount']} 个摄像头配置") return cameras except requests.exceptions.RequestException as e: print(f"请求发生异常:{str(e)}") return None except ValueError: print("响应解析失败,无效的JSON格式") return None # 更新后的使用示例 if __name__ == "__main__": # 从配置文件加载设置 config = load_config() if not config: exit(1) station = config["station_name"] print(f"正在查询变电站:{station}") cameras = get_camera_rtsp_config(station) if cameras: print("\n摄像头列表:") for idx, camera in enumerate(cameras, 1): print(f"\n摄像头 {idx}:") print(f"名称:{camera['name']}") print(f"ID:{camera['id']}") print(f"RTSP地址:{camera['url']}") print(f"ROI区域:{camera['roi']}")