Gridstatus ==================== .. py:module:: gridstatus Subpackages ----------- .. toctree:: :titlesonly: :maxdepth: 3 tests/index.rst Submodules ---------- .. toctree:: :titlesonly: :maxdepth: 1 base/index.rst caiso/index.rst decorators/index.rst ercot/index.rst isone/index.rst miso/index.rst nyiso/index.rst pjm/index.rst spp/index.rst test/index.rst utils/index.rst version/index.rst Package Contents ---------------- Classes Summary ~~~~~~~~~~~~~~~ .. autoapisummary:: gridstatus.CAISO gridstatus.Ercot gridstatus.ISONE gridstatus.Markets gridstatus.MISO gridstatus.NYISO gridstatus.PJM gridstatus.SPP Functions ~~~~~~~~~ .. autoapisummary:: :nosignatures: gridstatus.get_interconnection_queues gridstatus.get_iso gridstatus.list_isos Contents ~~~~~~~~~~~~~~~~~~~ .. py:class:: CAISO Bases: :py:obj:`gridstatus.base.ISOBase` California Independent System Operator (CAISO) **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **default_timezone** - US/Pacific * - **interconnection_homepage** - https://rimspub.caiso.com/rimsui/logon.do * - **iso_id** - caiso * - **markets** - None * - **name** - California ISO * - **status_homepage** - https://www.caiso.com/TodaysOutlook/Pages/default.aspx * - **trading_hub_locations** - ['TH_NP15_GEN-APND', 'TH_SP15_GEN-APND', 'TH_ZP26_GEN-APND'] **Methods** .. autoapisummary:: :nosignatures: gridstatus.CAISO.get_fuel_mix gridstatus.CAISO.get_gas_prices gridstatus.CAISO.get_ghg_allowance gridstatus.CAISO.get_interconnection_queue gridstatus.CAISO.get_lmp gridstatus.CAISO.get_load gridstatus.CAISO.get_load_forecast gridstatus.CAISO.get_pnodes gridstatus.CAISO.get_stats gridstatus.CAISO.get_status gridstatus.CAISO.get_storage gridstatus.CAISO.get_supply .. py:method:: get_fuel_mix(date, end=None, verbose=False) Get fuel mix in 5 minute intervals for a provided day Arguments: date (datetime or str): "latest", "today", or an object that can be parsed as a datetime for the day to return data. start (datetime or str): start of date range to return. alias for `date` parameter. Only specify one of `date` or `start`. end (datetime or str): "today" or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates. verbose (bool): print verbose output. Defaults to False. Returns: pd.Dataframe: dataframe with columns: Time and columns for each fuel type .. py:method:: get_gas_prices(date, end=None, fuel_region_id='ALL', sleep=5, verbose=False) Return gas prices at a previous date Arguments: date: date to return data end: last date of range to return data. if None, returns only date. Defaults to None. fuel_region_id(str, or list): single fuel region id or list of fuel region ids to return data for. Defaults to ALL, which returns all fuel regions. .. py:method:: get_ghg_allowance(date, end=None, sleep=5, verbose=False) Return ghg allowance at a previous date Arguments: date: date to return data end: last date of range to return data. if None, returns only date. Defaults to None. .. py:method:: get_interconnection_queue(verbose=False) .. py:method:: get_lmp(date, market: str, locations: list = None, sleep: int = 5, end=None, verbose=False) Get day ahead LMP pricing starting at supplied date for a list of locations. Arguments: date: date to return data market: market to return from. supports: locations(list): list of locations to get data from. If no locations are provided, defaults to NP15, SP15, and ZP26, which are the trading hub locations. For a list of locations, call CAISO.get_pnodes() sleep(int): number of seconds to sleep before returning to avoid hitting rate limit in regular usage. Defaults to 5 seconds. Returns dataframe of pricing data .. py:method:: get_load(date, end=None, verbose=False) Return load at a previous date in 5 minute intervals .. py:method:: get_load_forecast(date, end=None, sleep=5, verbose=False) Returns load forecast for a previous date in 1 hour intervals Arguments: date(datetime, pd.Timestamp, or str): day to return. if string, format should be YYYYMMDD e.g 20200623 sleep(int): number of seconds to sleep before returning to avoid hitting rate limit in regular usage. Defaults to 5 seconds. .. py:method:: get_pnodes() .. py:method:: get_stats() .. py:method:: get_status(date='latest') -> str Get Current Status of the Grid. Only date="latest" is supported Known possible values: Normal, Restricted Maintenance Operations, Flex Alert .. py:method:: get_storage(date, verbose=False) Return storage charging or discharging for today in 5 minute intervals Negative means charging, positive means discharging Arguments: date: date to return data .. py:method:: get_supply(date, end=None, verbose=False) Get supply for a date or date range in hourly intervals .. py:class:: Ercot Bases: :py:obj:`gridstatus.base.ISOBase` Electric Reliability Council of Texas (ERCOT) **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **BASE** - https://www.ercot.com/api/1/services/read/dashboards * - **default_timezone** - US/Central * - **interconnection_homepage** - http://mis.ercot.com/misapp/GetReports.do?reportTypeId=15933 * - **iso_id** - ercot * - **name** - Electric Reliability Council of Texas * - **status_homepage** - https://www.ercot.com/gridmktinfo/dashboards/gridconditions **Methods** .. autoapisummary:: :nosignatures: gridstatus.Ercot.get_fuel_mix gridstatus.Ercot.get_interconnection_queue gridstatus.Ercot.get_load gridstatus.Ercot.get_load_forecast gridstatus.Ercot.get_rtm_spp gridstatus.Ercot.get_status gridstatus.Ercot.get_supply .. py:method:: get_fuel_mix(date) Get fuel mix in 5 minute intervals for a provided day Arguments: date (datetime or str): "latest", "today", or an object that can be parsed as a datetime for the day to return data. start (datetime or str): start of date range to return. alias for `date` parameter. Only specify one of `date` or `start`. end (datetime or str): "today" or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates. verbose (bool): print verbose output. Defaults to False. Returns: pd.Dataframe: dataframe with columns: Time and columns for each fuel type .. py:method:: get_interconnection_queue(verbose=False) Get interconnection queue for ERCOT Monthly historical data available here: http://mis.ercot.com/misapp/GetReports.do?reportTypeId=15933&reportTitle=GIS%20Report&showHTMLView=&mimicKey .. py:method:: get_load(date, verbose=False) .. py:method:: get_load_forecast(date, verbose=False) .. py:method:: get_rtm_spp(year) Get Historical RTM Settlement Point Prices (SPPs) for each of the Hubs and Load Zones Arguments: year (int): year to get data for Source: https://www.ercot.com/mp/data-products/data-product-details?id=NP6-785-ER .. py:method:: get_status(date, verbose=False) Returns status of grid .. py:method:: get_supply(date, verbose=False) Returns most recent data point for supply in MW Updates every 5 minutes .. py:function:: get_interconnection_queues() Get interconnection queue data for all ISOs .. py:function:: get_iso(iso_id) Get an ISO by its id .. py:class:: ISONE Bases: :py:obj:`gridstatus.base.ISOBase` ISO New England (ISONE) **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **default_timezone** - US/Eastern * - **hubs** - None * - **interconnection_homepage** - https://irtt.iso-ne.com/reports/external * - **interfaces** - None * - **iso_id** - isone * - **markets** - None * - **name** - ISO New England * - **status_homepage** - https://www.iso-ne.com/markets-operations/system-forecast-status/current-system-status * - **zones** - None **Methods** .. autoapisummary:: :nosignatures: gridstatus.ISONE.get_fuel_mix gridstatus.ISONE.get_interconnection_queue gridstatus.ISONE.get_lmp gridstatus.ISONE.get_load gridstatus.ISONE.get_load_forecast gridstatus.ISONE.get_status gridstatus.ISONE.get_supply .. py:method:: get_fuel_mix(date, end=None, verbose=False) Return fuel mix at a previous date Provided at frequent, but irregular intervals by ISONE .. py:method:: get_interconnection_queue(verbose=False) Get the interconnection queue. Contains active and withdrawm applications. More information: https://www.iso-ne.com/system-planning/interconnection-service/interconnection-request-queue/ Returns: pd.DataFrame -- interconnection queue .. py:method:: get_lmp(date, end=None, market: str = None, locations: list = None, include_id=False, verbose=False) Find Node ID mapping: https://www.iso-ne.com/markets-operations/settlements/pricing-node-tables/ .. py:method:: get_load(date) Return load at a previous date in 5 minute intervals .. py:method:: get_load_forecast(date, end=None, verbose=False) Return forecast at a previous date .. py:method:: get_status(date, verbose=False) Get latest status for ISO NE .. py:method:: get_supply(date, end=None, verbose=False) Get supply for a date or date range in hourly intervals .. py:function:: list_isos() List available ISOs .. py:class:: Markets Bases: :py:obj:`enum.Enum` Names of LMP Markets **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **DAY_AHEAD_HOURLY** - DAY_AHEAD_HOURLY * - **REAL_TIME_15_MIN** - REAL_TIME_15_MIN * - **REAL_TIME_5_MIN** - REAL_TIME_5_MIN * - **REAL_TIME_HOURLY** - REAL_TIME_HOURLY **Methods** .. autoapisummary:: :nosignatures: gridstatus.Markets.__contains__ .. py:method:: __contains__(item) .. py:class:: MISO Bases: :py:obj:`gridstatus.base.ISOBase` Midcontinent Independent System Operator (MISO) **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **BASE** - https://api.misoenergy.org/MISORTWDDataBroker/DataBrokerServices.asmx * - **default_timezone** - US/Central * - **hubs** - ['ILLINOIS.HUB', 'INDIANA.HUB', 'LOUISIANA.HUB', 'MICHIGAN.HUB', 'MINN.HUB', 'MS.HUB', 'TEXAS.HUB', 'ARKANSAS.HUB'] * - **interconnection_homepage** - https://www.misoenergy.org/planning/generator-interconnection/GI_Queue/ * - **iso_id** - miso * - **markets** - None * - **name** - Midcontinent ISO **Methods** .. autoapisummary:: :nosignatures: gridstatus.MISO.get_fuel_mix gridstatus.MISO.get_interconnection_queue gridstatus.MISO.get_lmp gridstatus.MISO.get_load gridstatus.MISO.get_load_forecast gridstatus.MISO.get_supply .. py:method:: get_fuel_mix(date, verbose=False) Get fuel mix in 5 minute intervals for a provided day Arguments: date (datetime or str): "latest", "today", or an object that can be parsed as a datetime for the day to return data. start (datetime or str): start of date range to return. alias for `date` parameter. Only specify one of `date` or `start`. end (datetime or str): "today" or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates. verbose (bool): print verbose output. Defaults to False. Returns: pd.Dataframe: dataframe with columns: Time and columns for each fuel type .. py:method:: get_interconnection_queue(verbose=False) Get the interconnection queue Returns: pd.DataFrame -- Interconnection queue .. py:method:: get_lmp(date, market: str, locations: list = None) Supported Markets: REAL_TIME_5_MIN (FiveMinLMP) DAY_AHEAD_HOURLY (DayAheadExPostLMP) .. py:method:: get_load(date, verbose=False) .. py:method:: get_load_forecast(date, verbose=False) .. py:method:: get_supply(date, end=None, verbose=False) Get supply for a date in hourly intervals .. py:class:: NYISO Bases: :py:obj:`gridstatus.base.ISOBase` New York Independent System Operator (NYISO) **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **default_timezone** - US/Eastern * - **interconnection_homepage** - https://www.nyiso.com/interconnections * - **iso_id** - nyiso * - **markets** - None * - **name** - New York ISO * - **status_homepage** - https://www.nyiso.com/system-conditions **Methods** .. autoapisummary:: :nosignatures: gridstatus.NYISO.get_fuel_mix gridstatus.NYISO.get_generators gridstatus.NYISO.get_interconnection_queue gridstatus.NYISO.get_lmp gridstatus.NYISO.get_load gridstatus.NYISO.get_load_forecast gridstatus.NYISO.get_loads gridstatus.NYISO.get_status gridstatus.NYISO.get_supply .. py:method:: get_fuel_mix(date, end=None, verbose=False) Get fuel mix in 5 minute intervals for a provided day Arguments: date (datetime or str): "latest", "today", or an object that can be parsed as a datetime for the day to return data. start (datetime or str): start of date range to return. alias for `date` parameter. Only specify one of `date` or `start`. end (datetime or str): "today" or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates. verbose (bool): print verbose output. Defaults to False. Returns: pd.Dataframe: dataframe with columns: Time and columns for each fuel type .. py:method:: get_generators(verbose=False) Get a list of generators in NYISO When possible return capacity and fuel type information Parameters: verbose (bool): print out requested url Returns: pd.DataFrame: a dataframe of generators and locations **Possible Columns** * Generator Name * PTID * Subzone * Zone * Latitude * Longitude * Owner, Operator, and / or Billing Organization * Station Unit * Town * County * State * In-Service Date * Name Plate Rating (V) MW * 2022 CRIS MW Summer * 2022 CRIS MW Winter * 2022 Capability MW Summer * 2022 Capability MW Winter * Is Dual Fuel * Unit Type * Fuel Type 1 * Fuel Type 2 * 2021 Net Energy GWh * Notes * Generator Type .. py:method:: get_interconnection_queue(verbose=False) Return NYISO interconnection queue Additional Non-NYISO queue info: https://www3.dps.ny.gov/W/PSCWeb.nsf/All/286D2C179E9A5A8385257FBF003F1F7E?OpenDocument Returns: pd.DataFrame: Interconnection queue containing, active, withdrawn, and completed project .. py:method:: get_lmp(date, end=None, market: str = None, locations: list = None, location_type: str = None) Supported Markets: REAL_TIME_5_MIN, DAY_AHEAD_HOURLY Supported Location Types: "zone", "generator" .. py:method:: get_load(date, end=None, verbose=False) Returns load at a previous date in 5 minute intervals .. py:method:: get_load_forecast(date, end=None, verbose=False) Get load forecast for a date in 1 hour intervals .. py:method:: get_loads(verbose=False) Get a list of loads in NYISO Parameters: verbose (bool): print out requested url Returns: pd.DataFrame: a dataframe of loads and locations .. py:method:: get_status(date, end=None, verbose=False) .. py:method:: get_supply(date, end=None, verbose=False) Get supply for a date or date range in hourly intervals .. py:class:: PJM Bases: :py:obj:`gridstatus.base.ISOBase` PJM **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **default_timezone** - US/Eastern * - **hub_node_ids** - ['51217', '116013751', '35010337', '34497151', '34497127', '34497125', '33092315', '33092313', '33092311', '4669664', '51288', '51287'] * - **interconnection_queue_homepage** - https://www.pjm.com/planning/services-requests/interconnection-queues.aspx * - **iso_id** - pjm * - **location_types** - ['ZONE', 'LOAD', 'GEN', 'AGGREGATE', 'INTERFACE', 'EXT', 'HUB', 'EHV', 'TIE', 'RESIDUAL_METERED_EDC'] * - **markets** - None * - **name** - PJM **Methods** .. autoapisummary:: :nosignatures: gridstatus.PJM.get_fuel_mix gridstatus.PJM.get_interconnection_queue gridstatus.PJM.get_lmp gridstatus.PJM.get_load gridstatus.PJM.get_load_forecast gridstatus.PJM.get_pnode_ids gridstatus.PJM.get_supply .. py:method:: get_fuel_mix(date, end=None, verbose=False) Get fuel mix for a date or date range in hourly intervals .. py:method:: get_interconnection_queue() .. py:method:: get_lmp(date, market: str, end=None, locations='hubs', location_type=None, verbose=False) Returns LMP at a previous date Notes: * If start date is prior to the PJM archive date, all data must be downloaded before location filtering can be performed due to limitations of PJM API. The archive date is 186 days (~6 months) before today for the 5 minute real time market and 731 days (~2 years) before today for the Hourly Real Time and Day Ahead Hourly markets. Node type filter can performed for Real Time Hourly and Day Ahead Hourly markets. * If location_type is provided, it is filtered after data is retrieved for Real Time 5 Minute market regardless of the date. This is due to PJM api limitations Args: date (str or datetime.date): date to get LMPs for end (str or datetime.date): end date to get LMPs for market (str): Supported Markets: REAL_TIME_5_MIN, REAL_TIME_HOURLY, DAY_AHEAD_HOURLY locations (list, optional): list of pnodeid to get LMPs for. Defaults to "hubs". Use get_pnode_ids() to get a list of possible pnode ids. If "all", will return data from all p nodes (warning there are over 10,000 unique pnodes, so expect millions or billions of rows!) location_type (str, optional): If specified, will only return data for nodes of this type. Defaults to None. Possible location types are: 'ZONE', 'LOAD', 'GEN', 'AGGREGATE', 'INTERFACE', 'EXT', 'HUB', 'EHV', 'TIE', 'RESIDUAL_METERED_EDC'. .. py:method:: get_load(date, end=None) Returns load at a previous date at 5 minute intervals Args: date (str or datetime.date): date to get load for. must be in last 30 days .. py:method:: get_load_forecast(date) Get forecast for today in hourly intervals. Updates every Every half hour on the quarter E.g. 1:15 and 1:45 .. py:method:: get_pnode_ids() .. py:method:: get_supply(date, end=None, verbose=False) Get supply for a date or date range in hourly intervals .. py:class:: SPP Bases: :py:obj:`gridstatus.base.ISOBase` Southwest Power Pool (SPP) **Attributes** .. list-table:: :widths: 15 85 :header-rows: 0 * - **default_timezone** - US/Central * - **interconnection_homepage** - https://www.spp.org/engineering/generator-interconnection/ * - **iso_id** - spp * - **name** - Southwest Power Pool * - **status_homepage** - https://www.spp.org/markets-operations/current-grid-conditions/ **Methods** .. autoapisummary:: :nosignatures: gridstatus.SPP.get_fuel_mix gridstatus.SPP.get_interconnection_queue gridstatus.SPP.get_load gridstatus.SPP.get_load_forecast gridstatus.SPP.get_status gridstatus.SPP.get_supply .. py:method:: get_fuel_mix(date, verbose=False) Get fuel mix in 5 minute intervals for a provided day Arguments: date (datetime or str): "latest", "today", or an object that can be parsed as a datetime for the day to return data. start (datetime or str): start of date range to return. alias for `date` parameter. Only specify one of `date` or `start`. end (datetime or str): "today" or an object that can be parsed as a datetime for the day to return data. Only used if requesting a range of dates. verbose (bool): print verbose output. Defaults to False. Returns: pd.Dataframe: dataframe with columns: Time and columns for each fuel type .. py:method:: get_interconnection_queue(verbose=False) Get interconnection queue Returns: pd.DataFrame: Interconnection queue .. py:method:: get_load(date, verbose=False) Returns load for last 24hrs in 5 minute intervals .. py:method:: get_load_forecast(date, forecast_type='MID_TERM', verbose=False) type (str): MID_TERM is hourly for next 7 days or SHORT_TERM is every five minutes for a few hours .. py:method:: get_status(date=None, verbose=False) .. py:method:: get_supply(date, end=None, verbose=False) Get supply for a date in hourly intervals