Reliable Electricity. Competitive Prices. Clean-Energy Transition.

Our Mission

'; html += ''; if (point.name === 'Renewables') { html += ''; html += ''; html += '' + point.name + ''; html += ' '; html += ' '; html += ''; html += ''; } else { html += '' + point.name + ''; } html += ''; }); html += ''; $('#' + inst.legendId).empty(); $('#' + inst.legendId).html(html); } catch(e) { console.error('Legend creation failed: ' + e); } }; this.calculateNetImports = function() { var inst = this; var total = 0; try { $('#data-table-externalflow').find('tr').each(function(i, o) { var tds = $(this).find('td'); var tmp = parseFloat($(tds[0]).html().replace(',', '')); total += tmp; }); } catch(e) { console.error('update failed: ' + e); } return total; }; this.init(); } /** Renewable Fuel Mix Widget */ function RenewableFuelMixWidget(renderTo, dataTableId, legendId) { this.renderTo = renderTo; this.dataTableId = dataTableId; this.legendId = legendId; this.colorMapping = { 'Coal': '#3E4B50', 'Hydro': '#1795D2', 'Natural Gas': '#6dcff6', 'Nuclear': '#F68920', 'Oil': '#62777F', 'Renewables': '#6FA943', 'Landfill Gas': '#40D397', 'Refuse': '#845536', 'Wind': '#8555A1', 'Wood': '#BF622E', 'Methane': '#b16621', 'Other': '#4c8014', 'Steam':'#800080', 'Solar': '#FBB92F' }; this.init = function() { try { var inst = this; var datax = inst.readData(inst.dataTableId); inst.createLegend(datax); var options = { chart: { type: 'pie', renderTo: inst.renderTo, spacingTop: 0, marginTop: 0 }, title: { text:'RENEWABLES', verticalAlign:'middle', floating: true, y: 10, style: { color: '#ddd', fontSize: '10px' }, }, series: [{ id: 'fuelmix', name: 'Fuels', data: [], states: { hover: { halo: { size: 0 } } }, }], plotOptions: { series: { animation: false, states: { inactive: { opacity: 1 } }, }, }, }; inst.highchart = new Highcharts.Chart(options); inst.highchart.get('fuelmix').setData(datax, true); } catch(e) { console.error('init failed: ' + e); } }; this.readData = function(dataTableId) { var inst = this; var data = []; try { $('#' + dataTableId).find('tr').each(function(i, o) { var tds = $(this).find('td'); var obj = {}; obj.name = $(tds[0]).html(); obj.y = parseFloat($(tds[2]).html()); obj.color = inst.colorMapping[obj.name] || Highcharts.theme.colors[i + 6]; var obj1 = { name: $(tds[1]).html() }; var addToDataCoordinates = true; $.each(data, function(i, t) { if (t.name === obj.name) { t.y += obj.y; addToDataCoordinates = false; } }); if (addToDataCoordinates && obj1.name !== obj.name) { data.push(obj); } }); var total = $(data).sum('y'); $(data).each(function(i,o){ o.y = (o.y/total)*100; }); data.sort(function(a, b) { var A = a.name.toUpperCase(), B = b.name.toUpperCase(); return (A B) ? +1 : 0); }); } catch(e) { console.error('update failed: ' + e); } return data; }; this.createLegend = function(data) { var inst = this; try { /** Sort data on value desc */ data.sort(function(a,b) { var A = a.y, B = b.y; return (A > B) ? -1 : ((A '; $.each(data, function(i, point) { /* show " 0) && (point.y '; html += '' + percent + '%'; html += ''; html += '
'; html += '    '; html += '
'; html += ''; html += '' + point.name + ''; html += ''; }); html += ''; $('#' + inst.legendId).empty(); $('#' + inst.legendId).html(html); } catch(e) { console.error('Legend creation failed: ' + e); } }; this.init(); } /** System Load Widget */ function SystemLoadWidget(renderTo, dataTableId, legendId) { this.renderTo = renderTo; this.dataTableId = dataTableId; this.legendId = legendId; this.init = function() { try { var inst = this; var actualdata = inst.readData(inst.dataTableId[0]); var forecastdata = inst.readData(inst.dataTableId[1]); $(forecastdata).each(function(i, o) { o.x += 1800000; }); var plotVal = 1 * inst.updateLegend(actualdata, forecastdata); var plotLabel = Highcharts.dateFormat('%H:%M', plotVal); var options = { chart: { type: 'line', renderTo: inst.renderTo }, plotOptions: { series: { states: { inactive: { opacity: 1 } }, animation: false, marker: { states: { hover: { enabled: false } } }, }, }, series: [ { id: 'actual', name: 'Actual', color: '#ffff00', data: actualdata }, { id: 'forecast', name: 'Forecast', color: '#1795d2', data: forecastdata }, ], global: { useUTC: false }, xAxis: { title: {text: null}, type: 'datetime', showFirstLabel: true, tickPixelInterval: 50, tickLength: 5, tickColor: '#465C67', tickWidth: 1, gridLineWidth: 0, lineWidth: 1, lineColor: '#465C67', minPadding: 0, labels: { style: { color: '#ddd', fontSize: '13px' }, y: 20 }, dateTimeLabelFormats: { hour: '%H', day: '%H' }, plotLines: [{ id:'plot-line', value: plotVal, color: '#7c8d91', dashStyle: 'Dash', width: 1, label: { text: plotLabel, y: 0, style: { color: '#ddd', fontSize: '13px' }, }, }], }, yAxis: [{ title: { text: null }, showFirstLabel: true, tickPixelInterval: 50, tickLength: 5, tickColor: '#465C67', tickWidth: 1, gridLineWidth: 0, lineWidth: 1, lineColor: '#465C67', startOnTick: false, minPadding: 0.01, maxPadding: 0.08, labels: { style: { color: '#ddd', fontSize: '13px' } }, }], }; inst.highchart = new Highcharts.Chart(options); inst.highchart.get('actual').setData(actualdata, false); inst.highchart.get('forecast').setData(forecastdata, true); } catch(e) { console.error('init failed: ' + e); } }; this.readData = function(dataTableId) { var inst = this; var data = []; try { $('#' + dataTableId).find('tr').each(function(i, o) { var tds = $(this).find('td'); var obj = { x: ISOUtil.Date.jsonDateToMs($(tds[0]).html()), y: parseInt($(tds[1]).html()), }; data.push(obj); }); } catch(e) { console.error('update failed: ' + e); } return data; }; this.updateLegend = function(actualdata, forecastdata) { var inst = this; var plotVal = 0; try { if (!actualdata || !actualdata.length) { $('#system-demand-actual-legend').html('Actual Data Missing'); } else { $('#system-demand-actual-legend').html('Actual (MW)'); } if (!forecastdata || !forecastdata.length) { $('#system-demand-forecast-legend').html('Forecast Data Missing'); } else { $('#system-demand-forecast-legend').html('Forecasted (MW)'); } if (actualdata.length > 0) { var act = actualdata[actualdata.length-1]; plotVal = act.x; var fct = forecastdata[0]; var fctflag = 1; $.each(forecastdata, function(i, obj) { if (act.x > (obj.x - 1800000) && act.x

Price Map

Real Time

Day Ahead

Real Time

Day Ahead

Phase 2 Highgate NYISO AC NYISO NNC NYISO CSC NB

Resource Mix

Fuels

 

Renewables

 

System Demand

    
Forecasted (MW)
    
Actual (MW)

System Status

 Normal

Today’s
Snapshot

AS OF 07/17/2025 12:00 PM

28,146

Available
Capacity (MW)

24,200

Forecasted Peak
Demand (MW)

1,018

Surplus
Capacity (MW)

23,880

Yesterday's Peak
Demand (MW)