Reading PREPA’s operational feed…
Drag across the graph to zoom in; double-click to zoom out.
Capacity margin = available capacity minus generation (every 5 minutes). Spinning and operating reserve are PREPA’s figures at each reading. Dashed: projected margin from the forecast. The dotted line marks the largest unit online; a margin below it means losing that unit could not be covered.
Where the island’s power comes from at the latest reading, and the high-voltage lines that carry it from the plants in the south to the load centers in the north. Dots sit at each plant’s approximate location, sized by output. Select a dot or a table row to see that plant’s units; sort by any column and narrow the list with the filters.
References: line numbers and lengths from the Energy Bureau filing NEPR-MI-2024-0005 (230 kV line numbers, end points, lengths), the 2023 PREPA Fiscal Plan (the three 230 kV loops) and LUMA’s June 2025 report (San Juan-area 115 kV lines). Transmission map traced from BNamericas, “Puerto Rico opens 3,600MW to private operators” (Aug 11, 2020).
No plants or units match these filters.
How much each plant or fuel supplied. The total follows PREPA’s 5-minute generation record, so the chart has no gaps; the split between plants and fuels comes from the nearest readings of every unit (ticks under the chart) and is estimated in between. 30 days and All show energy per day (GWh). Drag to zoom.
Generating units that are out of service now, ranked by what each produced in the latest filed month, and every unit that tripped or returned to service in the last 24 hours.
A baseload unit (steam or San Juan combined cycle) that ran last month and is down now is the one to act on. Peakers start and stop every day.
| Alert | Plant | Unit | Net MWh last month | MW now |
|---|
Every unit that went out of service and every unit that came back, with when it went out, when it returned, how long it was out and the megawatts involved. Times are when the change was first seen (readings every 15 minutes).
No unit events in this period.
| Unit | Went out | Came back | Duration | MW | Status |
|---|
The full record is also written as text, one file per day, in logs/outages/.
From every reading. Red area: Genera units not generating (left scale). Green line: spinning reserve in MW (right scale). Gaps mean no reading at that time.
The grid runs at 60 Hz. The further frequency strays and the longer it stays away, the closer generators and inverters get to tripping off. Each 5-minute reading from PREPA is placed in a level below; any reading outside Normal starts an excursion, logged with its duration and whether it outlasted the time allowed at that level.
The scale stretches the area near 60 Hz so small swings stay visible while the IEEE limits remain on the chart. Dashed lines are IEEE 1547-2018 trip settings.
Readings are 5 minutes apart, so short dips between readings can be missed and durations are estimates. “Possibly exceeded” means a single reading was outside the range and the event could have lasted longer than allowed.
Every period outside the Normal range since monitoring began, newest first.
No excursions recorded yet.
| Started | Direction | Worst level | Extreme | Duration | Allowed | Time limit |
|---|
Each unit as a gauge from 0 to its rated capacity, with its status. The pale band marks the lowest and highest output seen while it was running since monitoring began. Where no rating is published, the scale uses the highest output observed (marked “obs.”).
Share of generation as published by the operator.
MW × each unit’s reported cost. Totals use every unit with a reported cost; 24-hour figures add up each check over the last day.
How the cost of generation changes hour by hour, and how much of it each fuel accounts for. Use the last 7 or 30 days to see the typical daily pattern, or today to see how today compares.
Which plants make up the cost at each hour of the day. Pick one plant to see its hourly cost and its cost per MWh.
Live analysis from every saved reading: which plants are cheapest, which ones carry the load, what a cheapest-first dispatch would change, and how much of the demand is constant.
Each block is a plant: its width is how much it can supply, its height what each MWh costs. Renewables producing now are taken first; the other plants follow from cheapest to most expensive. Where the demand line crosses the curve is the plant that should set the cost. Plants to the right of the line that are running anyway are “out of merit”.
The share of generation coming from baseload plants (run all day), peaking plants (started for the highest demand, usually costly diesel) and renewables. A growing peaking share means more expensive power.
If the same demand were met using the cheapest running plants first, which plants would produce more and which less. Long bars mean the current dispatch is far from cheapest-first.
Every 5-minute reading sorted from highest to lowest. The lower block is base load, needed all the time; the band above it comes and goes during the day and must be met by plants that can follow load.
Written automatically on GitHub after every check, as a text log for each day. Demand comes from PREPA’s total at each check, generation and frequency from the 5-minute readings, fuel shares and cost from each unit’s output and reported cost.
One row per day. Download all days (CSV).
| Day | Max demand | Min demand | Max gen. | Min gen. | Majority fuel | Total cost | $/kWh | Freq. max | Freq. min | Freq. avg | Outages | Text log |
|---|
Every 15 minutes a GitHub Action requests both PREPA feeds, whether or not anyone has this page open. Uptime and the check map use those checks; reads made by your browser appear in the table as “This browser”.
One square per hour. Teal: answered. Red: failed. Grey: no check that hour.
Seconds for PREPA’s server to deliver each feed.
| Checked | By | Feed | Result | Response | Size | PREPA timestamp | Data age |
|---|