Pjm
========================

.. py:module:: gridstatus.pjm


Module Contents
---------------

Classes Summary
~~~~~~~~~~~~~~~

.. autoapisummary::

   gridstatus.pjm.PJM





Contents
~~~~~~~~~~~~~~~~~~~
.. 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_homepage**
        - https://www.pjm.com/planning/service-requests/services-request-status
      * - **iso_id**
        - pjm
      * - **location_types**
        - ['ZONE', 'LOAD', 'GEN', 'AGGREGATE', 'INTERFACE', 'EXT', 'HUB', 'EHV', 'TIE', 'RESIDUAL_METERED_EDC']
      * - **markets**
        - None
      * - **name**
        - PJM
      * - **price_node_ids**
        - ['5021703', '5021704', '5021723', '5021724', '93354015', '93354017', '93354019', '34887765', '34887767', '34887769', '34887771', '34887773', '34887775', '34887777', '2156111970', '34887779', '34887781', '34887783', '34887787', '34887789', '34887791', '34887793', '74008711', '34887819', '34887821', '34887823', '2156112027', '34887845', '1439658151', '34887847', '34887849', '74008743', '34887851', '34887853', '1123180720', '34887857', '1123180722', '34887859', '1123180723', '34887861', '1123180721', '34887871', '34887873', '34887887', '34887889', '34887891', '34887893', '34887895', '1207075032', '34887897', '34887899', '34887901', '34887911', '34887913', '34887915', '34887917', '34887923', '1097732340', '34887925', '34887927', '34887929', '34887935', '34887937', '34887939', '34887941', '34887949', '34887951', '34887953', '34887955', '1552845076', '34887957', '1552845077', '34887959', '1552845078', '34887961', '34887963', '34887965', '34887967', '34887969', '34887971', '1305131304', '34887977', '1305131306', '34887993', '34887997', '34887999', '34888001', '119118151', '2156114262', '1379266905', '1379266906', '1097732449', '1292915048', '1132294512', '1132294513', '1132294514', '1132294515', '1552845186', '106856851', '2156112284', '1305131444', '119118263', '119118265', '119118267', '119118269', '119118271', '106856905', '2156110343', '40243747', '71856675', '40243749', '71856677', '40243751', '40243753', '40243755', '40243757', '40243759', '40243761', '40243763', '40243765', '40243767', '40243769', '40243771', '40243773', '40243775', '40243777', '40243779', '1248991825', '1248991826', '1248991827', '40243801', '40243803', '40243805', '40243807', '135389793', '135389819', '40243837', '1666116222', '1666116223', '1666116224', '1666116225', '40243839', '1356163765', '38367965', '38367967', '38367969', '1218915048', '1218915049', '1218915050', '1218915051', '1388614399', '2156110624', '32418611', '32418613', '32418615', '32418617', '1388614460', '1084390238', '1218915186', '1218915187', '1369011076', '1369011077', '1369011078', '1268571042', '98370477', '1084390354', '93140', '93141', '93142', '93143', '93144', '93145', '98370523', '98370525', '98370527', '98370529', '98370531', '98370533', '98370535', '1552843818', '57967665', '1552843913', '1552843915', '1552843916', '1356162213', '1356162214', '50401', '48934161', '48934163', '48934165', '48934167', '48934169', '36181299', '50488', '50489', '50490', '36181325', '2156113262', '50542', '50543', '50557', '50558', '2156113284', '50578', '50579', '50581', '50621', '50622', '87901631', '50628', '50629', '50654', '50655', '50659', '50660', '50661', '50662', '2156111333', '1048047', '1048049', '1048050', '1048051', '1048052', '21601782', '21601783', '21601784', '21601785', '21601786', '50695', '50696', '50697', '50698', '50699', '2041990671', '123901459', '123901461', '123901463', '123901465', '123901467', '50715', '50716', '50717', '50727', '50728', '50729', '50730', '2156113457', '2156113469', '50764', '2156113488', '50769', '50770', '50771', '50777', '50778', '50779', '123901537', '123901539', '123901543', '31020649', '123901545', '31020651', '31020653', '50809', '50810', '50811', '50812', '50813', '50814', '50817', '50818', '1165479564', '2156109456', '50887', '50888', '50893', '50894', '50911', '50915', '32417525', '32417527', '2156111608', '1218914041', '1218914042', '1218914043', '32417545', '32417547', '1183231801', '32417599', '32417601', '32417603', '32417605', '51019', '51020', '51021', '1348263767', '32417625', '32417627', '32417629', '32417631', '32417633', '32417635', '1379268471', '1379268472', '1379268473', '1379268474', '1379268475', '1379268476', '63381383', '63381385', '2156111770', '2156109760', '2156109763', '2156109765', '2156109768', '2156109772', '2156109777', '5021665', '5021666', '5021667', '2156111847', '93353961', '93353963', '93353965']
      * - **zone_node_ids**
        - ['1', '3', '51291', '51292', '51293', '51295', '51296', '51297', '51298', '51299', '51300', '51301', '7633629', '8394954', '8445784', '33092371', '34508503', '34964545', '37737283', '116013753', '124076095', '970242670', '1709725933']


   **Methods**

   .. autoapisummary::
      :nosignatures:

      gridstatus.pjm.PJM.get_fuel_mix
      gridstatus.pjm.PJM.get_interconnection_queue
      gridstatus.pjm.PJM.get_lmp
      gridstatus.pjm.PJM.get_load
      gridstatus.pjm.PJM.get_load_forecast
      gridstatus.pjm.PJM.get_pnode_ids
      gridstatus.pjm.PJM.get_raw_interconnection_queue

   .. 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(verbose=False)


   .. py:method:: get_lmp(date, market: str, end=None, locations='hubs', location_type=None, verbose=False)

      Returns LMP at a previous date

      .. rubric:: 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 be
      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

      *  Return `Location Id`, `Location Name`, `Location Short Name`.

      :param date: date to get LMPs for
      :type date: datetime.date, str
      :param end: end date to get LMPs for
      :type end: datetime.date, str
      :param market: Supported Markets:
                     REAL_TIME_5_MIN, REAL_TIME_HOURLY, DAY_AHEAD_HOURLY
      :type market: str
      :param locations: 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!)
      :type locations: list, optional
      :param location_type: 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'.
      :type location_type: str, optional


   .. py:method:: get_load(date, end=None, verbose=False)

      Returns load at a previous date at 5 minute intervals

      :param date: date to get load for. must be in last 30 days
      :type date: datetime.date, str

      :returns: Load data time series. Columns: Time, Load, and all areas

                * Load columns represent PJM-wide load
                * Returns data for the following areas: AE, AEP, APS, ATSI,
                BC, COMED, DAYTON, DEOK, DOM, DPL, DUQ, EKPC, JC,
                ME, PE, PEP, PJM MID ATLANTIC REGION, PJM RTO,
                PJM SOUTHERN REGION, PJM WESTERN REGION, PL, PN, PS, RECO
      :rtype: pd.DataFrame


   .. py:method:: get_load_forecast(date, verbose=False)

      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_raw_interconnection_queue(verbose=False) -> BinaryIO



