Forecasting
The Buzz about Solar Forecasting
Installed solar generation capacity is growing worldwide and this movement’s effect on load forecasts is significant. Energy service providers and electricity market operators are striving to understand how solar generation impacts their short- and long-term load forecasts. Itron is at the forefront of developing statistical modeling approaches to address this problem. I’ve written a white paper titled “Forecast Practitioner’s Handbook: Incorporating the Impact of Embedded Solar Generation into a Short-term Load-Forecasting Model” which describes a statistical modeling framework to incorporate the load impact of embedded solar generation.
When we talk about solar generation, we must differentiate utility solar installations, where the electricity generated feeds directly into the grid, from non-utility installations (also referred to as embedded solar generation, i.e., rooftop solar), where generation offsets on-site consumption. Both pose unique forecasting challenges. Utility solar installations impact the measurements of net load, which is defined as load minus utility solar generation. In this case, accurate forecasts of utility solar generation are required to forecast net load. Embedded generation directly impacts measurements of load since this generation occurs behind the meter. As a result, embedded generation impacts how we model load. The joint impact of utility and non-utility solar installations is increased volatility of net load. This, in turn, has added complexity to near-term forecasting of ramping regulation requirements.
There are a number of initiatives underway – the Department of Energy’s Sunshot Initiative being the most active - that focus on utility solar generation forecasting. The primary focus of these initiatives is developing tools that provide accurate utility solar generation forecasts. Further, these initiatives have been applied to the area of forecasting embedded solar generation. Clearly, these initiatives are delivering high value to the industry. Unfortunately, the impact of embedded solar generation on loads and consequently on load forecasting has received little to no attention. The purpose of Dr. Monforte’s white paper is to provide guidance on how to incorporate the impact of embedded solar generation in a load forecast.
As you think about forecasting the impact of embedded solar generation into your forecast, you need to make assumptions about:
(a) solar insolation, which is how much sunlight hits the panels on any given day of the year and time of day, (b) the average operating efficiency of the solar panel population, (c) average cloud cover, and if you are generating a long-term forecast, (d) the growth of the embedded solar generation in your service area.
The white paper breaks these pieces down into manageable tasks and begins with an example that illustrates the impact embedded solar generation can have on existing load forecasting models. This is followed by an overview of the language of solar generation and a presentation of practical steps to develop engineering-based explanatory variables that capture the load impact of embedded solar generation. The modeling constructs presented in the paper can be used in both short- and long-term load forecast models.
When we talk about solar generation, we must differentiate utility solar installations, where the electricity generated feeds directly into the grid, from non-utility installations (also referred to as embedded solar generation, i.e., rooftop solar), where generation offsets on-site consumption. Both pose unique forecasting challenges. Utility solar installations impact the measurements of net load, which is defined as load minus utility solar generation. In this case, accurate forecasts of utility solar generation are required to forecast net load. Embedded generation directly impacts measurements of load since this generation occurs behind the meter. As a result, embedded generation impacts how we model load. The joint impact of utility and non-utility solar installations is increased volatility of net load. This, in turn, has added complexity to near-term forecasting of ramping regulation requirements.
There are a number of initiatives underway – the Department of Energy’s Sunshot Initiative being the most active - that focus on utility solar generation forecasting. The primary focus of these initiatives is developing tools that provide accurate utility solar generation forecasts. Further, these initiatives have been applied to the area of forecasting embedded solar generation. Clearly, these initiatives are delivering high value to the industry. Unfortunately, the impact of embedded solar generation on loads and consequently on load forecasting has received little to no attention. The purpose of Dr. Monforte’s white paper is to provide guidance on how to incorporate the impact of embedded solar generation in a load forecast.
As you think about forecasting the impact of embedded solar generation into your forecast, you need to make assumptions about:
(a) solar insolation, which is how much sunlight hits the panels on any given day of the year and time of day, (b) the average operating efficiency of the solar panel population, (c) average cloud cover, and if you are generating a long-term forecast, (d) the growth of the embedded solar generation in your service area.
The white paper breaks these pieces down into manageable tasks and begins with an example that illustrates the impact embedded solar generation can have on existing load forecasting models. This is followed by an overview of the language of solar generation and a presentation of practical steps to develop engineering-based explanatory variables that capture the load impact of embedded solar generation. The modeling constructs presented in the paper can be used in both short- and long-term load forecast models.
Kesalahan terjadi ketika Memproses Template.
The following has evaluated to null or missing:
==> authorContent.contentFields [in template "44616#44647#114455" at line 9, column 17]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: contentFields = authorContent.content... [in template "44616#44647#114455" at line 9, column 1]
----
1<#assign
2 webContentData = jsonFactoryUtil.createJSONObject(author.getData())
3 classPK = webContentData.classPK
4/>
5
6<#assign
7authorContent = restClient.get("/headless-delivery/v1.0/structured-contents/" + classPK + "?fields=contentFields%2CfriendlyUrlPath%2CtaxonomyCategoryBriefs")
8contentFields = authorContent.contentFields
9categories=authorContent.taxonomyCategoryBriefs
10authorContentData = jsonFactoryUtil.createJSONObject(authorContent)
11friendlyURL = authorContentData.friendlyUrlPath
12authorCategoryId = "0"
13/>
14
15<#list contentFields as contentField >
16 <#assign
17 contentFieldData = jsonFactoryUtil.createJSONObject(contentField)
18 name = contentField.name
19 />
20 <#if name == 'authorImage'>
21 <#if (contentField.contentFieldValue.image)??>
22 <#assign authorImageURL = contentField.contentFieldValue.image.contentUrl />
23 </#if>
24 </#if>
25 <#if name == 'authorName'>
26 <#assign authorName = contentField.contentFieldValue.data />
27 <#list categories as category >
28 <#if authorName == category.taxonomyCategoryName>
29 <#assign authorCategoryId = category.taxonomyCategoryId />
30 </#if>
31 </#list>
32 </#if>
33 <#if name == 'authorDescription'>
34 <#assign authorDescription = contentField.contentFieldValue.data />
35
36 </#if>
37
38 <#if name == 'authorJobTitle'>
39 <#assign authorJobTitle = contentField.contentFieldValue.data />
40
41 </#if>
42
43</#list>
44
45<div class="blog-author-info">
46 <#if authorImageURL??>
47 <img class="blog-author-img" id="author-image" src="${authorImageURL}" alt="" />
48 </#if>
49 <#if authorName??>
50 <#if authorName != "">
51 <p class="blog-author-name">By <a id="author-detail-page" href="/w/${friendlyURL}?filter_category_552298=${authorCategoryId}"><span id="author-full-name">${authorName}</span></a></p>
52 <hr />
53 </#if>
54 </#if>
55 <#if authorJobTitle??>
56 <#if authorJobTitle != "">
57 <p class="blog-author-title" id="author-job-title" >${authorJobTitle}</p>
58 <hr />
59 </#if>
60 </#if>
61 <#if authorDescription??>
62 <#if authorDescription != "" && authorDescription != "null" >
63 <p class="blog-author-desc" id="author-job-desc">${authorDescription}</p>
64 <hr />
65 </#if>
66 </#if>
67</div>
The following has evaluated to null or missing: ==> authorContent.contentFields [in template "44616#44647#114455" at line 9, column 17] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: contentFields = authorContent.content... [in template "44616#44647#114455" at line 9, column 1] ----
1<#assign
2 webContentData = jsonFactoryUtil.createJSONObject(author.getData())
3 classPK = webContentData.classPK
4/>
5
6<#assign
7authorContent = restClient.get("/headless-delivery/v1.0/structured-contents/" + classPK + "?fields=contentFields%2CfriendlyUrlPath%2CtaxonomyCategoryBriefs")
8contentFields = authorContent.contentFields
9categories=authorContent.taxonomyCategoryBriefs
10authorContentData = jsonFactoryUtil.createJSONObject(authorContent)
11friendlyURL = authorContentData.friendlyUrlPath
12authorCategoryId = "0"
13/>
14
15<#list contentFields as contentField >
16 <#assign
17 contentFieldData = jsonFactoryUtil.createJSONObject(contentField)
18 name = contentField.name
19 />
20 <#if name == 'authorImage'>
21 <#if (contentField.contentFieldValue.image)??>
22 <#assign authorImageURL = contentField.contentFieldValue.image.contentUrl />
23 </#if>
24 </#if>
25 <#if name == 'authorName'>
26 <#assign authorName = contentField.contentFieldValue.data />
27 <#list categories as category >
28 <#if authorName == category.taxonomyCategoryName>
29 <#assign authorCategoryId = category.taxonomyCategoryId />
30 </#if>
31 </#list>
32 </#if>
33 <#if name == 'authorDescription'>
34 <#assign authorDescription = contentField.contentFieldValue.data />
35
36 </#if>
37
38 <#if name == 'authorJobTitle'>
39 <#assign authorJobTitle = contentField.contentFieldValue.data />
40
41 </#if>
42
43</#list>
44
45<div class="blog-author-info">
46 <#if authorImageURL??>
47 <img class="blog-author-img" id="author-image" src="${authorImageURL}" alt="" />
48 </#if>
49 <#if authorName??>
50 <#if authorName != "">
51 <p class="blog-author-name">By <a id="author-detail-page" href="/w/${friendlyURL}?filter_category_552298=${authorCategoryId}"><span id="author-full-name">${authorName}</span></a></p>
52 <hr />
53 </#if>
54 </#if>
55 <#if authorJobTitle??>
56 <#if authorJobTitle != "">
57 <p class="blog-author-title" id="author-job-title" >${authorJobTitle}</p>
58 <hr />
59 </#if>
60 </#if>
61 <#if authorDescription??>
62 <#if authorDescription != "" && authorDescription != "null" >
63 <p class="blog-author-desc" id="author-job-desc">${authorDescription}</p>
64 <hr />
65 </#if>
66 </#if>
67</div>