Earth Notes: On Website Technicals (2021-03)

Updated 2023-12-09.
Tech updates: DNS primary fun, fast site, build faster in the sun, new dump scheme, flaky router, bylines.
Finally moved the DNS primary to the new RPi server, hurrah! But the router is way too flaky...

2021-03-26: Bylines

Aiming to help readers trust EOU content (not for an ego boost!) I'm experimenting with adding a byline to most pages. But it's highly redundant, and in the critical rendering path (CRP), so I'd rather not do it. I may implement an explicit instead!

I'm leaving the byline out of non-desktop pages to save space and weight, and to minimise the CRP.

2021-03-25: Daily Router Reboot

The Vigor 2862ac router continues to prove fairly unreliable. 5G WiFi stops working periodically until disabled and re-enabled manually. The whole system spontaneously crashes and reboots periodically. Traffic seems to drop out for 30s upwards without showing any obvious diagnostic, though that could be an FTTC issue or upstream.

I had the system set to auto-reboot weekly. I have upped that to daily, at a quiet moment, hoping to forestall some of the weirdness.

It's an unsatisfactory state of affairs, as a difficult-to-avoid single point of failure (SPoF).

2021-03-23: New Dump Scheme

I'm preparing to test an alternative excess-energy dump mechanism, possibly up-stream of the Morningstar controller on its 'wild DC' side. The idea is to resistively dump some energy when the PV voltage is being allowed to rise significantly above the Vmpp (maximum power point voltage), maybe 29V, presumably because the battery is full or the controller is maxed out.

To that end I'm capturing some existing available stats over MODBUS, and various times of day and night:

  • 2021-03-22T21:52Z (night, long after sundown):
    % /usr/local/bin/ssmppt15l-modbus
    Time since boot (s): 696246
    Vb_f battery voltage slow (mV): 12818
    Adc_vl_f load voltage (mV): 12821
    Adc_ic_f battery charge current (mA): 0
    Adc_il_f load current (mA): 218
    Load power (mW): 2795
    Adc_va_f array voltage (mV): 22
    Sweep_Vmp (mV): 8030
    Sweep_Voc (mV): 10706
    Sweep_Pmax (mW): 3730
    Power_out (mW): 0
    kWhc (kWh*10): 5625
    charge_state: 3
    Ahc_daily (mAh): 0
    Ahl_daily (mAh): 0
    T_batt (C): 11
  • 2021-03-23T07:55Z (morning, battery beginning to charge):
    % /usr/local/bin/ssmppt15l-modbus
    Time since boot (s): 732485
    Vb_f battery voltage slow (mV): 12961
    Adc_vl_f load voltage (mV): 12974
    Adc_ic_f battery charge current (mA): 1136
    Adc_il_f load current (mA): 228
    Load power (mW): 2956
    Adc_va_f array voltage (mV): 28125
    Sweep_Vmp (mV): 28165
    Sweep_Voc (mV): 33423
    Sweep_Pmax (mW): 15114
    Power_out (mW): 14707
    kWhc (kWh*10): 5625
    charge_state: 5
    Ahc_daily (mAh): 500
    Ahl_daily (mAh): 100
    T_batt (C): 10
  • 2021-03-23T10:54Z (battery in absorption, already Adc_va_f above Vmpp): 20210323T1052Z battV
    % /usr/local/bin/ssmppt15l-modbus
    Time since boot (s): 743217
    Vb_f battery voltage slow (mV): 14460
    Adc_vl_f load voltage (mV): 14429
    Adc_ic_f battery charge current (mA): 488
    Adc_il_f load current (mA): 172
    Load power (mW): 2488
    Adc_va_f array voltage (mV): 32764
    Sweep_Vmp (mV): 27918
    Sweep_Voc (mV): 33423
    Sweep_Pmax (mW): 21033
    Power_out (mW): 7157
    kWhc (kWh*10): 5625
    charge_state: 6
    Ahc_daily (mAh): 4500
    Ahl_daily (mAh): 200
    T_batt (C): 10
  • 2021-03-23T13:51Z (battery FULL):
    % /usr/local/bin/ssmppt15l-modbus
    Time since boot (s): 753823
    Vb_f battery voltage slow (mV): 14158
    Adc_vl_f load voltage (mV): 14045
    Adc_ic_f battery charge current (mA): 931
    Adc_il_f load current (mA): 266
    Load power (mW): 3767
    Adc_va_f array voltage (mV): 34290
    Sweep_Vmp (mV): 27988
    Sweep_Voc (mV): 33524
    Sweep_Pmax (mW): 19765
    Power_out (mW): 13529
    kWhc (kWh*10): 5626
    charge_state: 7
    Ahc_daily (mAh): 6900
    Ahl_daily (mAh): 200
    T_batt (C): 10
  • 2021-03-23T14:35Z (new gadget plugged in to direct battery connection in kitchen, apparently drawing ~100W/8A, and seems to work):
    % /usr/local/bin/ssmppt15l-modbus
    Time since boot (s): 756473
    Vb_f battery voltage slow (mV): 14145
    Adc_vl_f load voltage (mV): 14237
    Adc_ic_f battery charge current (mA): 7004
    Adc_il_f load current (mA): 394
    Load power (mW): 5574
    Adc_va_f array voltage (mV): 32865
    Sweep_Vmp (mV): 25904
    Sweep_Voc (mV): 31690
    Sweep_Pmax (mW): 47999
    Power_out (mW): 99138
    kWhc (kWh*10): 5626
    charge_state: 7
    Ahc_daily (mAh): 7900
    Ahl_daily (mAh): 200
    T_batt (C): 10
chart covering above samples and induced extra draw from panel even with full battery
Battery chart covering period of samples above, and with large extra ~100W induced draw from panels — even with batteries full — by the new water heater.

The new water heater is rated to a maximum of 27V, so cannot be used directly on the panel side of the controller for the 550Wp panels. It's also maybe a bit too clever, needing to be manually enabled each time it's powered up. But this is fine, with a little care, for now.

2021-03-28: reconnecting the router to the switchable (on-/off- grid) 12V supply may make use of an additional 100Wh/d or more (not drawing it from the grid). That may double daily off-grid use at the moment from ~125Wh/d to ~250Wh/d.

20210424 battV cm
Lower overnight battery voltage from better use of available energy visible from night of 2021-03-28.
20210329T1900Z battV

2021-03-29: a green green tea cuppa started at 14:45 with water from filter jug at 18°C according to water heater, 70°C at 14:58, 94°C at 15:05. Stopped a minute or so later at 96°C. Made a generous mugful. Estimated energy of ~100W for ~20 minutes is ~33Wh.

Captured over 300Wh off-grid today, hurrah!

2021-03-19: Faster Incremental Builds When Sunny

(See previous work storage note and next.)

I have tweaked the makefile to allow a quicker incremental build (see work storage) with pages-incr, when the battery is HIGH or higher. That is, to be more aggressive in how many things to rebuild, and allowing each rebuild run to be longer.

Many days recently have had the battery reach FULL. So making better use of excess energy is currently worth some extra thought!

(The work storage magic mostly happens between conditionals in the crontab not to run things at all unless HIGH enough, and in the makefile's PWRxFLAG and friends to conditionally enable fewer or more dependencies dynamically.)

2021-03-17: "Love how fast your website is"

Unsolicited comment of the week:

Love how fast your website is, btw

And then...

For real, I had to check the network tab because I couldn't believe how fast it felt when I already knew, based on reading it, that you wouldn't be using a CDN and that it would be a server on a different continent, maybe a low spec solar powered one too

Yep, off-grid, running in my kitchen cupboard directly below me, on an FTTC line!

2021-03-14: DNS Primary Fun

Last month I got a reasonable off-site, off-continent DNS secondary running.

Today's task is to move the primary from the old RPi server to the new one.

The steps are something like:

  1. Clone the (SVN) repository for the old primary to the new machine (ie have the audit trail local to the new primary).
  2. Keep an off-server archive/recovery snapshot of the repository.
  3. Create the DNS working files area for the new primary on the new server.
  4. Do a test build of all the records and files, and eyeball.
  5. Ensure that the latest BIND9 is on the new primary.
  6. Hook up the new BIND9 server to use records from a make install from the DNS area, and do one.
  7. Add Ansible support for DNS primary files/status.
  8. Make sure that the right authoritative records are served by the new primary.
  9. Adjust the networking configuration of old and new RPis to serve one of the local address from the new server, leaving the other with the old primary, and ensure that it correctly serves requests, eg inbound from the Internet.
  10. (At this point the new primary is up and taking some of the load.)
  11. Bring up a secondary in place of the old primary, serving one of the local IP addresses, so that I get some extra redundancy for now.
  12. (At this point there is a shiny new primary on the new RPi, a secondary on the old RPi on the same network, and a secondary on another continent.)
  13. Decommission the old primary DNS area, repo, etc, so that it cannot accidentally be run as primary.
  14. Possibly choose on primary and secondary whether to use (both) as cacheing name servers for local queries, eg via /etc/resolv.conf.

(I also sorted out a few things such as 'notify' that I had not really paid attention to before.)

When all that is done I want to tidy up glue records and so on:

  1. Remove one of the nameservers to get back to a more reasonable three. If two name servers are enough for (say) CloudFlare, then four is surely overkill for me!
  2. Give the non-UK, non-ExNet name server the off-site IP.
  3. Fix DNS glue records at the registrars to match.