소스 검색

feat: 添加仪表点位查询功能

yangkaixiang 3 주 전
부모
커밋
38d100611f
4개의 변경된 파일47개의 추가작업 그리고 1개의 파일을 삭제
  1. 8 1
      README.md
  2. 13 0
      instrument_config_mcp/config_api.py
  3. 8 0
      instrument_config_mcp/server.py
  4. 18 0
      scripts/smoke_test.py

+ 8 - 1
README.md

@@ -123,6 +123,7 @@ uv run --python 3.13 python -m instrument_config_mcp
 - `list_meter_types`
 - `search_devices`
 - `search_meters`
+- `search_points`
 
 除 `project.list` 外,其他工具都必须传 `project_key`。
 
@@ -184,11 +185,17 @@ uv run --python 3.13 python scripts/smoke_test.py search-meters --project-key de
 uv run --python 3.13 python scripts/smoke_test.py search-devices --project-key dev-01 --system-ids 21 --device-type-ids 5
 ```
 
+示例 6:查询某个仪表下的点位
+
+```bash
+uv run --python 3.13 python scripts/smoke_test.py search-points --project-key dev-01 --id 1785 --page-num 1
+```
+
 ## 联调建议顺序
 
 1. 先运行 `list-device-types` 和 `list-meter-types`,确认认证链路正常
 2. 再运行 `list-locations` 或 `list-system-tree`,确认配置接口可访问
-3. 最后运行 `search-devices` 或 `search-meters` 做正式搜索
+3. 最后运行 `search-devices`、`search-meters` 或 `search-points` 做正式搜索
 
 ## 常见问题
 

+ 13 - 0
instrument_config_mcp/config_api.py

@@ -139,3 +139,16 @@ def search_meters(
     if status is not None:
         payload["status"] = status
     return _post_config(project_key, "/api/configapi/meter/list", payload)
+
+
+def search_points(project_key: str, id: int, page_size: int = 100, page_num: int = 1) -> Any:
+    return _post_config(
+        project_key,
+        "/api/configapi/meter/search_point",
+        {
+            "operator": CONFIG_OPERATOR,
+            "page_size": page_size,
+            "page_num": page_num,
+            "id": id,
+        },
+    )

+ 8 - 0
instrument_config_mcp/server.py

@@ -14,6 +14,7 @@ from .config_api import (
     list_systems as api_list_systems,
     search_devices as api_search_devices,
     search_meters as api_search_meters,
+    search_points as api_search_points,
 )
 
 
@@ -162,6 +163,13 @@ def search_meters(
     return _append_next_page_hint(payload, page_num)
 
 
+@mcp.tool()
+def search_points(project_key: str, id: int, page_size: int = 100, page_num: int = 1) -> Any:
+    """Search points under a meter by meter id."""
+    payload = api_search_points(project_key, id=id, page_size=page_size, page_num=page_num)
+    return _append_next_page_hint(payload, page_num)
+
+
 def main() -> None:
     host = os.getenv("MCP_HOST", "0.0.0.0").strip() or "0.0.0.0"
     port = int(os.getenv("MCP_PORT", "8500"))

+ 18 - 0
scripts/smoke_test.py

@@ -12,6 +12,7 @@ from instrument_config_mcp.config_api import (
     list_systems,
     search_devices,
     search_meters,
+    search_points,
 )
 
 
@@ -77,6 +78,12 @@ def build_parser() -> argparse.ArgumentParser:
     p.add_argument("--measurement-device-type-ids", type=int, nargs="*", default=[])
     p.add_argument("--status", type=int)
 
+    p = subparsers.add_parser("search-points")
+    p.add_argument("--project-key", required=True)
+    p.add_argument("--id", type=int, required=True)
+    p.add_argument("--page-size", type=int, default=100)
+    p.add_argument("--page-num", type=int, default=1)
+
     return parser
 
 
@@ -145,6 +152,17 @@ def main() -> None:
         )
         return
 
+    if args.command == "search-points":
+        _print(
+            search_points(
+                args.project_key,
+                id=args.id,
+                page_size=args.page_size,
+                page_num=args.page_num,
+            )
+        )
+        return
+
     raise ValueError(f"unsupported command: {args.command}")