Forecasting
Residential Lighting Efficiency Really Does Make a Difference!
It’s hard to believe that it’s been 4 years since we installed the solar photovoltaic (PV) panels on our house. As a solar customer in the San Diego Gas & Electric (SDG&E) service territory, we don’t get monthly bills, just one true-up bill on the anniversary date of your start date. We are on a November to November true-up period and just received our fourth true up bill and I was a bit surprised.
I wrote a PV blog after our first year of the solar journey, but here’s a quick overview. We live in San Diego in a 1,500 square foot house and my son likes to keep our house at freezer-like conditions. In 2015, our annual electric bill was about $2,700 (9,000 kWh). Summer bills were in the $400-500 range (800-900 kWh) and always hit tier 2 rates. We ended up with a 7.25 kW system with 25 panels and were able to get into the NEM Successor Tariff (Schedule NEM-ST, NEM-ST or NEM 2.0) where non-bypassable charges are assessed. There was a nominal interconnection fee and we were grandfathered into the tiered rates for 5 years after our system went live. We have 1 more year before we need to move to the TOU rates, which will probably prompt another set of blogs.
In 2017, our first solar year, we owed $48 and we added an electric vehicle (EV) to the mix in December. In 2018, we owed $258 which included a $500 SDG&E EV climate credit (EVCC) and I started using a free EV charging station by the office in October. In 2019, I was doing the majority of my EV charging at work and receiving an $850 EVCC from SDG&E, and we ended up with an $800 credit overall. The latest bill had no EVCC and was only $101.26.
I’m not complaining, but I was surprised it wasn’t higher. I have been working from home since March, so there is additional electric load in general; my son added a larger TV to his room that seems to be on all of the time, in addition to his computers; almost all of my EV charging has been at home, albeit less driving in general due to the pandemic; and, it was a really hot summer in San Diego so the air conditioner ran way more than normal, hitting tier 2 rates a few times.
Working with Itron’s Energy Forecasting Group (EFG) residential sector and end-use data for so long made me a little curious about our usage. What had changed? During our remodeling project toward the end of last year, we installed a bunch of new LED canned lights in our main room, replacing a beam of incandescent lighting that is now hardly used. The adjacent kitchen lights were almost always turned on.
This is our beam of incandescent lighting, and you can see one of the new LED lights on the ceiling.
When you add up all those cute little incandescents, it turns out that the beam uses 663 watts. Adding in the old kitchen lights and using a conservative estimate of 6 hours of use per day, translates into roughly 1,600 kWh/year. Holy cow! They looked so cool when we put them up and I knew they would suck a bunch of energy, but I didn’t do the math. That’s more than 4 new refrigerators! Our new set up has 20 new LED canned lights which are rarely all on, but if they were, that would only be 438 kWh/year. Our tier 1 rate is 28 cents per kWh, so that is a minimum of $310 savings for the year.
It is good timing on this analysis because one of our next home projects is to replace our original single-paned windows. The residential geek in me was planning to replace them with overpriced, super high energy-efficient low U-Factor ones with whatever gas inside. I already have a few quotes but I am now reconsidering the efficiency level needed because just switching to more energy efficient lighting has brought us pretty close to break even with the EV. The ENERGY STAR program was founded in 1991, so ANY new window will be an improvement in efficiency from the current windows that were installed in 1986.
Si è verificato un errore nell'elaborarazione del modello.
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>