Earth Notes: Saving Electricity and Gas (2020)

Updated 2024-06-24 19:58 GMT.
By Damon Hart-Davis.
Meter readings at home.
electricity meter 2019 09
2020 PV Output
Meter readings and analysis of our electricity and gas carbon footprint at home in 2020.

2020

2020 data (kWh: e used 2398, e gen -4067, g 2899).

Off-grid 62.6kWh captured by primary (MPPT) solar controller.

See the daily PV generation logs for 2020 as .csv and .png chart.

2020 kWh and HDD

See gas use kWh and heating degree days (HDD) by time for 2020 as .csv and .png chart.

2020 kWh vs HDD regression

See gas kWh vs heating degree days (HDD) regression for 2020 as .png chart.

See 2012 kWh/HDD estimates plus recent years' estimates from daily Loop data and HDD, with the linear regression fitting in gnuplot itself(!):

Estimates of heating efficiency by year, 2007 to 2012 and 2016 to 2020
YearBaseline (kWh/d)Slope ((kWh/d)/(HDD12/d))year kWhyear HDD12
2007p13.844.09
20089.324.1488831061
20096.023.1162011068
20103.193.1057841481
20114.082.873936820
2012p3.052.35
...
20163.92.43851990
20173.22.53423897
20183.32.63806989
20192.72.33157913
2020p4.81.7(Note: Jan--Jun data only, lockdown from March, record sunny spring!)

Basic heating efficiency (kWh/HDD) has remained fairly stable at ~2.4kW/HDD since the Loop gas meter went in in 2016. Baseline gas consumption, only DHW since May 2013, is hovering around 3kWh/d, according to this computation. Both figures are reasonably true to life, I think, though gas consumption kWh/d data is very noisy for example.

2020 is an odd year starting with record spring sunshine and warmth, then the coronavirus lockdown from March pushing up occupancy and thus likely use of gas (eg for DHW) and electricity (eg for baking, TV and Xbox).

2020-10-02: Price Freeze

As of October, Ecotricity emailed to say that prices are frozen for a year. Each of gas and electricity have a standing charge of a little over £100 per year. The unit (kWh) price is 20.79p for electricity and 4.8825p for gas, a ratio of 4.3:1. Using a heat-pump with a (S)CoP at least this would keep OpEx for space heating and DHW no higher than gas. For space heat this is plausible with a lowish rad flow temperature (eg 35°C), and a ground-source heat pump. For DHW that CoP at (say) 55°C would be hard, but eased if half the DHW was in fact provided by solar PV diversion, ie outside winter months. Our projected annual bills are ~£240 for gas (~3MWh) and ~£270 for electricity (~800kWh). Note that the standing charge is nearly half of each.

2020-10-20: Loop Gas Monitoring Stopped

The Loop gas monitoring stopped on October 20th, when some works were being done under the kitchen sink. It did not seem to be easily revivable.

Shortly afterwards Loop announced that the entire service was being discontinued. Annoyingly this means that the heating season is missed.

I attempted to restart discussions with Ecotricity to get a smart meter fitted, so long as I could get decent granularity gas readings, but that has not got anywhere.

202009 screenshot Loop month view
202010 screenshot Loop month view
Loop displays for the months of September and October, showing the ceasing of gas readings on 2020-10-20.

2020-12-29: Central Heating

Enphase AC Battery Enlighten 20201229 morning central heating load 20201229 am 16WWvpc
Central heating electricity demand (for fans and pump) is clearly visible in the morning between about 06:45 (when it comes on) to ~09:30, when Radbots stop calling for heat. (Some time ago measured to be ~140W while running.) PV generation is only starting towards the end of this period, so cannot carry much of the load.

The central heating was only switched on 1st December, whereas early November is more typical. HDD 12 for Novembers up to 2020, showing this November to be the warmest for 5 years, but not exceptional:

2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
 134  128   75  179   66  133  139   79   63  154  128  101  141   87

We have subsequently been keeping most of the house on a nominal 17°C (2 on the Radbot dial) which should have reduced demand, though this December is looking to be on the cold side:

2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
 192  233  236  328  154  190  152  183   38  160  187  128  153  186

And here are December gas usage numbers (kWh/HDD),. 16WW was recently partly vacant in 2020 (though I stayed), 2019 and 2017.

2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
52.5 39   34   33   18   22   13   19    9.2 21   20   20   16   17

2020-12-31: Load Profile

For my final statscast for the year, I looked at 16WW's load profile, ie when we demand electricity from the grid, or spill it back.

I looked at a variety of combinations of weekday and weekend and all week, winter and summer, and the difference that PV and a battery makes.

Without PV and battery, the shape of our consumption is probably fairly normal, though we are lowish (efficient) users. But things are different for actual grid imports and exports after PV and battery magic!

Weekday and weekend graphs and data for 202006.
bucketed bucketed
CSV CSV
Weekday and weekend graphs and data for 202012-01to21.
bucketed bucketed
CSV CSV
2020 Fuel Consumption Data
2020ElectricityGas
MonthConsumed kWh (/d)Generated -kWh (/d)Consumed kWh (/d) PeriodNotes
2020-01 230 (7.4/d) -63 (-2.0/d) 487 (16/d) 20191231T18:17Z to 20200131T18:15Z (31d) Meter readings: electricity generation 63.4kWh, export 13.1kWh, import 180.3kWh (thus net consumption (I+G-E) 230.6kWh, self consumption ((N-I)/N) 22%); gas ~43.7m^3 (so 487kWh @ 11.1kWh/m^3).
Unusually high electricity consumption possibly in part from extra use of dehumidifier in kids' bedrooms (which could really do with their own MHRV).
HDD12=142 vs 218 last January. (Warmest Jan since 2008.)
2020-02 197 (6.8/d) -127 (-4.4/d) 434 (15/d) 20200131T18:15Z to 20200229T18:15Z (29d) Meter readings: electricity generation 129.9kWh, export 49.9kWh, import 120.1kWh (thus net consumption (I+G-E) 197.1kWh, self consumption ((N-I)/N) 39%); gas ~39.1m^3 (so 434kWh @ 11.1kWh/m^3).
High electricity consumption possibly in part from extra use of dehumidifier in kids' bedrooms again.
HDD12=128 vs 132 last February. (Warmest Feb since 2008 barring 2014.)
2020-03 213 (6.9/d) -337 (-11/d) 359 (12/d) 20200229T18:15Z to 20200331T17:50Z (31d) Meter readings: electricity generation 337.3kWh, export 209.1kWh, import 85.2kWh (thus net consumption (I+G-E) 213.4kWh, self consumption ((N-I)/N) 60%); gas ~32.3m^3 (so 358.52kWh @ 11.1kWh/m^3).
Decent sunshine and thus solar gain on some days has reduced space-heat demand.
A lockdown for coronavirus started formally on the 23rd, meaning that all four of us are at home all the time other than Jean's lunchtime gig at school, and the odd walk. (Note that we had partial lockdown for a little before that as I was self-isolating and then the family had to stay in for a few days too, as rules changed.)
Being at home all day means possibly slightly more able to manually match electrical loads (eg the dishwasher) to PV generation, thus increasing self-consumption a tad. (53% last March to 60% this.)
PV generation is up a bit from March last year (9.1kWh/d to 11kWh/d).
If the heat battery project had been done, I'd basically expect gas demand to stop until September or later.
The Loop electricity monitor seems to have died on the 22nd.
HDD12=142 vs 89 last March.
2020-04 218 (7.3/d) -536 (-18/d) 171 (5.7/d) 20200331T17:50Z to 20200430T15:22Z (30d) Meter readings: electricity generation 536.0kWh, export 365.3kWh, import 49.9kWh (thus net consumption (I+G-E) 217.6kWh, self consumption ((N-I)/N) 77%); gas ~15.4m^3 (so 170.61kWh @ 11.1kWh/m^3).
Turned central heating off 2020-04-01T09:43Z; house occasionally a bit chilly!
Gross consumption of electricity is still on the high side, possibly from everyone being at home, and some extra baking, use of TV and games console and other electronics, etc.
Self-consumption is up from 69% to 77%; better manual load-timing opportunities and record sunshine/generation.
Record PV generation of 18kWh/d: cf last April's typical 15kWh/d. 17kWh/d has been seen twice in April. (April 2020 provisionally sunniest on record for UK.)
Gas is unusually high too, which could just be from extra DHW use.
Loop sent a replacement electricity monitor, back in service on 24th. Thanks!
HDD12=61 vs 89 last April (yes, same as March!).
2020-05 217 (7.0/d) -743 (-24/d) 163 (5.2/d) 20200430T15:22Z to 20200531T17:25Z (31d) Meter readings: electricity generation 743.2kWh, export 557.1kWh, import 30.7kWh (thus net consumption (I+G-E) 216.8kWh, self consumption ((N-I)/N) 86%); gas ~14.7m^3 (so 163.39kWh @ 11.1kWh/m^3).
Gross consumption of electricity is still on the high side, probably from everyone being at home under lockdown as for April.
Self-consumption is up from 75% to 86%; better manual load-timing opportunities and record sunshine/generation.
Record PV generation of 24kWh/d: cf last May's typical 18kWh/d in line with the original PVGIS prediction. (Historic kWh/d in May up to 2019, max 21: ... 17, 17, 19, 19, 17, 21, 18.)
Given that the import supply meter indicates very nearly 1kWh/d, the Enphase may be consistently somewhat overestimating avoided imports. (For example, the import meter shows 31kWh this month, Enphase 16kWh.) This is complicated by the fact that the import and export meters themselves may consume ~1W each or up to 50Wh/d, though I have put the Enphase supply clamp upstream of them to try to cover their consumption too (whether or not ethically I should have to!) so as to minimise all grid flows.
This month PV generation passed 33MWh on the first 3/4s of the system, and 10MWh on the remaining 1/4.
HDD12=31 vs 39 last May.
2020-06 196 (6.5/d) -576 (-19/d) 145 (4.8/d) 20200531T17:25Z to 20200630T16:51Z (30d) Meter readings: electricity generation 576.2kWh, export 416.4kWh, import 36.0kWh (thus net consumption (I+G-E) 195.8kWh, self consumption ((N-I)/N) 82%); gas ~13.0m^3 (so 144.74kWh @ 11.1kWh/m^3).
Gross consumption of electricity and gas are still on the high side, probably from everyone being at home under lockdown as for April and May.
Our 'stuck' sunshine weather pattern is gone, so no PV records.
HDD12=4 vs 4 last June.
2020-07 189 (6.1/d) -568 (-18/d) 125 (4.0/d) 20200630T16:51Z to 20200731T17:42Z (31d) Meter readings: electricity generation 568.3kWh, export 417.9kWh, import 39.0kWh (thus net consumption (I+G-E) 189.4kWh, self consumption ((N-I)/N) 79%); gas ~11.3m^3 (so 125.43kWh @ 11.1kWh/m^3).
HDD12=2 vs 0 last July.
2020-08 151 (4.9/d) -464 (-15/d) 76 (2.5/d) 20200731T17:42Z to 20200831T17:19Z (31d) Meter readings: electricity generation 464.4kWh, export 343.3kWh, import 28.5kWh (thus net consumption (I+G-E) 150.6kWh, self consumption ((N-I)/N) 81%); gas ~6.9m^3 (so 76.48kWh @ 11.1kWh/m^3).
Only one week away from home on holiday this August, so dips in daily consumption less dramatic than usual.
Residual electricity consumption when away same as last year. (No imports at all while away (<0.1kWh) according to the supply meter.) ~1.8kWh/d of which ~1.1 fridge/freezer, remainder networking (~10W?), security lighting and monitoring/control equipment such as Enphase.
HDD12=1 vs 0 last August.
2020-09 157 (5.2/d) -376 (-13/d) 119 (4.0/d) 20200831T17:19Z to 20200930T17:16Z (30d) Meter readings: electricity generation 376.3kWh, export 288.1kWh, import 68.7kWh (thus net consumption (I+G-E) 156.9kWh, self consumption ((N-I)/N) 56%); gas ~10.7m^3 (so 119.21kWh @ 11.1kWh/m^3).
This shoulder month would probably benefit from an expanded Enphase battery, increasing self-consumption markedly.
HDD12=12 vs 6 last September.
2020-10 192 (6.2/d) -151 (-4.9/d) 137 (4.4/d) 20200930T17:16Z to 20201031T18:15Z (31d) Meter readings: electricity generation 151.0kWh, export 69.5kWh, import 110.9kWh (thus net consumption (I+G-E) 192.4kWh, self consumption ((N-I)/N) 42%); gas ~12.36m^3 (so 137.20kWh @ 11.1kWh/m^3).
Daily consumption likely slightly up due to kids at home for half-term break. (The heating is not on yet.)
The Loop gas monitoring system that I have been used is being switched off in November. Readings from the 19th (~9am) onwards were partly/fully lost with the sensor having been knocked during works under the kitchen sink (eg to replace our mains water main valve). At the Loop reading was behind the meter by 2.27m^3 (~25kWh).
When the rest of the family was away, electricity self-consumption was over 80%. Eg, on the 25th, consumption was 2.6kWh (gen 4.5, imp 0.3, exp 2.0) and 'energy independence' was 89%.
On the 26th at sunrise 06:45, it was 07:20 before first (3/4) generation meter light went off indicating net generation, with ~30W generation showing on SunnyBeam. Enphase-reported generation at 07:50 to be 72W. (20201201T08:03Z Sunnybeam showed 17W generation, while Enphase said exactly 0.)
HDD12=42 vs 42 last October.
2020-11 210 (7.0/d) -76 (-2.5/d) 162 (5.4/d) 20201031T18:15Z to 20201130T17:55Z (30d) Meter readings: electricity generation 75.6kWh, export 17.9kWh, import 152.0kWh (thus net consumption (I+G-E) 209.7kWh, self consumption ((N-I)/N) 28%); gas ~14.6m^3 (so 162.06kWh @ 11.1kWh/m^3).
The heating is not on yet. This has been the warmest November for 5 years. For example on 2020-11-21, with 12°C outside and not windy, it seems to be easy to maintain 4°C to 5°C warmer inside from incidental gains such as from people and appliances.
HDD12=87 vs 141 last November.
2020-12 195 (6.2/d) -48 (-1.6/d) 523 (17/d) 20201130T17:55Z to 20201231T18:13Z (31d) Meter readings: electricity generation 48.3kWh, export 8.8kWh, import 155.4kWh (thus net consumption (I+G-E) 194.9kWh, self consumption ((N-I)/N) 20%); gas ~14.6m^3 (so 433.57kWh @ 11.1kWh/m^3).
Heating on for start of the 1st. Nominal clock/schedule on 06:30 to 15:59 and 19:00 to 23:45. Radbot has to call for heat also for the boiler to actually fire up.
When we use the dehumidifier in the children's bedrooms (or the kitchen) that does provide some visible heating gain. A little heat demand is effectively shifted from gas to the portable heat-pump. When my daughter suddenly demanded heat for her chilly room at about 4:30pm, having not been in for hours and with it ~1°C outside, I actually put the dehumidifier on for her as heating for a while...
So that we'd still be warm for seeing in the New Year, I boosted every Radbot at least once from about 9pm. That added just over 1m^3 (~12kWh) of gas demand between my official end of year datum at 18:13 and bedtime at 00:28. (Exactly 2kWh of electricity was used and imported in that time too.)
HDD12=186 vs 153 last December.
2020 total (Jan--Dec) 2398 (6.55/d) -4067 (-11.1/d) 2899 (7.92/d) 20191231T18:17Z to 20201231T18:13Z (366d) HDD of 838 (vs 913 last year) quite low, eg against 2008 to 2018 mean of 997. Gas consumption lowest since 2015 (then 2862kWh).
Coronavirus lockdown for much of this year (basically from March) seems to have pushed up gross electricity consumption N=(Imp+Gen-Exp) by ~20%. Record PV generation (4067kWh, previous record 3988kWh in 2011). Imports are only just over 1000kWh. Self consumption calculated as (N-Imp)/N was 56%.
kgCO2 857kg (2.3/d) -1658kg (-4.5/d) 600kg (1.6/d) ~-0.17tCO2 [though see below] (~-0.45kgCO2/d) gas/electricity emissions total for 4 people, based on fixed 0.43kgCO2/kWh for electricity (netted) and 0.19kgCO2/kWh for gas, ie slightly carbon negative.
We did not fly this year and still do not own a car.
With data from the Enphase metering and the FUELINST log I compute a potentially more accurate CO2 electricity balance, noting the relatively low carbon grid intensity when exporting summer PV and high intensity when importing in winter. (There is still the argument that any balancing at the moment is likely done by a gas turbine in practice.) See below for the computations — the estimated figure is now a slightly positive 0.17tCO2 overall for gas and electricity.

2020: ToD Carbon Calculation

Calculating carbon emissions by time-of-day (ToD) involves the FUELINST data from Elexon / National Grid, and the locally sampled 16WW grid import/export flows using the Enphase system.

The actual resolution of the FUELINST data is probably the lowest available with some components delayed up to 30 minutes, though computed values will typically be stored at 5 or 10 minute intervals. The Enphase samples are usually every 5 minutes. Either can be stored more or less often, and duplicates are possible. Data is in datetime order and all timestamps are UTC.

The archived carbon-intensity data looks like:

% xz -d < data/FUELINST/log/2020.log.xz
# Retail GB electricity carbon intensity as computed by earth.org.uk.
# Time gCO2e/kWh
2020-01-01T00:05Z 210
2020-01-01T00:15Z 209
2020-01-01T00:25Z 210
2020-01-01T00:35Z 211
2020-01-01T00:50Z 213
2020-01-01T00:55Z 212
...

That second column is the effective grid carbon intensity for a domestic user, including transmission and distribution losses (currently 7%).

For the Enphase data the key value is the (number that follows) consumption.net.wNow, ie net grid flow.

% xz -d < data/16WWHiRes/Enphase/2020.log.xz
20200101T00:04Z consumption.readingTime 1577837027 consumption.net.wNow 142.092 consumption.total.wNow 138.065 production.wNow -4.027 storage.percentFull 0 storage.wNow -5 storage.readingTime 1577836931
20200101T00:09Z consumption.readingTime 1577837327 consumption.net.wNow 154.046 consumption.total.wNow 151.054 production.wNow -2.991 storage.percentFull 0 storage.wNow -5 storage.readingTime 1577837232
20200101T00:14Z consumption.readingTime 1577837626 consumption.net.wNow 152.356 consumption.total.wNow 149.169 production.wNow -3.186 storage.percentFull 0 storage.wNow -5 storage.readingTime 1577837532
20200101T00:19Z consumption.readingTime 1577837927 consumption.net.wNow 92.774 consumption.total.wNow 89.818 production.wNow -2.956 storage.percentFull 0 storage.wNow -5 storage.readingTime 1577837834
20200101T00:24Z consumption.readingTime 1577838228 consumption.net.wNow 70.484 consumption.total.wNow 67.792 production.wNow -2.692 storage.percentFull 0 storage.wNow -5 storage.readingTime 1577838132
...

(Using these actual relatively-fine-grained grid flows, ie net imports and exports, makes self-consumption disappear, eg at night with no imports when entirely running from battery. But the exports that then don't happen from PV generation become 'lost' negative emissions.)

The simplest approach, assuming no particular sampling bias, is to take the (arithmetic) mean of the pertinent values in each hour. Duplicates by time may possibly be discarded before the mean is taken.

The 1h-bucketed FUELINST values out/yearly/FUELINST-1h-2020.csv.gz are created by script/analytic/FUELINST-bucket-1h.sh. The format (with bucket hour start, in ISO 8601 format) is:

2020-01-01T00:00Z,210.833
2020-01-01T01:00Z,209.167
2020-01-01T02:00Z,206
2020-01-01T03:00Z,200.4
2020-01-01T04:00Z,182
...
2020-12-31T19:00Z,282.667
2020-12-31T20:00Z,269.5
2020-12-31T21:00Z,247.167
2020-12-31T22:00Z,236.4
2020-12-31T23:00Z,223.833

An arithmetic mean of those values indicates an annual mean of 216.365gCO2/kWh.

A sort reveals the range of intensities:

2020-12-18T03:00Z,74.3333
2020-11-12T03:00Z,75
...
2020-09-15T13:00Z,363.5
2020-08-27T11:00Z,364.5

The 1h-bucketed Enphase values out/yearly/Enphase-1h-2020.csv.gz are created by script/analytic/Enphase-bucket-1h.sh. The format (with bucket hour start, in ISO 8601 format) is:

2020-01-01T00:00Z,106.954
2020-01-01T01:00Z,72.0906
2020-01-01T02:00Z,77.9957
2020-01-01T03:00Z,81.7087
2020-01-01T04:00Z,71.7366

Note that neither generated file has entries for every one of the 8784 hours in the 2020 leap year, because machines and networks are down sometimes:

% gzip -d < out/yearly/Enphase-1h-2020.csv.gz | wc -l
8775
% gzip -d < out/yearly/FUELINST-1h-2020.csv.gz | wc -l
8745

The intersection of the two data sources is 8732 hours, ie 8732/8784 = 99.4% of all hours. It is probably reasonable to compute the carbon for the hours that are there, and scale up for the missing hours. Again. assuming no particular bias in the 'missing' hours. Note however, that some problems such as networking issues, may be left unresolved longer at night, when there is lower consumption, so a simple scale up may be on the conservative side, overestimating emissions.

% awk -F, '{print $1}' < Enphase-1h-2020.csv > E.dates
% awk -F, '{print $1}' < FUELINST-1h-2020.csv > F.dates
% wc -l E.dates F.dates
    8775 E.dates
    8745 F.dates
% comm -12 E.dates F.dates | wc -l
    8732

There are 56 hours that are in one data set but not the other:

% comm -3 ~/tmp/E.dates ~/tmp/F.dates | wc -l
    56
% comm -3 ~/tmp/E.dates ~/tmp/F.dates
2020-01-30T12:00Z
2020-02-13T11:00Z
2020-03-03T01:00Z
2020-03-03T02:00Z
2020-03-03T03:00Z
2020-03-05T20:00Z
2020-03-06T07:00Z
2020-03-06T08:00Z
        2020-03-24T13:00Z
        2020-03-24T14:00Z
2020-03-25T06:00Z
2020-04-30T10:00Z
2020-04-30T11:00Z
        2020-05-20T16:00Z
2020-05-28T18:00Z
2020-05-28T19:00Z
2020-05-28T20:00Z
2020-05-28T21:00Z
2020-05-28T22:00Z
2020-05-28T23:00Z
2020-05-29T00:00Z
2020-05-29T01:00Z
2020-07-13T23:00Z
2020-07-14T00:00Z
2020-07-14T01:00Z
2020-07-14T02:00Z
        2020-07-29T18:00Z
2020-08-06T10:00Z
        2020-08-18T17:00Z
2020-09-30T18:00Z
2020-09-30T19:00Z
2020-09-30T20:00Z
2020-09-30T21:00Z
2020-09-30T22:00Z
2020-09-30T23:00Z
2020-10-01T00:00Z
2020-10-15T23:00Z
        2020-10-21T15:00Z
2020-10-26T03:00Z
        2020-10-26T14:00Z
        2020-10-26T15:00Z
2020-10-26T19:00Z
2020-10-26T23:00Z
        2020-10-29T13:00Z
        2020-10-29T14:00Z
        2020-10-30T08:00Z
2020-11-10T08:00Z
2020-11-19T11:00Z
2020-11-19T12:00Z
2020-11-19T13:00Z
2020-11-27T16:00Z
2020-11-27T17:00Z
2020-12-03T19:00Z
        2020-12-14T20:00Z
        2020-12-14T22:00Z
2020-12-18T16:00Z

To join the hours that are present in both (confirming the same number of matched hours in the first instance):

% join -t, -j1 Enphase-1h-2020.csv FUELINST-1h-2020.csv | wc -l
    8732
% join -t, -j1 Enphase-1h-2020.csv FUELINST-1h-2020.csv | head
2020-01-01T00:00Z,106.954,210.833
2020-01-01T01:00Z,72.0906,209.167
2020-01-01T02:00Z,77.9957,206
2020-01-01T03:00Z,81.7087,200.4
2020-01-01T04:00Z,71.7366,182
2020-01-01T05:00Z,67.4731,180.333
2020-01-01T06:00Z,195.651,197.167
2020-01-01T07:00Z,162.984,205
2020-01-01T08:00Z,458.225,218.667
2020-01-01T09:00Z,293.469,240

(The join result is captured: out/yearly/Enphase-join-FUELINST-1h-2020.csv.gz.)

To compute the balance in kgCO2 for the year, between import and export (noting a scale down by 1000x1000 to allow for inputs being in Wh and g/kWh):

% join -t, -j1 ~/tmp/Enphase-1h-2020.csv ~/tmp/FUELINST-1h-2020.csv | \
      awk -F, '{sum += $2*$3} END {print sum/1000000}'
-374.478

Scaling up for the missing hours gives -377kgCO2.

This is less favourable (as expected) than the flat-rate 0.43kgCO2/kWh estimate of -717kgCO2 balance for electricity generation and consumption.

Given the 550kgCO2 emissions from burning gas, that gives a new overall balance for the house for electricity and gas of 173kgCO2, ie no longer negative.

A crude by-hour graph of imports and emissions (which can go negative) can be prepared with:

gnuplot -e "title='2020 CO2 emissions kg/h'" -e "infilename='Enphase-join-FUELINST-1h-2020.csv'" graphing/storesim/CO2-profile-1.txt
2020 hourly CO2 emissions
2020 grid imports and CO2 emissions per hour (-ve if exporting), ranging from a peak of about 0.5kgCO2/h in winter down to -1kgCO2/h in summer.
~2921 words.