| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- from __future__ import annotations
- from typing import Any
- from .auth import load_projects_config
- from .collector_api import (
- connect_device as api_connect_device,
- disconnect_device as api_disconnect_device,
- list_device_points as api_list_device_points,
- list_devices as api_list_devices,
- )
- from .mcp_app import mcp
- @mcp.tool(
- name="project.list",
- title="Project List",
- description=(
- "List enabled 汇采 projects available to this MCP service, including "
- "project_key, project_name, base_url, and data_collector_base_url. "
- "Call this first to choose project_key."
- ),
- tags={"project", "list"},
- )
- def project_list() -> dict[str, Any]:
- projects = load_projects_config()
- result = [
- {
- "project_key": item["project_key"],
- "project_name": item["project_name"],
- "base_url": item["base_url"],
- "data_collector_base_url": item["data_collector_base_url"],
- }
- for item in projects
- if item["enabled"]
- ]
- result.sort(key=lambda item: item["project_key"])
- return {"projects": result, "total": len(result)}
- @mcp.tool(
- name="collector.device_list",
- description=(
- "汇采-返回目前所有设备及其详情信息。返回内容中的设备字段包括不限于 name 设备名、"
- "type 设备类型、num_points 点位数量、running_status 运行状态:"
- "0 已停止,1 正常,2 异常。type 为 devicegroup 时表示设备分组,"
- "需要继续检查 groups 下的设备。"
- "num_points 默认 false;只有需要统计设备或点位分组下的点位数量时才传 true。"
- ),
- )
- def collector_device_list(project_key: str, num_points: bool = False) -> dict[str, Any]:
- return api_list_devices(project_key, num_points=num_points)
- @mcp.tool(
- name="collector.device_connect",
- description=(
- "汇采-连接设备。连接成功不代表正在采集,设备采集状态请看响应 data.running_status"
- "device_id 是设备列表中的设备 id;device_type 可传modbus、s7、bacnet、ethernet-ip、opc-ua、opc-da、snmp、iec104。"
- "响应data字段下常见状态:"
- "data.status 1=未连接、2=已连接、3=连接异常;"
- "data.running_status 0=未采集、1=采集中、2=采集异常。"
- ),
- )
- def collector_device_connect(
- project_key: str,
- device_id: int,
- device_type: str,
- ) -> dict[str, Any]:
- return api_connect_device(project_key, device_id=device_id, device_type=device_type)
- @mcp.tool(
- name="collector.device_disconnect",
- description=(
- "汇采-断开设备。用于停止指定设备连接/采集相关状态,使设备回到未连接或空闲状态"
- "device_id 是设备列表中的设备 id;device_type 可传modbus、s7、bacnet、ethernet-ip、opc-ua、opc-da、snmp、iec104。"
- "响应data字段下常见状态:"
- "data.status 1=未连接、2=已连接、3=连接异常;"
- "data.running_status 0=未采集、1=采集中、2=采集异常。"
- ),
- )
- def collector_device_disconnect(
- project_key: str,
- device_id: int,
- device_type: str = "modbus",
- ) -> dict[str, Any]:
- return api_disconnect_device(project_key, device_id=device_id, device_type=device_type)
- @mcp.tool(
- name="collector.device_points",
- description=(
- "汇采-查询设备下的所有点位。device_id 是设备id, device_type 可传modbus、s7、bacnet、ethernet-ip、opc-ua、opc-da、snmp、iec104。"
- "status 0=未采集、1=采集正常、2=采集异常, present_value 是当前值"
- ),
- )
- def collector_device_points(
- project_key: str,
- device_id: int,
- device_type: str,
- ) -> dict[str, Any]:
- return api_list_device_points(
- project_key,
- device_id=device_id,
- device_type=device_type,
- )
|