POST | /optimizer/ftm | ||
---|---|---|---|
POST | /optimizer/common |
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CommonOptimizerPortalRequestBase:
project_id: Optional[str] = None
is_batch_simulation: bool = False
force: bool = False
disable_e_b_s_spot: bool = False
is_serverless: bool = False
api_action_id: Optional[str] = None
node_id: int = 0
parallel_project: int = 0
parallel_years: int = 0
ensure_exlusive: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CommonOptimizerRequest(CommonOptimizerPortalRequestBase):
pass
class ApiResponseStatus(IntEnum):
UNDEFINED = 0
SUCCESS = 1
PENDING = 10
FAILED = 100
class BatterySimulationType(IntEnum):
UNDEFINED = 0
SINGLE_RUN = 1
BATCH_SIMULATION = 2
BATCH_SUB = 21
SITING = 100
class BatteryProjectGroup(str, Enum):
UNDEFINED = 'Undefined'
STAND_ALONE = 'StandAlone'
FTM = 'FTM'
BTM = 'BTM'
class BatteryProjectAction(str, Enum):
UNDEFINED = 'Undefined'
ARBITRAGE = 'Arbitrage'
PEAK_SHAVING = 'PeakShaving'
SMOOTING = 'Smooting'
FIRMING = 'Firming'
class DataProvider(IntEnum):
UNDEFINED = 0
SPP = 1
ERCOT = 2
MISO = 3
CAISO = 4
PJM = 5
ISONE = 6
NYISO = 7
NW = 8
SW = 9
SE = 10
AESO = 11
IESO = 12
CENACE = 20
NONISO = 99
EIA = 100
PNM = 150
NREL = 200
NOAA = 210
ENTSOE = 1000
EPIAS = 1010
SELF = 10000
class BatteryDataSoruce(str, Enum):
UNDEFINED = 'Undefined'
MERCHANT = 'Merchant'
FUTURE = 'Future'
TOD = 'TOD'
class PriceMarketType(IntEnum):
UNDEFINED = 0
REALTIME = 1
DAY_AHEAD = 10
DART = 101
class TimeGranularity(IntEnum):
UNDEFINED = 0
HOURLY = 1
DAILY = 2
WEEKLY = 3
MONTHY = 4
YEARLY = 5
FIVEMIN = 10
TENMIN = 11
FIFTEENMIN = 12
HALFHOUR = 13
QUARTERLY = 14
TWOHOURS = 21
THREEHOURS = 22
FOURHOURS = 24
SIXHOURS = 26
EIGHTHOURS = 28
TWELVEHOURS = 32
IRREGULAR = 100
class BooleanValue(str, Enum):
UNDEFINED = 'Undefined'
YES = 'Yes'
NO = 'No'
CUSTOM = 'Custom'
class CapacityMethod(str, Enum):
UNDEFINED = 'Undefined'
ANNUAL = 'Annual'
TOD = 'Tod'
SCHEDULE = 'Schedule'
class BatteryProductionDataSource(str, Enum):
UNDEFINED = 'Undefined'
SET_CLOSEST = 'SetClosest'
UPLOADED_FILE = 'UploadedFile'
class PowerPlantType(str, Enum):
UNDEFINED = 'Undefined'
SOLAR = 'Solar'
WIND = 'Wind'
HYBRID = 'Hybrid'
class RevenueStackingMode(str, Enum):
SOLVE_WITHOUT_ANCILLARY = 'SolveWithoutAncillary'
SOLVE_WITH_ANCILLARY = 'SolveWithAncillary'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BatteryProjectForOptimizer:
project_id: Optional[str] = None
version: Optional[str] = None
base_id: Optional[str] = None
alt_id: int = 0
simulation_type: Optional[BatterySimulationType] = None
project_group: Optional[BatteryProjectGroup] = None
project_action: Optional[BatteryProjectAction] = None
iso: Optional[DataProvider] = None
name: Optional[str] = None
base_node_id: int = 0
org_node_id: int = 0
base_zone_id: int = 0
data_source: Optional[BatteryDataSoruce] = None
base_market: Optional[PriceMarketType] = None
price_granularity: Optional[TimeGranularity] = None
start_date: datetime.datetime = datetime.datetime(1, 1, 1)
end_date: datetime.datetime = datetime.datetime(1, 1, 1)
battery_capacity: Decimal = decimal.Decimal(0)
interconnection_limit: Decimal = decimal.Decimal(0)
namepalet_capacity: Decimal = decimal.Decimal(0)
# @Ignore()
charge_discharge_limit: Decimal = decimal.Decimal(0)
# @Ignore()
base_capacity_rate: Decimal = decimal.Decimal(0)
# @Ignore()
capacity_rate: Decimal = decimal.Decimal(0)
charge_efficiency: Decimal = decimal.Decimal(0)
dis_charge_efficiency: Decimal = decimal.Decimal(0)
paracitic_losses_operation: Decimal = decimal.Decimal(0)
paracitic_losses_resting: Decimal = decimal.Decimal(0)
hvac_losses: Decimal = decimal.Decimal(0)
ac_cabling_losses: Decimal = decimal.Decimal(0)
transformator_losses: Decimal = decimal.Decimal(0)
thermal_losses: Decimal = decimal.Decimal(0)
other_losses: Decimal = decimal.Decimal(0)
use_energy: Optional[BooleanValue] = None
use_capacity: Optional[BooleanValue] = None
capacity_basis: Optional[CapacityMethod] = None
capacity_payment: Decimal = decimal.Decimal(0)
net_capacity_factor: Decimal = decimal.Decimal(0)
use_ancillary: Optional[BooleanValue] = None
production_data_source: Optional[BatteryProductionDataSource] = None
power_plant_type: Optional[PowerPlantType] = None
solar_ac_capacity: Decimal = decimal.Decimal(0)
solar_dc_capacity: Decimal = decimal.Decimal(0)
wind_ac_capacity: Decimal = decimal.Decimal(0)
# @Ignore()
solar_capacity_rate: Decimal = decimal.Decimal(0)
# @Ignore()
wind_capacity_rate: Decimal = decimal.Decimal(0)
status: int = 0
simulation_status: int = 0
last_simulation_date: datetime.datetime = datetime.datetime(1, 1, 1)
data_start_date: datetime.datetime = datetime.datetime(1, 1, 1)
data_end_date: datetime.datetime = datetime.datetime(1, 1, 1)
solar_id: int = 0
wind_id: int = 0
lmp_file_id: int = 0
production_file_id: int = 0
load_file_id: int = 0
capacity_file_id: int = 0
node_alt_id: int = 0
node_ref_id: int = 0
use_regup: Decimal = decimal.Decimal(0)
use_regdown: Decimal = decimal.Decimal(0)
use_spinning: Decimal = decimal.Decimal(0)
use_non_spinning: Decimal = decimal.Decimal(0)
solar_degredation: Decimal = decimal.Decimal(0)
battery_degredation: Decimal = decimal.Decimal(0)
augmentation: Decimal = decimal.Decimal(0)
augmentation_frequency: Decimal = decimal.Decimal(0)
energy_increment: Decimal = decimal.Decimal(0)
ancillary_increment: Decimal = decimal.Decimal(0)
enable_grid_arbitrage: int = 0
increment_referance_year: int = 0
representative_year: int = 0
use_future_data: int = 0
max_daily_cycle: Decimal = decimal.Decimal(0)
min_daily_profit_per_mw: Decimal = decimal.Decimal(0)
ancillary_file_id: int = 0
max_charging_price_cap: Decimal = decimal.Decimal(0)
max_discharging_price_cap: Decimal = decimal.Decimal(0)
max_ancillary_price_cap: Decimal = decimal.Decimal(0)
revenue_stacking_mode: Optional[RevenueStackingMode] = None
optimization_quality: int = 0
use_internal_solver: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CommonOptimizerResponse:
status: Optional[ApiResponseStatus] = None
message: Optional[str] = None
api_action_id: Optional[str] = None
detail: Optional[str] = None
items: Optional[List[BatteryProjectForOptimizer]] = None
Python CommonOptimizerRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /optimizer/ftm HTTP/1.1
Host: dev-optimization.power.dev
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<CommonOptimizerRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.ServiceModel">
<ApiActionId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">00000000-0000-0000-0000-000000000000</ApiActionId>
<DisableEBSSpot xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</DisableEBSSpot>
<EnsureExlusive xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</EnsureExlusive>
<Force xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</Force>
<IsBatchSimulation xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</IsBatchSimulation>
<IsServerless xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">false</IsServerless>
<NodeId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</NodeId>
<ParallelProject xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</ParallelProject>
<ParallelYears xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">0</ParallelYears>
<ProjectId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">00000000-0000-0000-0000-000000000000</ProjectId>
</CommonOptimizerRequest>
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <CommonOptimizerResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Common.Models"> <ApiActionId>00000000-0000-0000-0000-000000000000</ApiActionId> <Detail>String</Detail> <Items i:nil="true" /> <Message>String</Message> <Status>Undefined</Status> </CommonOptimizerResponse>