Coverage for src/data_api/mcp/tools/energy.py: 100%
16 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-11-13 19:28 +0000
1"""Energy usage MCP tool."""
3from data_api.mcp.errors import live_tool_errors
4from data_api.mcp.server import mcp
5from data_api.mcp.tools.result_types import EnergyResult
6from data_api.runtime import get_runtime
9async def _get_energy_usage() -> EnergyResult:
10 """
11 Get real-time electricity usage for campus.
13 Returns:
14 Dictionary with current electricity usage by zone.
15 """
16 with live_tool_errors():
17 data = await get_runtime().energy.get_realtime_electricity_usage()
18 zones = []
19 for item in data:
20 capacity = item.get("capacity") or 1 # Avoid division by zero
21 usage = item.get("data", 0)
22 zones.append(
23 {
24 "name": item.get("name"),
25 "usage_kw": usage,
26 "capacity_kw": item.get("capacity"),
27 "usage_percent": round(usage / capacity * 100, 1) if capacity > 0 else 0,
28 "last_updated": item.get("last_updated"),
29 }
30 )
31 return {"zones": zones}
34@mcp.tool(
35 name="get_energy_usage",
36 title="查詢校園即時用電",
37 description="Get real-time campus electricity usage. "
38 "Use this to check current power consumption on campus.",
39)
40async def get_energy_usage() -> dict:
41 """Get real-time electricity usage for campus."""
42 return await _get_energy_usage()