POST | /optimizer/monthly |
---|
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
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 BooleanValue(str, Enum):
UNDEFINED = 'Undefined'
YES = 'Yes'
NO = 'No'
CUSTOM = 'Custom'
class PriceMarketType(IntEnum):
UNDEFINED = 0
REALTIME = 1
DAY_AHEAD = 10
DART = 101
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BatteryProjectTodItem:
month: int = 0
week_day: int = 0
hour: int = 0
price: Decimal = decimal.Decimal(0)
# @Ignore()
id: Optional[str] = None
class RevenueStackingMode(str, Enum):
SOLVE_WITHOUT_ANCILLARY = 'SolveWithoutAncillary'
SOLVE_WITH_ANCILLARY = 'SolveWithAncillary'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class MonthlyRequestBase:
project_id: Optional[str] = None
node_alt_id: int = 0
iso: Optional[DataProvider] = None
use_energy: Optional[BooleanValue] = None
use_ancillary: Optional[BooleanValue] = None
use_capacity_tod: bool = False
base_market: Optional[PriceMarketType] = None
capacity_t_o_ds: Optional[List[BatteryProjectTodItem]] = None
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)
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)
other_losses: Decimal = decimal.Decimal(0)
representative_year: int = 0
increment_referance_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
lmp_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
ensure_exlusive: int = 0
node_ref_id: int = 0
use_internal_solver: bool = False
class PowerPlantType(str, Enum):
UNDEFINED = 'Undefined'
SOLAR = 'Solar'
WIND = 'Wind'
HYBRID = 'Hybrid'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BatteryScenarioKeyGroup:
key_id: int = 0
year: int = 0
node_id: int = 0
provider: Optional[DataProvider] = None
zone_id: int = 0
plant_type: Optional[PowerPlantType] = None
solar_id: int = 0
wind_id: int = 0
is_serverless: bool = False
class BatteryScenarioType(str, Enum):
UNDEFINED = 'Undefined'
OPTIMIZATION = 'Optimization'
SUM = 'Sum'
OPTI_SUM = 'OptiSum'
FULL_TOD = 'FullTod'
CAPACITY_TOD = 'CapacityTod'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BatteryScenarioKeyItem:
project_id: Optional[str] = None
key_id: int = 0
key_type: Optional[BatteryScenarioType] = None
record_key: Optional[str] = None
job_status: int = 0
status: int = 0
min_date: datetime.datetime = datetime.datetime(1, 1, 1)
max_date: datetime.datetime = datetime.datetime(1, 1, 1)
year: int = 0
yoy_status: int = 0
usable_capacity: Decimal = decimal.Decimal(0)
usable_capacity_factor: Decimal = decimal.Decimal(0)
solar_usable_capacity: Decimal = decimal.Decimal(0)
solar_usable_capacity_factor: Decimal = decimal.Decimal(0)
base_market: Optional[PriceMarketType] = None
base_capacity_rate: Decimal = decimal.Decimal(0)
capacity_rate: Decimal = decimal.Decimal(0)
solar_capacity_rate: Decimal = decimal.Decimal(0)
wind_capacity_rate: Decimal = decimal.Decimal(0)
charge_efficinecy: Decimal = decimal.Decimal(0)
discharge_efficinecy: Decimal = decimal.Decimal(0)
node_id: int = 0
provider: Optional[DataProvider] = None
zone_id: int = 0
lmp_file_id: int = 0
production_file_id: int = 0
load_file_id: int = 0
capacity_file_id: int = 0
plant_type: Optional[PowerPlantType] = None
solar_id: int = 0
wind_id: int = 0
ancillary_increment_factor: Decimal = decimal.Decimal(0)
energy_increment_factor: Decimal = decimal.Decimal(0)
capacity_increment_factor: Decimal = decimal.Decimal(0)
class BatteryProjectGroup(str, Enum):
UNDEFINED = 'Undefined'
STAND_ALONE = 'StandAlone'
FTM = 'FTM'
BTM = 'BTM'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CommonOptimizerMonthlyRequest(MonthlyRequestBase):
month: int = 0
group: Optional[BatteryScenarioKeyGroup] = None
key: Optional[BatteryScenarioKeyItem] = None
project_group: Optional[BatteryProjectGroup] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class MonthlyApiStatusResponse:
failed_count: int = 0
Python CommonOptimizerMonthlyRequest 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/monthly HTTP/1.1
Host: dev-optimization.power.dev
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<CommonOptimizerMonthlyRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.ServiceModel">
<AcCablingLosses xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</AcCablingLosses>
<AncillaryFileId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</AncillaryFileId>
<BaseMarket xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">Undefined</BaseMarket>
<CapacityTODs xmlns:d2p1="http://schemas.datacontract.org/2004/07/powerDev.Common.Models" i:nil="true" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models" />
<EnsureExlusive xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</EnsureExlusive>
<HVACLosses xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</HVACLosses>
<IncrementReferanceYear xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</IncrementReferanceYear>
<Iso xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">Undefined</Iso>
<LmpFileId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</LmpFileId>
<MaxAncillaryPriceCap xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</MaxAncillaryPriceCap>
<MaxChargingPriceCap xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</MaxChargingPriceCap>
<MaxDailyCycle xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</MaxDailyCycle>
<MaxDischargingPriceCap xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</MaxDischargingPriceCap>
<MinDailyProfitPerMw xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</MinDailyProfitPerMw>
<NodeAltId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</NodeAltId>
<NodeRefId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</NodeRefId>
<OptimizationQuality xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</OptimizationQuality>
<OtherLosses xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</OtherLosses>
<ParaciticLossesOperation xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</ParaciticLossesOperation>
<ParaciticLossesResting xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</ParaciticLossesResting>
<ProjectId xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">00000000-0000-0000-0000-000000000000</ProjectId>
<RepresentativeYear xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</RepresentativeYear>
<RevenueStackingMode xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">SolveWithoutAncillary</RevenueStackingMode>
<TransformatorLosses xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</TransformatorLosses>
<UseAncillary xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">Undefined</UseAncillary>
<UseCapacityTod xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">false</UseCapacityTod>
<UseEnergy xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">Undefined</UseEnergy>
<UseFutureData xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</UseFutureData>
<UseInternalSolver xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">false</UseInternalSolver>
<UseNonSpinning xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</UseNonSpinning>
<UseRegdown xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</UseRegdown>
<UseRegup xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</UseRegup>
<UseSpinning xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">0</UseSpinning>
<Group xmlns:d2p1="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">
<d2p1:IsServerless>false</d2p1:IsServerless>
<d2p1:KeyId>0</d2p1:KeyId>
<d2p1:NodeId>0</d2p1:NodeId>
<d2p1:PlantType>Undefined</d2p1:PlantType>
<d2p1:Provider>Undefined</d2p1:Provider>
<d2p1:SolarId>0</d2p1:SolarId>
<d2p1:WindId>0</d2p1:WindId>
<d2p1:Year>0</d2p1:Year>
<d2p1:ZoneId>0</d2p1:ZoneId>
</Group>
<Key xmlns:d2p1="http://schemas.datacontract.org/2004/07/powerDev.Common.Models">
<d2p1:AncillaryIncrementFactor>0</d2p1:AncillaryIncrementFactor>
<d2p1:BaseCapacityRate>0</d2p1:BaseCapacityRate>
<d2p1:BaseMarket>Undefined</d2p1:BaseMarket>
<d2p1:CapacityFileId>0</d2p1:CapacityFileId>
<d2p1:CapacityIncrementFactor>0</d2p1:CapacityIncrementFactor>
<d2p1:CapacityRate>0</d2p1:CapacityRate>
<d2p1:ChargeEfficinecy>0</d2p1:ChargeEfficinecy>
<d2p1:DischargeEfficinecy>0</d2p1:DischargeEfficinecy>
<d2p1:EnergyIncrementFactor>0</d2p1:EnergyIncrementFactor>
<d2p1:JobStatus>0</d2p1:JobStatus>
<d2p1:KeyId>0</d2p1:KeyId>
<d2p1:KeyType>Undefined</d2p1:KeyType>
<d2p1:LmpFileId>0</d2p1:LmpFileId>
<d2p1:LoadFileId>0</d2p1:LoadFileId>
<d2p1:MaxDate>0001-01-01T00:00:00</d2p1:MaxDate>
<d2p1:MinDate>0001-01-01T00:00:00</d2p1:MinDate>
<d2p1:NodeId>0</d2p1:NodeId>
<d2p1:PlantType>Undefined</d2p1:PlantType>
<d2p1:ProductionFileId>0</d2p1:ProductionFileId>
<d2p1:ProjectId>00000000-0000-0000-0000-000000000000</d2p1:ProjectId>
<d2p1:Provider>Undefined</d2p1:Provider>
<d2p1:RecordKey>String</d2p1:RecordKey>
<d2p1:SolarCapacityRate>0</d2p1:SolarCapacityRate>
<d2p1:SolarId>0</d2p1:SolarId>
<d2p1:SolarUsableCapacity>0</d2p1:SolarUsableCapacity>
<d2p1:SolarUsableCapacityFactor>0</d2p1:SolarUsableCapacityFactor>
<d2p1:Status>0</d2p1:Status>
<d2p1:UsableCapacity>0</d2p1:UsableCapacity>
<d2p1:UsableCapacityFactor>0</d2p1:UsableCapacityFactor>
<d2p1:WindCapacityRate>0</d2p1:WindCapacityRate>
<d2p1:WindId>0</d2p1:WindId>
<d2p1:Year>0</d2p1:Year>
<d2p1:YoyStatus>0</d2p1:YoyStatus>
<d2p1:ZoneId>0</d2p1:ZoneId>
</Key>
<Month>0</Month>
<ProjectGroup>Undefined</ProjectGroup>
</CommonOptimizerMonthlyRequest>
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <MonthlyApiStatusResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models"> <FailedCount>0</FailedCount> </MonthlyApiStatusResponse>