Earth Notes: On Website Technicals (2025-05)
Updated 2025-06-08.2025-05-30: Stop Log
This afternoon, alongside the frequency response log for the Eddi, I added a more general log of reasons for Eddi to have been put in STOP mode. This gets entries only when the Eddi would otherwise be diverting or boosting, so reflects energy spilled to grid that might not otherwise be. (This is getting added to archived logs too.)
Much of today's thrilling log, including initial manually-driven entries:
STOPPED 2025-05-30T18:04:42Z grid 7d red carbon intensity STOPPED 2025-05-30T18:04:45Z grid 7d red carbon intensity STOPPED 2025-05-30T18:05:01Z grid 7d red carbon intensity STOPPED 2025-05-30T18:06:02Z grid 7d red carbon intensity ... STOPPED 2025-05-30T18:32:02Z grid 7d red carbon intensity STOPPED 2025-05-30T18:33:02Z grid 7d red carbon intensity STOPPED 2025-05-30T18:34:01Z frequency too low at 49.85Hz STOPPED 2025-05-30T18:35:02Z frequency too low at 49.89Hz STOPPED 2025-05-30T18:36:01Z frequency too low at 49.89Hz
The next day I added a grid flow figure in W after the timestamp. Negative means spilling to grid.
2025-05-19: Grid Red Response?
In many ways the most interesting interactions between 16WW energy systems and the grid are dynamic, not just fixed 4pm to 7pm avoidance, useful though that is.
The system currently blocks diversion to the heat battery when grid frequency or voltage are low.
I can also block diversion when the grid intensity is 'red' (top quartile).
Ultimately I will use less electricity when I avoid DHW by immersion, since the heat pump will use fewer units to cover the same demand. Though I may import and thus pay a bit more. And the water might not be quite so hot...
This new code fragment does the work:
if [ -f _gridCarbonIntensityGB.7d.red.flag ]; then echo "STOPPED: grid 7d red carbon intensity" 1>&2 if [ "6" != "$STATUS" ]; then sh script/myenergi/eddiStop-netrc.sh 0; fi exit 1 fi
This once-per-minute script may be getting too heavy.
2025-05-20
This morning the grid-red rule held back the start of diversion to the heat battery by ~1.5h.

2025-05-18: Grid Voltage Response?
I briefly looked at blocking diversion (or allowing to heater 1) if grid voltage is low (or high).
The stats do not look that hopeful from a cursory examination of Eddi coarse 10-minute sample data, but I might need to look again at much finer grain.
% gzip -d < data/eddi/log/202504.log.gz | sed -n -e 's/^.*"vol":\([0-9]*\)[^0-9].*$/\1/p' | sort | head 2332 2334 2338 2340 2341 2343 2343 2344 2345 2347 % gzip -d < data/eddi/log/202504.log.gz | sed -n -e 's/^.*"vol":\([0-9]*\)[^0-9].*$/\1/p' | sort -r | head 2475 2473 2473 2473 2471 2471 2471 2470 2470 2469 % gzip -d < data/eddi/log/202504.log.gz | wc -l 4312 % gzip -d < data/eddi/log/202504.log.gz | egrep '"vol":25[0-9]' | wc -l 0 % gzip -d < data/eddi/log/202504.log.gz | egrep '"vol":22[0-9]' | wc -l 0 % gzip -d < data/eddi/log/202504.log.gz | egrep '"vol":23[0-4]' | wc -l 20 % gzip -d < data/eddi/log/202504.log.gz | egrep '"vol":23[0-5]' | wc -l 140 % gzip -d < data/eddi/log/202504.log.gz | egrep '"vol":24[4-9]' | wc -l 200 % gzip -d < data/eddi/log/202504.log.gz | egrep '"vol":24[5-9]' | wc -l 83
So maybe (below) 236V STOP diversion and (above) 243V allow diversion that might otherwise be STOPped?
I have inserted this extra 'secondary' task code segment for the lolz:
# Prevent diversion when grid voltage is low. VOLTS="$(echo "$RESPONSE"|sed -n -e 's/^.*"vol":\([0-9]*\)[^0-9].*$/\1/p')" if [ "$VOLTS" -lt 2360 ]; then echo "STOPPED: mains voltage $VOLTS low; diversion stopped" 1>&2 if [ "6" != "$STATUS" ]; then sh script/myenergi/eddiStop-netrc.sh 0; fi exit 1 fi
A quick look at frequency extremes and distribution in the same data:
% gzip -d < data/eddi/log/202504.log.gz | sed -n -e 's/^.*"frq":\([0-9.]*\)[^0-9].*$/\1/p' | sort -n | head 49.76 49.83 49.83 49.83 49.83 49.83 49.83 49.83 49.83 49.83 % gzip -d < data/eddi/log/202504.log.gz | sed -n -e 's/^.*"frq":\([0-9.]*\)[^0-9].*$/\1/p' | sort -rn | head 50.21 50.19 50.19 50.18 50.18 50.18 50.17 50.16 50.16 50.16 % gzip -d < data/eddi/log/202504.log.gz | sed -n -e 's/^.*"frq":\([0-9.]*\)[^0-9].*$/\1/p' | sort -n | uniq -c | more 1 49.76 19 49.83 24 49.84 19 49.85 4 49.86 13 49.87 36 49.88 281 49.89 130 49.9 96 49.91 50 49.92 68 49.93 134 49.94 313 49.95 394 49.96 163 49.97 79 49.98 47 49.99 82 50 151 50.01 555 50.02 219 50.03 138 50.04 86 50.05 118 50.06 207 50.07 417 50.08 147 50.09 90 50.1 47 50.11 39 50.12 59 50.13 42 50.14 32 50.15 5 50.16 1 50.17 3 50.18 2 50.19 1 50.21
2025-05-15: Invisible Efficiency Tweak
A few days ago I adjusted (mainly) the script that runs every minute to respond to grid frequency drops, and added (crowbarred in!) a couple of dozen lines of code to reduce our electricity consumption by ~15% (~1.5kWh/d) for half the year, and no one else in the house has noticed yet, nor should they! Also it should help keep the kitchen cooler in summer.
Also (3 for the price of 1!) I am now being nicer to the grid 4pm to 7pm, spilling any excess and not diverting it for DHW.
The injected section (slightly trimmed of fluff) is:
# SECONDARY TASK(S): STOPPING UNWANTED PV DIVERSION # Only tried when already spilling to grid, ie "grd":-NNN is present in status, #... if [ "4" != "$STATUS" ] && [ "" != "$(echo "$RESPONSE" | egrep '"grd":-')" ]; then # Prevent diversion to DHW cylinder when it is not the priority. if [ "" != "$(echo "$RESPONSE" | egrep '"hno":1')" ] && \ [ "" != "$(echo "$RESPONSE" | egrep '"hpri":2')" ]; then echo "STOPPED: diversion to DHW cylinder currently not permitted" 1>&2 if [ "6" != "$STATUS" ]; then sh script/myenergi/eddiStop-netrc.sh 0; fi exit 1 fi # Prevent diversion in grid peak hours. CONTROLPARAMSDIR=data/heatBattery/16WWDHW LZONE="Europe/London" LHOUR="$(TZ="$LZONE"; export TZ; date +%H)" EXPGRIDDEMAND=`awk -F, '$1=='$LHOUR'{l=$2;if(""==l){l="-"};print l}'\ <$CONTROLPARAMSDIR/storage-charge-pref-by-hour-local-time.csv` if [ "H" = "$EXPGRIDDEMAND" ]; then echo "STOPPED: grid peak demand time" 1>&2 if [ "6" != "$STATUS" ]; then sh script/myenergi/eddiStop-netrc.sh 0; fi exit 1 fi fi # Fall through to deal with primary task. # (And undo any unneeded STOP.)
2025-05-05: AdSense Ads off the Naughty Step
On I found Google apparently stuffing Gemini AI house ads into my pages without the usual mechanism for a visitor to reject them as unwanted. I had to dig around in the AdSense consoled to block ads mentioning Gemini in text. (They were all Google Workspace ads; as of today there are some Gemini-free.) Google does not even advertise under its own name. Given what an over-hyped carbon-spewing deceit this current AI wave is I was incensed enough to immediately yank essentially all Google ads from EOU. That meant first turning 'auto ads' off in the AdSense console, then adding new ad controls to my page generation scripts, then forcing rebuilds of all pages that were at that moment hosting ads to remove their embedded Google AdSense JavaScript.
As of today I have re-enabled most Google ads. It will take a week or so before the most popular pages get rebuilt to contain the Google JavaScript to allow AdSense ads for them again.
I started support for increasing ad density in winter (when more people are looking at my pages, and budgets may be higher), and conversely lightening the ad load a little at other times.
2025-05-10: AI yuck continues
Google is still spouting Gemini ads on my site that cannot be reported by me as an EOU site user as 'inappropriate' (or 'do not like'), and that cannot be found and blocked by me as an AdSense user under "Google LLC" or "Gemini", which seems pretty smelly to me. I also cannot block google.com
as an advertiser in AdSense. I have blocked workspace.google.com
and cloud.google.com
in AdSense under "Brand Safety" after taking a wild guess as to what those ads are booked under, but I should be able to get at that URL directly without guessing. (I did later find some more ways to block more Gemini ads once I have managed to locate them, but they keep coming.)
I am close to shutting down my entire AndSense account and blocking all Google ad domains in my browser; this is unnecessary and very very shifty behaviour by Google. It is not like Google does not know how to facilitate search, including in the blocking controls for AdSense.
2025-05-15: first significant revenue this month
5p 4p today, on top of 1p smeared out over the whole of the month so far.
(GSC's initial estimate of 5p was over-enthusiastic, the next day showed 4p...)
I shall avoid spending it all in one shop.
Most eligible pages were rebuilt with AdSense in them ~4 days ago.