太阳能发电预测服务

一个结合瑞典太阳能板安装数据和实时天气预测的AI太阳能发电预测服务,用于回答关于瑞典各地太阳能生产的自然语言问题。

  • by j-jayes
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 j-jayes/solar-sweden-mcp

使用说明

瑞典太阳能MCP

微软Copilot Studio的人工智能太阳能发电预测

MCP(模型上下文协议)服务器,将瑞典太阳能电池板安装数据与实时SMHI天气预报相结合,使Microsoft Copilot Studio能够回答有关瑞典太阳能生产的自然语言问题。


实时部署

端点 URL
MCP(流式HTTP) https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/mcp
MCP(SSE回退) https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/sse
健康检查 https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/health

Copilot工作室设置: 话题→ 添加动作→ MCP → 粘贴 /mcp 上面的URL→ 所有8个工具都是自动发现的。


你能问什么?

问题 工具
“卡尔斯克鲁纳的太阳能发展有多快?” get_solar_growth
“哪个城市增长最快?” get_fastest_growth
“本周云将花费我们多少电力?” compare_generation_forecast
“下周哪个地区将产生最多的太阳能?” find_optimal_solar_region
“给我看瑞典各地太阳能发电量的地图” get_solar_map
“明天SE3的电价是多少?” get_electricity_prices
“哪些城市位于SE3和SE4的边界?” list_zone_border_municipalities
“卡尔斯克鲁纳的太阳能产品今天值多少钱?” estimate_solar_revenue

工具

历史太阳能数据(能源数据)

  • get_solar_growth:返回瑞典任何城市的历史容量增长:自2016年以来的同比百分比和复合年增长率。
  • get_fastest_growth:根据两年内太阳能电池板安装增长最快的城市对所有城市进行排名。
  • get_solar_map:返回瑞典按城市太阳能装机容量(kW)着色的choropleth PNG地图,以及包含全国总量和前10个城市的JSON摘要。

天气和发电量预报(SMHI)

  • compare_generation_forecast:将未来几天的预期发电量与完美晴朗的天空情景进行比较,以千瓦时和百分比显示云层覆盖损失。
  • find_optimal_solar_region:根据(1)最阳光的预测和(2)最高的预期发电量对15个城市进行排名。

电价(北池)

  • get_electricity_prices:返回Nord Pool四个瑞典定价区(SE1–SE4)的日前电力现货价格。
  • list_zone_border_municipalities:列出位于电价区边界的城市,可用于跨境价格比较。

综合分析

  • estimate_solar_revenue:结合SMHI天气预报、太阳能装机容量和北池电力现货价格,估算特定日期市政太阳能发电的财务价值。

数据源

  • 能源消耗 -290个城市×9年(2016-2024年),通过PxWeb API下载并缓存为Parquet。国家能力从 134兆瓦→ 4,808兆瓦 在此期间。
  • SMHI开放数据 --免费9天定点天气预报(CC BY 4.0)。清晰度来自加权云层覆盖率(lcc/mcc/hcc),而不仅仅是天气符号。
  • 通过mgrey.se连接北池 --日前电力现货价格(SE1-SE4)。明天的价格通常在欧洲中部时间13:00后公布。
  • okfse/瑞典geojson --290功能GeoJSON用于choropleth地图。

Copilot Studio代理设置

1.创建或打开代理

首选 副驾驶工作室,创建新代理或打开现有代理。

2.添加MCP服务器

导航至 行动 在左侧边栏中→ 添加操作 → 模型上下文协议.

输入服务器URL:

https://solar-mcp.thankfulglacier-f4abeca6.swedencentral.azurecontainerapps.io/mcp

Copilot Studio将连接并自动发现所有8个工具。不需要身份验证。

3.服务器描述

当系统提示输入服务器名称和描述时,请使用:

姓名: 瑞典太阳能MCP

说明: 提供瑞典各市太阳能电池板安装的实时和历史数据。使用它来回答有关太阳能容量增长、经天气调整的发电量预测、北池电价、区域比较的问题,并生成瑞典太阳能基础设施的视觉choropleth地图。数据涵盖了2016年至2024年瑞典所有290个城市,包括SMHI的实时天气和Nord Pool的现货价格。

4.代理说明

将以下内容添加到您的代理中 说明 字段,为其提供正确的上下文(您可以在中查看完整的瑞典语说明 copilot-studio-instructions.md):

Du är Solar Sverige, en specialiserad assistent för solenergidata och 
elmarknadsanalys i Sverige. Svara alltid på svenska.

Du kan svara på frågor om:
- Hastigheten för solcellsutbyggnad i specifika kommuner
- Den förväntade elproduktionen (kWh) för de kommande dagarna
- Elpriser från Nord Pool (SE1-SE4)
- Beräknade intäkter för solenergi i en kommun
- Kartor över solkapaciteten i Sverige

När du visar ett kart-URL från get_solar_map, rendera det alltid som en inbäddad 
bild med markdown-syntaxen ![karta](url). Säg inte "Jag kan inte visa bilder" - 
bilden är en renderad PNG som fungerar i chatten.

5.测试一下

使用 测试 Copilot Studio中的窗格,显示以下示例提示:

  • “卡尔斯克鲁纳的太阳能发展有多快?”
  • “2020年至2024年期间,哪个城市增长最快?”
  • “与晴朗的天空相比,哥德堡本周会产生什么?”
  • “SE3目前的电力现货价格是多少?”
  • “根据北池现货价格,马尔默的太阳能预计明天能赚多少钱?”
  • “未来7天,瑞典哪个城市将产生最多的太阳能?”
  • “给我看瑞典各地太阳能发电量的地图”

快速入门(本地)

# Install dependencies
uv sync

# Download real data (first time only)
uv run python scripts/download_solar_data.py   # → data/processed/solar_installations.parquet
uv run python scripts/download_geo.py          # → data/geo/municipalities.geojson
uv run python -m playwright install chromium   # for get_solar_map screenshots

# Run the server
uv run uvicorn solar_mcp.server:app --reload --port 8000

# Run the tests
uv run pytest tests/ -v    # 44 tests

将Copilot Studio连接到 http://localhost:8000/mcp 用于本地测试。

窗户: 如果 uv run 由于权限问题而失败,请使用 .venv/Scripts/python -m uvicorn ... 相反。


项目结构

solar-sweden-mcp/
├── data/
│   ├── raw/                 ← cached API response (JSON)
│   ├── processed/           ← solar_installations.parquet (290 municipalities)
│   └── geo/                 ← municipalities.geojson (290 features)
├── scripts/
│   ├── download_solar_data.py   ← fetches Energimyndigheten PxWeb API
│   └── download_geo.py          ← downloads Sweden municipality GeoJSON
├── src/solar_mcp/
│   ├── server.py                ← FastAPI + MCP (Streamable HTTP + SSE)
│   ├── tools/
│   │   ├── electricity_prices.py
│   │   ├── generation_forecast.py
│   │   ├── growth_ranking.py
│   │   ├── optimal_region.py
│   │   ├── solar_growth.py
│   │   ├── solar_map.py         ← folium choropleth + Playwright screenshot
│   │   └── solar_revenue.py     ← combined Nord Pool + SMHI analysis
│   ├── data/
│   │   ├── energimyndigheten.py ← parquet loader
│   │   └── smhi_client.py       ← SMHI API client + 30-min TTL cache
│   └── utils/
│       ├── municipality_coords.py
│       └── solar_formula.py     ← cloud-layer clearness, PVGIS PSH table
├── tests/                   ← 44 tests, all passing
├── presentation/            ← Quarto slide deck
├── deploy/
│   ├── azure-deploy.sh      ← first-time deploy
│   └── azure-update.sh      ← redeploy after code changes
└── Dockerfile               ← single-stage, includes Playwright Chromium (~1.2 GB)

部署到Azure

# First-time deploy (creates resource group, ACR, Container App)
./deploy/azure-deploy.sh

# Redeploy after code changes
./deploy/azure-update.sh

当前部署运行在 Azure容器应用 (瑞典中央),1个CPU/2Gi内存,至少1个复制品。


另见