通过文件URL创建负荷预测任务

本文为您介绍如何通过SDK调用如下算法API:CreateLoadForecastByFileUrlJob- 通过文件URL创建负荷预测任务

前提条件

已安装SDK,并已获取云账号AK信息。

接口参数

请求参数

字段名称

字段详情

DeviceType string

设备类型,每个 systemType 支持的设备类型有: 系统类型:设备类型

  • load: electricityMeter --市电电表

  • hvac: gateway-hvac --空调

  • flexible: electricityMeter --照明电表

  • charge:gateway-charging --充电桩

示例值:electricityMeter

HistoryUrl string

历史数据 csv 文件 url 地址,在调用期间地址需要公网可访问。

示例值: https://bucket.oss-cn-hangzhou.aliyuncs.com/dir/target_file.csv

Freq string

默认 15min;需要与 historyData 的数据频率一致;枚举值:

  • FIFTEEN_MIN: 15 分钟

  • FIVE_MIN: 5 分钟

  • ONE_HOUR: 1 小时

  • ONE_DAY: 1 天

示例值:FIFTEEN_MIN枚举值:FIFTEEN_MINFIVE_MINONE_HOURONE_DAY

Duration integer<int32>

从运行日(含)开始, 预测时长(单位:天) 非必填,默认 1 天

示例值:1

SystemType string

系统类型,支持的系统类型有:

  • load: 市电

  • hvac: 空调

  • flexible:照明

  • charge:充电桩

示例值:load

RunDate string

运行日,精确到天,“yyyy-MM-dd”格式

示例值:2025-12-12

TimeZone string

时区,默认上海时区:Asia/Shanghai

示例值:Asia/Shanghai

ModelVersion string

模型对应的版本号,默认为 latest

示例值:latest

BusinessKey string

业务键,如场站名称编号。

示例值:stationA

TimeColumn string

历史数据 csv 文件中的时间列,时间列需要符合 yyyy-MM-dd HH:mm:SS 格式,数据频率需要与 freq 字段对齐。

示例值:runTime

ValueColumn string

历史数据 csv 文件中的值列,需要为数值类型。

示例值:value

请求示例

JSON格式为例:

{
  "historyUrl": "https://bucket.oss-cn-hangzhou.aliyuncs.com/dir/target_file.csv",
  "systemType": "load",
  "deviceType": "electricityMeter",
  "runDate": "2023-08-06",
  "duration": 1,
  "freq": "FIFTEEN_MIN",
  "timeZone": "Asia/Shanghai",
  "modelVersion": "latest",
  "businessKey": "stationA",
  "timeColumn": "runTime",
  "valueColumn": "value"
}

返回参数

字段名称

字段详情

RequestId string

Id of the request

示例值:68738E75-43C1-5AE5-9F3A-AFEF576D7B5F

Success string

是否调用成功。

  • True:调用成功。

  • False:调用失败。

示例值:True

Code string

状态码。

说明 200 表示成功。

示例值:200

Message string

返回信息。

示例值:successful

- Data object

返回 JOB 详细信息

--Completed boolean

操作是否完成,取值范围: True:当前 Job 已经执行完成。 False:当前 Job 还在执行中。

示例值:True

--CreateTime string

任务创建时间

示例值:2024-12-22 00:00:21

--Error string

当前操作异常或者失败时的错误信息

示例值:""

--JobId string

算法计算任务 ID

示例值:8c0ca18a-246a-4acd-80ca-e16d8ff5ef33

--Progress integer<int32>

进度

示例值:25

--- Response object

计算任务的结果

----DebugInfo any

调试信息

示例值:{}

----JobType string

计算任务类型,枚举值:LoadForecast PowerForecast

示例值:PowerForecast

----Result any

计算任务的结果

示例值:{}

--Status string

任务状态,枚举值: RUNNING, SUCCESS, FAIL

示例值:RUNNING

说明

计算任务是一个异步任务,最终计算任务的结果,需要使用Jobld通过结果查询结果获得。

返回示例

{
  "RequestId": "68738E75-43C1-5AE5-9F3A-AFEF576D7B5F",
  "Success": "True",
  "Code": "200",
  "Message": "successful",
  "Data": {
    "Completed": true,
    "CreateTime": "2024-12-22 00:00:21",
    "Error": "\"\"",
    "JobId": "8c0ca18a-246a-4acd-80ca-e16d8ff5ef33",
    "Progress": 25,
    "Response": {
      "DebugInfo": "{}",
      "JobType": "LoadForecast",
      "Result": "{}"
    },
    "Status": "RUNNING"
  }
}

SDK调用示例

Java SDK使用示例

当不需要并发调用时,可以使用Java同步的方式调用SDK;当需要并发调用时,使用Java异步的方式调用SDK。

Java同步(pom.xml):

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>brain_industrial20200920</artifactId>
  <version>2.1.0</version>
</dependency>

Java同步(sample.java):

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用凭据初始化账号Client</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.brain_industrial20200920.Client createClient() throws Exception {
        // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378657.html。
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // Endpoint 请参考 https://api.aliyun.com/product/brain-industrial
        config.endpoint = "brain-industrial.cn-hangzhou.aliyuncs.com";
        return new com.aliyun.brain_industrial20200920.Client(config);
    }

    public static void main(String[] args_) throws Exception {
        
        com.aliyun.brain_industrial20200920.Client client = Sample.createClient();
        com.aliyun.brain_industrial20200920.models.CreateLoadForecastByFileUrlJobRequest createLoadForecastByFileUrlJobRequest = new com.aliyun.brain_industrial20200920.models.CreateLoadForecastByFileUrlJobRequest()
                .setDeviceType("electricityMeter")
                .setHistoryUrl("https://bucket.oss-cn-hangzhou.aliyuncs.com/dir/target_file.csv")
                .setFreq("FIFTEEN_MIN")
                .setDuration(1)
                .setSystemType("load")
                .setRunDate("2025-06-01")
                .setBusinessKey("stationA")
                .setTimeColumn("runTime")
                .setValueColumn("value");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            client.createLoadForecastByFileUrlJobWithOptions(createLoadForecastByFileUrlJobRequest, runtime);
        } catch (TeaException error) {
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

Java异步(pom.xml):

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-brain_industrial20200920</artifactId>
    <version>2.0.2</version>
</dependency>

Java异步(sample.java):

// This file is auto-generated, don't edit it. Thanks.
package demo;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.brain_industrial20200920.models.*;
import com.aliyun.sdk.service.brain_industrial20200920.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;

//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;

public class CreateLoadForecastByFileUrlJob {
    public static void main(String[] args) throws Exception {

        // HttpClient Configuration
        /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                .maxConnections(128) // Set the connection pool size
                .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                // Configure the proxy
                .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<your-proxy-hostname>", 9001))
                        .setCredentials("<your-proxy-username>", "<your-proxy-password>"))
                // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                .x509TrustManagers(new X509TrustManager[]{})
                .keyManagers(new KeyManager[]{})
                .ignoreSSL(false)
                .build();*/

        // Configure Credentials authentication information, including ak, secret, token
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                .build());

        // Configure the Client
        AsyncClient client = AsyncClient.builder()
                .region("cn-hangzhou") // Region ID
                //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                .credentialsProvider(provider)
                //.serviceConfiguration(Configuration.create()) // Service-level configuration
                // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                  // Endpoint 请参考 https://api.aliyun.com/product/brain-industrial
                                .setEndpointOverride("brain-industrial.cn-hangzhou.aliyuncs.com")
                        //.setConnectTimeout(Duration.ofSeconds(30))
                )
                .build();

        // Parameter settings for API request
        CreateLoadForecastByFileUrlJobRequest createLoadForecastByFileUrlJobRequest = CreateLoadForecastByFileUrlJobRequest.builder()
                .deviceType("electricityMeter")
                .historyUrl("https://bucket.oss-cn-hangzhou.aliyuncs.com/dir/target_file.csv")
                .freq("FIFTEEN_MIN")
                .duration(1)
                .systemType("load")
                .runDate("2025-06-01")
                .businessKey("stationA")
                .timeColumn("runTime")
                .valueColumn("value")
                // Request-level configuration rewrite, can set Http request parameters, etc.
                // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                .build();

        // Asynchronously get the return value of the API request
        CompletableFuture<CreateLoadForecastByFileUrlJobResponse> response = client.createLoadForecastByFileUrlJob(createLoadForecastByFileUrlJobRequest);
        // Synchronously get the return value of the API request
        CreateLoadForecastByFileUrlJobResponse resp = response.get();
        System.out.println(new Gson().toJson(resp));
        // Asynchronous processing of return values
        /*response.thenAccept(resp -> {
            System.out.println(new Gson().toJson(resp));
        }).exceptionally(throwable -> { // Handling exceptions
            System.out.println(throwable.getMessage());
            return null;
        });*/

        // Finally, close the client
        client.close();
    }

}

Python SDK使用示例

Python依赖:

pip install alibabacloud_brain_industrial20200920==2.1.0
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys

from typing import List

from alibabacloud_brain_industrial20200920.client import Client as brain_industrial20200920Client
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_brain_industrial20200920 import models as brain_industrial_20200920_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> brain_industrial20200920Client:
        """
        使用凭据初始化账号Client
        @return: Client
        @throws Exception
        """
        # 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378659.html。
        credential = CredentialClient()
        config = open_api_models.Config(
            credential=credential
        )
        # Endpoint 请参考 https://api.aliyun.com/product/brain-industrial
        config.endpoint = f'brain-industrial.cn-hangzhou.aliyuncs.com'
        return brain_industrial20200920Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_load_forecast_by_file_url_job_request = brain_industrial_20200920_models.CreateLoadForecastByFileUrlJobRequest(
            device_type='electricityMeter',
            history_url='https://bucket.oss-cn-hangzhou.aliyuncs.com/dir/target_file.csv',
            freq='FIFTEEN_MIN',
            duration=1,
            system_type='load',
            run_date='2025-06-01',
            business_key='stationA',
            time_column='runTime',
            value_column='value'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            client.create_load_forecast_by_file_url_job_with_options(create_load_forecast_by_file_url_job_request, runtime)
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client()
        create_load_forecast_by_file_url_job_request = brain_industrial_20200920_models.CreateLoadForecastByFileUrlJobRequest(
            device_type='electricityMeter',
            history_url='https://bucket.oss-cn-hangzhou.aliyuncs.com/dir/target_file.csv',
            freq='FIFTEEN_MIN',
            duration=1,
            system_type='load',
            run_date='2025-06-01',
            business_key='stationA',
            time_column='runTime',
            value_column='value'
        )
        runtime = util_models.RuntimeOptions()
        try:
            # 复制代码运行请自行打印 API 的返回值
            await client.create_load_forecast_by_file_url_job_with_options_async(create_load_forecast_by_file_url_job_request, runtime)
        except Exception as error:
            # 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
            # 错误 message
            print(error.message)
            # 诊断地址
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)


if __name__ == '__main__':
    Sample.main(sys.argv[1:])