Power.Dev Optimization Services

<back to all web services

CommonOptimizerYearlyRequest

The following routes are available for this service:
POST/optimizer/yearly
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 CommonOptimizerYearlyRequest(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 YearlyApiStatusResponse:
    failed_count: int = 0
    message: Optional[str] = None

Python CommonOptimizerYearlyRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /optimizer/yearly HTTP/1.1 
Host: dev-optimization.power.dev 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<CommonOptimizerYearlyRequest 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>
</CommonOptimizerYearlyRequest>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<YearlyApiStatusResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/powerDev.Optimization.Models">
  <FailedCount>0</FailedCount>
  <Message>String</Message>
</YearlyApiStatusResponse>