Commit 08b6e43e authored by 何家明's avatar 何家明

增加未来5分钟pm2.5的预测功能

parent f147b406
......@@ -41,8 +41,8 @@ remote:
isSuper: 'true'
token: 'b4d751b5ffff882b2e410c5901c80dc0705bb96f1bc4e8b47e918ad49085f90e'
base_url:
bme-algorithm-prediction: http://10.10.10.17:43002 # 算法预测服务
bme-screen-service: https://vis.bmetech.com/vis
# bme-screen-service: http://localhost:9070/screen
bme-reduce-cost-screen-service: https://vis.bmetech.com/reducecostscreen
# bme-screen-service: http://192.168.138.158:4050/vis # 常州中天
# bme-reduce-cost-screen-service: http://192.168.138.158:4070/reducecostscreen # 常州中天
......
......@@ -20,6 +20,8 @@ bme_screen_service = base_url["bme-screen-service"]
bme_reduce_cost_screen_service = base_url["bme-reduce-cost-screen-service"]
bme_algorithm_prediction = base_url["bme-algorithm-prediction"]
def deal_request_exception(response):
"""
......@@ -46,6 +48,56 @@ def get_size_limit(size: int, max_size=20, min_size=0) -> int:
size = min_size if size < min_size else size
return size
@mcp.tool()
def get_air_pm_25_prediction(customer_id: int, device_name: str, start_time: str, end_time: str) -> Any:
"""
根据客户id和设备名称获取PM2.5未来节点(5分钟后)预测值
start_time如果没有指定,默认值是当前时间的一天前,如:2025-04-29 16:00:00;
end_time如果没有指定,默认值是当前时间,如:2025-04-30 16:00:00;
:param customer_id: 客户id
:param device_name: 设备名称
:param start_time: 开始时间,格式为yyyy-MM-dd HH:mm:ss
:param end_time: 结束时间,格式为yyyy-MM-dd HH:mm:ss
:return: 返回结构中的字段名解释:
flag:标记, True代表预测成功,data就是预测的值,False代表预测失败,data就是错误信息
data:预测结果,当Flag为True时才说明预测成功
"""
response = requests.get(bme_screen_service + "/monitor/getMonitorList", {
"customerId": customer_id,
"order": 1,
"type": "1",
"pageNo": "1",
"pageSize": "1",
"index": 2,
"typeId": "",
"deviceName": device_name
}, headers=headers)
device_records = deal_request_exception(response).get("data", {}).get("page", {}).get("records", [])
if not device_records:
return {"flag": False, "data": "设备不存在"}
device_no = device_records[0].get("deviceNo")
response = requests.get(bme_screen_service + "/monitor/getMonitorDetailNew_new", {
"customerId": customer_id,
"deviceNo": device_no,
"startTime": start_time,
"endTime": end_time
}, headers=headers)
assemble_data = deal_request_exception(response).get("data", {}).get("assembleData", [])
result = next((item for item in assemble_data if item.get("name") == "PM2.5"), None)
if not result:
return {"flag": False, "data": "无历史数据"}
history_data = result.get("list", [])
if not history_data:
return {"flag": False, "data": "无历史数据"}
signal_no = result.get("signalNo")
response = requests.post(bme_algorithm_prediction + "/predict/pm2p5", json={
"deviceNo": device_no,
"signalNo": signal_no,
"historyList": history_data[-15:],
})
predicted_result = next(iter(deal_request_exception(response).get("predicted", [{}])), {})
return {"flag": True, "data": predicted_result.get("value")}
@mcp.tool()
def get_air_pm_10_month_focus(customer_id: int) -> Any:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment