Welcome to ned Productions

by . Last updated .

Welcome to ned Productions (non-commercial personal website, for commercial company see ned Productions Limited). Please choose an item you are interested in on the left hand side, or continue down for Niall’s virtual diary.

Niall’s virtual diary:

Started all the way back in 1998 when there was no word ‘blog’ yet, hence ‘virtual diary’.

Original content has undergone multiple conversions Microsoft FrontPage => Microsoft Expression Web, legacy HTML tag soup => XHTML, XHTML => Markdown, and with a ‘various codepages’ => UTF-8 conversion for good measure. Some content, especially the older stuff, may not have entirely survived intact, especially in terms of broken links or images.

Latest entries: Feed icon

Word count: 1446. Estimated reading time: 7 minutes.
Summary:
The input is a combined diary entry and a highly technical guide. A dark theme implementation is described, where pure CSS variables are utilised. Automatic switching based on the operating system’s theme can be achieved using @media queries. Furthermore, a manual override is demonstrated via checkbox hacks, although significant code duplication must be accepted for the feature to be fully operational.
Thursday 18 June 2026:
07:40.
Word count: 1446. Estimated reading time: 7 minutes.
Summary:
The input is a combined diary entry and a highly technical guide. A dark theme implementation is described, where pure CSS variables are utilised. Automatic switching based on the operating system’s theme can be achieved using @media queries. Furthermore, a manual override is demonstrated via checkbox hacks, although significant code duplication must be accepted for the feature to be fully operational.
I am typing to you now from the cabin on my site where popups installation continues apace. We should be about three quarters done by end of today. It is currently raining outside but will clear later – the lads soldier on as if you didn’t you’d never get any construction in Ireland. But I have the luxury of being able to wait inside until it stops raining later today, so I’m writing this diary entry instead.

This post introduces the most radical style change to this website since the Hugo conversion back in March 2019: a dark theme which is automatically chosen by your web browser if your system’s theme is dark. If your system is configured to switch between light and dark themes based on time of day, so will this website. If you wish to override the current light-dark theme chosen, there is now a floating theme override button in the top right of the page. It works identically on mobile and desktop, and requires no Javascript: it is pure CSS only.

Major browsers gained this ability around 2020 and it works like this: Firstly, we replace all the colours in all the CSS with CSS variables, which have been available in major browsers from 2017 onwards:

/* light */
:root {
    color-scheme: light dark;

    --c-body-bg: #fff;
    --c-body-fg: #000;
    --c-navbar-bg: #fff;
    --c-navbar-divider-bg: #000;
    --c-hover-bg: rgba(0,0,0,0.1);
    --c-hover-fg: #FF0000;
    --c-hover-glow: #aa0000;
    --c-tooltip-bg: beige;
    --c-tooltip-fg: #000;
    --c-tooltip-border: chocolate;
    --c-tooltip-arrow: #000;
    --c-pre-bg: rgba(0,0,0,0.05);
    --c-quote-bg: rgba(0,0,0,0.05);
    --c-shadow: #aaa;
    --c-shadow-heavy: #000;
    --c-affiliate-border: #000;
    --c-post-details-border: #000;
    --c-link: #00e;
    --c-link-visited: rgba(85, 26, 139, 1.0);
    --c-toggle-bg: rgba(255,255,255,0.33);
    --c-toggle-fg: rgba(48,48,48,0.66);
    --c-toggle-border: rgba(48,48,48,0.33);
    --c-toggle-shadow: rgba(0,0,0,0.33);
    --c-toggle-hover-bg: #fff;
    --c-toggle-hover-fg: #333;
}

I actually had Step 3.7 Flash do most of this work, and it chose for the CSS variable names a c- prefix for reasons I don’t precisely understand, but equally it seemed a safer thing to do so I left it.

We now use the prefers-color-scheme CSS feature to tell the browser to overwrite those variables when the system theme is dark:

/* Experimental CSS5 stuff */
@media (prefers-color-scheme: dark) {
    /* dark */
    :root {
        --c-body-bg: #000;
        --c-body-fg: #fff;
        --c-navbar-bg: #000;
        --c-navbar-divider-bg: #aaa;
        --c-hover-bg: rgba(255,255,255,0.2);
        --c-hover-fg: #FF0000;
        --c-hover-glow: #ff6666;
        --c-tooltip-bg: #2d2d2d;
        --c-tooltip-fg: #d4d4d4;
        --c-tooltip-border: #555555;
        --c-tooltip-arrow: #555555;
        --c-pre-bg: rgba(255,255,255,0.2);
        --c-quote-bg:rgba(255,255,255,0.2);
        --c-shadow: #333;
        --c-shadow-heavy: #000;
        --c-affiliate-border: #444444;
        --c-post-details-border: #555555;
        --c-link: lightskyblue;
        --c-link-visited: #ad8bcd;
        --c-toggle-bg: rgba(32,32,32,0.33);
        --c-toggle-fg: rgba(240,240,240,0.66);
        --c-toggle-border: rgba(240,240,240,0.33);
        --c-toggle-shadow: rgba(255,255,255,0.33);
        --c-toggle-hover-bg: #222;
        --c-toggle-hover-fg: #eee;
    }

Finally, you add to the <head> stanza to tell the browser that you support automatic theme switching <meta name="color-scheme" content="light dark">, and you will now have automatic theme switching, where the default theme is light.

Making the theme user toggleable

Sometimes you might not want the theme to be dark or light depending on use case, so being able to override it manually is a must. You can do this trivially easy using four lines of Javascript, but I wanted to avoid Javascript so that unfortunately means stamping out quite a lot more CSS:

/* CSS-only dark mode toggle overrides via checkbox */
/* light */
#theme-toggle:not(:checked) ~ #page {
    --c-body-bg: #fff;
    --c-body-fg: #000;
    --c-navbar-bg: #fff;
    --c-navbar-divider-bg: #000;
    --c-hover-bg: rgba(0,0,0,0.1);
    --c-hover-fg: #FF0000;
    --c-hover-glow: #aa0000;
    --c-tooltip-bg: beige;
    --c-tooltip-fg: #000;
    --c-tooltip-border: chocolate;
    --c-tooltip-arrow: #000;
    --c-pre-bg: rgba(0,0,0,0.05);
    --c-quote-bg: rgba(0,0,0,0.05);
    --c-shadow: #aaa;
    --c-shadow-heavy: #000;
    --c-affiliate-border: #000;
    --c-post-details-border: #000;
    --c-link: #00e;
    --c-link-visited: rgba(85, 26, 139, 1.0);
    --c-toggle-bg: rgba(255,255,255,0.33);
    --c-toggle-fg: rgba(48,48,48,0.66);
    --c-toggle-border: rgba(48,48,48,0.33);
    --c-toggle-shadow: rgba(0,0,0,0.33);
    --c-toggle-hover-bg: #fff;
    --c-toggle-hover-fg: #333;
}

/* dark */
#theme-toggle:checked ~ #page {
    --c-body-bg: #000;
    --c-body-fg: #eee;
    --c-navbar-bg: #000;
    --c-navbar-divider-bg: #aaa;
    --c-hover-bg: rgba(255,255,255,0.2);
    --c-hover-fg: #FF0000;
    --c-hover-glow: #ff6666;
    --c-tooltip-bg: #2d2d2d;
    --c-tooltip-fg: #d4d4d4;
    --c-tooltip-border: #555555;
    --c-tooltip-arrow: #555555;
    --c-pre-bg: rgba(255,255,255,0.2);
    --c-quote-bg: rgba(255,255,255,0.2);
    --c-shadow: #333;
    --c-shadow-heavy: #000;
    --c-affiliate-border: #444444;
    --c-post-details-border: #555555;
    --c-link: lightskyblue;
    --c-link-visited: #ad8bcd;
    --c-toggle-bg: rgba(32,32,32,0.33);
    --c-toggle-fg: rgba(240,240,240,0.66);
    --c-toggle-border: rgba(240,240,240,0.33);
    --c-toggle-shadow: rgba(255,255,255,0.33);
    --c-toggle-hover-bg: #222;
    --c-toggle-hover-fg: #eee;
}

This is unfortunately very copy-and-paste, but I am unaware of doing better using pure CSS. In any case, we now overwrite those CSS variables based on whether the toggle theme checkbox is checked or not. Unfortunately we are not yet done with the copy-and-paste:

/* Experimental CSS5 stuff */
@media (prefers-color-scheme: dark) {
    /* CSS-only dark mode toggle overrides via checkbox */
    /* dark */
    #theme-toggle:not(:checked) ~ #page {
        --c-body-bg: #000;
        --c-body-fg: #eee;
        --c-navbar-bg: #000;
        --c-navbar-divider-bg: #aaa;
        --c-hover-bg: rgba(255,255,255,0.2);
        --c-hover-fg: #FF0000;
        --c-hover-glow: #ff6666;
        --c-tooltip-bg: #2d2d2d;
        --c-tooltip-fg: #d4d4d4;
        --c-tooltip-border: #555555;
        --c-tooltip-arrow: #555555;
        --c-pre-bg: rgba(255,255,255,0.2);
        --c-quote-bg: rgba(255,255,255,0.2);
        --c-shadow: #333;
        --c-shadow-heavy: #000;
        --c-affiliate-border: #444444;
        --c-post-details-border: #555555;
        --c-link: lightskyblue;
        --c-link-visited: #ad8bcd;
        --c-toggle-bg: rgba(32,32,32,0.33);
        --c-toggle-fg: rgba(240,240,240,0.66);
        --c-toggle-border: rgba(240,240,240,0.33);
        --c-toggle-shadow: rgba(255,255,255,0.33);
        --c-toggle-hover-bg: #222;
        --c-toggle-hover-fg: #eee;
    }

    /* light */
    #theme-toggle:checked ~ #page {
        --c-body-bg: #fff;
        --c-body-fg: #000;
        --c-navbar-bg: #fff;
        --c-navbar-divider-bg: #000;
        --c-hover-bg: rgba(0,0,0,0.1);
        --c-hover-fg: #FF0000;
        --c-hover-glow: #aa0000;
        --c-tooltip-bg: beige;
        --c-tooltip-fg: #000;
        --c-tooltip-border: chocolate;
        --c-tooltip-arrow: #000;
        --c-pre-bg: rgba(0,0,0,0.05);
        --c-quote-bg: rgba(0,0,0,0.05);
        --c-shadow: #aaa;
        --c-shadow-heavy: #000;
        --c-affiliate-border: #000;
        --c-post-details-border: #000;
        --c-link: #00e;
        --c-link-visited: rgba(85, 26, 139, 1.0);
        --c-toggle-bg: rgba(255,255,255,0.33);
        --c-toggle-fg: rgba(48,48,48,0.66);
        --c-toggle-border: rgba(48,48,48,0.33);
        --c-toggle-shadow: rgba(0,0,0,0.33);
        --c-toggle-hover-bg: #fff;
        --c-toggle-hover-fg: #333;
    }
}

What we are doing here is flipping the handling of the toggle theme checkbox being ticked based on the system’s current theme i.e. you get the system’s current theme on page load, if the system theme changes the website also changes its theme, and the toggle theme checkbox being ticked therefore means ‘the opposite theme of the system theme’. Next we need a theme toggle:

    <input type="checkbox" id="theme-toggle" class="theme-toggle" aria-label="Toggle dark mode">
    <div id="page">
      <label for="theme-toggle" class="theme-toggle-label" aria-label="Toggle dark mode">
        <span class="icon-moon" aria-hidden="true">πŸŒ™</span>
        <span class="icon-sun" aria-hidden="true">β˜€οΈ</span>
      </label>
      ...
    </div>

Thanks to Unicode, the sun and the moon no longer need dedicated image assets like we would do in the bad old days. Nowadays, you just use the appropriate Unicode codepoint, dead simple.

The next thing is to make our toggle theme button NOT have a visible checkbox, and to style its label so it shows the moon or the sun and that floats at the top right with a transparency so it doesn’t get in the way of reading text:

/* Visually hidden checkbox but keyboard-accessible */
.theme-toggle {
    position: fixed !important;
    top: 0;
    right: 0;
    height: 1px;
    width: 1px;
    overflow: hidden;
    clip: rect(1px, 1px, 1px, 1px);
}

/* Fixed floating dark-mode toggle button */
.theme-toggle-label {
    position: fixed;
    top: 1rem;
    right: 1rem;
    z-index: 9999;
    width: 2rem;
    height: 2rem;
    border-radius: 50%;
    background: var(--c-toggle-bg);
    color: var(--c-toggle-fg);
    border: 2px solid var(--c-toggle-border);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    font-size: 1.2rem;
    line-height: 1;
    box-shadow: 0px 0px 8px var(--c-toggle-shadow);
}

.theme-toggle-label:hover {
    background: var(--c-toggle-hover-bg);
    color: var(--c-toggle-hover-fg);
    border-color: var(--c-hover-fg);
}

.icon-moon,
.icon-sun {
    display: inline;
}

Finally, we need the toggle theme icon to be the correct one in all circumstances, which unfortunately requires yet more copy-and-paste CSS:

.theme-toggle:checked ~ #page .icon-moon {
    display: none;
}
.theme-toggle:not(:checked) ~ #page .icon-sun {
    display: none;
}

@media (prefers-color-scheme: dark) {
  .theme-toggle:checked ~ #page .icon-moon {
      display: inline;
  }
  .theme-toggle:not(:checked) ~ #page .icon-sun {
      display: inline;
  }
  .theme-toggle:checked ~ #page .icon-sun {
      display: none;
  }
  .theme-toggle:not(:checked) ~ #page .icon-moon {
      display: none;
  }
}

And that’s basically it – an unfortunate amount of duplication in the main CSS file, but it does get served to users gzip compressed so all that text duplication matters little to website load times. Most processors are so fast at parsing text that the extra verbiage doesn’t really matter either. As I mentioned above, you could use a few lines of Javascript and save yourself all this duplication, but I personally configure my web browser with Javascript disabled by default and I enable it on a per-site basis – only if I absolutely must use a site and it’s broken without Javascript do I enable it. If it’s a site I don’t care hugely about and it won’t load without Javascript I generally just close the tab, not worth the effort.

As mentioned above, Step 3.7 Flash did almost all of the work here. It didn’t get quite all the way there on its own though, because I wouldn’t let it install web page to image rendering via which it could debug its work. So I took it manually for the final stage of debugging and tweaking to get the last of it over the line. But I understand from reading online that if I had allowed it to visualise the results of its work and to click around the web page by itself, it should have successfully completed its task in full. The reason I didn’t give it the power to browse and interact with web pages by its itself alone is probably obvious: I hadn’t set up safety containerisation for it on my Mac, so it was effectively operating as if me.

It’ll probably be popups installation in my next diary entry. Depends on when they get it completed and what the weather will be like in the next few days. We shall see!

#website #theming




Word count: 1723. Estimated reading time: 9 minutes.
Summary:
The final entry regarding the balcony solar installation has been written. After delays caused by smart meter outages, data analysis was completed. It is found that the solar panels contribute to bill reduction. An annual saving of €204, representing an 11% decrease in electricity costs, is estimated. The return on investment period has been calculated at 2.54 years.
Monday 15 June 2026:
17:02.
Word count: 1723. Estimated reading time: 9 minutes.
Summary:
The final entry regarding the balcony solar installation has been written. After delays caused by smart meter outages, data analysis was completed. It is found that the solar panels contribute to bill reduction. An annual saving of €204, representing an 11% decrease in electricity costs, is estimated. The return on investment period has been calculated at 2.54 years.
I am finally able to write up the third and final part of my series of diary entries on ‘balcony solar’ installations in Ireland. The first entry went into some detail about the hardware and the theory behind ‘balcony solar’ installations in Ireland, and the second entry discussed issues around local measurement and control of the balcony solar installation. As mentioned in those posts, we needed to wait until we were into June before I could write this final entry which answers the crucial question:

How much money is this ‘balcony solar’ installation saving me in terms of bills?

This is because the Irish ESB Networks makes public your smart meter data with a delay of a few days, but not infrequently they have outages which delays that data by weeks. We unfortunately had one of those outages end of May, and I didn’t get complete smart meter data for analysis until today.

Quick recap

You will remember from the first post that current electricity costs and tariff distribution are as follows:

PeriodCurrent cost per kWhSummer daily avrgWinter daily avrg
Peak rate: 5pm - 7pm€0.38
(+65% over night rate)
1.93 kWh (€0.73)2.41 kWh (€0.92)
Day rate: 8am - 5pm, 7pm - 11pm€0.33
(+43% over night rate)
8.81 kWh (€2.91)9.80 kWh (€3.23)
Night rate: 11pm - 8am€0.233.15 kWh (€0.72)3.30 kWh (€0.76)

And that:

  1. 66.7% of the bill goes on day rate electricity.
  2. 16.7% of the bill goes on peak rate electricity.
  3. 16.5% of the bill goes on night rate electricity.

So, from a bills perspective, you only really care about day rate and peak rate electricity as that is 83.5% of your electricity bill.

Furthermore, that two solar panels were first hooked into the house mains from around mid-April, with those being initially ground mounted and left to run for a few weeks while I debugged the setup and made sure it would all work before going to the bother of installing them onto the outhouse roof. From the 8th May onwards I had all four panels mounted onto the outhouse roof and contributing power. The configuration is that three panels are connected to the battery storage and one panel is connected to the inverter on its second input – from 9.30am each morning the battery charges to full and a single panel supplements household electricity usage; once the battery is charged, all four panels supplement the household usage; from 5pm onwards the battery discharges at 220 watts with the single panel supplementing, until 11pm when everything turns off until 8am in the morning when the battery again outputs 220 watts with the single panel supplementing. One should therefore save at least two kWh of day and peak rate electricity per day in the summer months, and I had been expecting a theoretical saving of around twenty percent of day + peak rate electricity usage during those summer months. That, based on the 83.5% of my electricity bill above, should reduce my bill by 16.7%, or about €25 per month, but again only during the summer months where there is enough free energy falling from the sky to fully charge the 1.6 kWh battery storage each day.

The last two years at the mains meter box

Note that the Irish ESB only provide the last two years of detailed data from your smart meter:

I’ve separated daylight savings time (DST) months from winter months (GMT) because the seven months of DST are the only ones from which you’ll get much off solar panels, and even then March has been considerably better than October for solar radiation in the past two years. DST also matters because you switch on lights earlier and later in the day, so you tend to use more power during GMT months. Which leads me into …

Confounding factors

The most natural thing to do would be to compare last year’s electricity consumption to this year’s, however last year before June I had the main developer workstation turned on daily, and this year past I mostly don’t have it turned on daily as my Macbook is enough for most of the things I need to do if I’m not earning money (e.g. right now, I’m writing this on the laptop plugged into the developer workstation’s large 4k monitor, because spinning up the dev workstation to type text is way overkill). In 2024, an average typical summer day + peak rate used 11.62 kWh and an average typical winter day used 12.25 kWh, whereas after unemployment an average typical summer day + peak rate used 9.67 kWh (-16.82%) and an average typical winter day used 12.18 kWh (-0.6%).

I must admit a little surprise that I had the developer workstation turned on so frequently during the most recent winter months, but that does match my memory – I remember being quite grateful, as I am every year, for the free space heating my office gets from the developer workstation being turned on. The fact that this adds more than one eighth to my total household electricity bill is a little sobering, but at least heat generated by the workstation is a more productive use of that electricity than an electric bar heater.

I should also mention that immediately after my employment ended, I particularly was not at home as I was out riding bikes and climbing mountains during June and July 2025, so the electricity for those months was lower than it likely will be this year where I’m more accustomed to having my freedom, for example.

What is the estimated reduction of my electricity bill?

Obviously the yellow bars in the summer months chart above for April, May and June 2026 are our reductions from the ‘balcony solar’. After adjustment for my unemployment reducing power consumption anyway, I reckon that the solar panels contributed a reduction in peak and day rate electricity consumption according to the ESB meter box as follows:

Month Reduction
June 2026 -22.96%
May 2026 -13.89%
April 2026 -2.54%

May is probably lower than it should be because my APSystems EZ1 inverter’s MPTT1 input died, so I had to route everything through its MPTT2 input only. That reduced efficiency by a bit – judging by June’s results so far, by quite a bit in fact. In June a replacement was installed and the original sent back as RMA, so we’ll see how things go in the next few months.

Assuming that you will only get much from the panels for seven months, and that winter months use more power, I reckon I might get an annual electricity bill reduction of around eleven percent. That is, in my case and with current electricity prices, equal to €204 saved in bills per year. That is a return on investment period of 2.54 years, a bit longer than I had originally intended (a year!).

Why so low? This 2023-era low voltage system is particularly inefficient, I reckon it loses a good 20-25% of the power it captures, plus it doesn’t charge optimally, nor does it discharge optimally. A 2025-era or later system based on dual inverters so it is capable of simultaneous charge and discharge would be considerably less stupid with power distribution, and it would respond to changes in household consumption rapidly, rather than wastefully sitting at a constant discharge rate between fixed time periods irrespective of the weather outside.

As covered in previous posts in this series, for a little more money you can get FAR better kit, modern stuff instead of this 2023-era kit that I ended up with thanks to Aliexpress sending me not what I had thought I had ordered. As we’ll probably be out of this rented house within 2.5 years – well, hopefully! – I’m going to lose money on this project. But for anybody reading, if you expect to still be living where you are right now for more than two years, you really ought to be very strongly considering installing micro solar generation into your house. Even in Ireland’s typically overcast skies! Solar battery storage has gotten so cheap it’s a no brainer.

This is despite zero subsidies from the government (indeed, a 23% VAT tax on all the equipment!), and zero payment for excess power contributed to the grid. Even with those very unfavourable conditions, microgeneration solar is face palm obviously the right move with a two year payback period, as year three onwards is pure gravy.

What’s next?

The popups installation for my site has begun! I’ve been waking at 4am to be onsite for 6.30am this week to help out, as I will be tomorrow morning. Thank God I am unemployed! And expect an entry on here with pictures when it’s all done.

I asked the Step 3.7 Flash LLM how it would improve this website. It gave a long list of modern web page design ideas, none of which interested me, bar one: a dark-light theme which auto switches based on your viewing device’s dark-light theme setting (apparently this landed with CSS v5, I don’t pay attention to new web standards until somebody – or some LLM – points stuff out to me). So I went ahead and implemented that dark-light theme for this website, and you can expect an entry on that soon.

My ‘end of an era’ special on Chinese direct to consumer sales platforms like Aliexpress is probably after the dark-light theme entry, though an entry on the site popups installation might beat it. In any case, I hope to get that end of an era entry up before the end of the month when the EU tariff comes in as then would be timely.

Other than those three, I don’t have any particular plans for diary entries here. School for the kids ends tomorrow week, after which I’ll be on childcare until end of August, and I’ve been tempering my expectations about getting anything else done appropriately. I expect plenty of bicycling around North Cork’s spectacular scenery on the e-Bikes as with last year, but also upcycling furniture (the kids will be learning how) and painting walls (the kids will also be learning how). I’m sure between all that the summer will fly and before we know it they’ll be back to school.

Who knows if my builder will turn up and erect my house by then! I suspect it very unlikely, but we’ll find out.

#solar #solarpanels #balcony-solar




Word count: 757. Estimated reading time: 4 minutes.
Summary:
An annual comparison of storage pricing has been presented. It is observed that both SSD and HDD costs have dramatically increased, reaching levels seen in previous years. This unprecedented price surge is attributed to the massive spending on AI infrastructure. The current high costs are believed to be unsustainable, though they may continue for another year.
Monday 1 June 2026:
15:28.
Word count: 757. Estimated reading time: 4 minutes.
Summary:
An annual comparison of storage pricing has been presented. It is observed that both SSD and HDD costs have dramatically increased, reaching levels seen in previous years. This unprecedented price surge is attributed to the massive spending on AI infrastructure. The current high costs are believed to be unsustainable, though they may continue for another year.
Here is the annual update to my periodic comparison of storage bytes per inflation adjusted dollar for magnetic hard drives and flash SSDs (you can find all the past posts here), which I have done every June since 2012:

Raw data: http://www.nedprod.com/studystuff/SSDsVsHardDrives.xlsx

What an astonishing year it has been for storage pricing! SSDs are more than double their cost last year – as if we had returned to 2019! Hard drives also more than doubled their cost of last year, and we have returned to 2020 pricing in terms of bytes per inflation adjusted dollar. I certainly have never seen such a massive price increase like this before, nor ever in the historical data apart from when those floods in Thailand took out a good portion of hard drive supply, and that affected hard drives only, whereas this dramatic price surge affects everything. It is unprecedented, to my knowledge.

This time last year I said:

This time two years ago I predicted a recession would cause storage prices to tumble. Here looks like that recession, but so far it hasn’t appeared in the wider US economy, though it has in the wider European and Asian economies.

As regular readers here will remember, I recently picked up a factory recertified 28Tb hard drive recently for a dedicated AI inferencing machine for the site’s security cameras. I got that drive delivered for €400. That might seem a lot, but minus sales taxes (23%) and delivery (maybe €30) that 28Tb enterprise hard drive cost about €300. That same drive cost nearer a grand after taxes this time last year. It’s madness just how much hard drive prices have fallen in a single year. I can’t remember anything like it in recent memory.

And one year later, hard price pricing has lurched violently in the opposite direction, despite that outside of AI the general tech industry is definitely in recession along with all of the US, European and Asian economies if you exclude the AI investment boom.

The AI investment boom is of course responsible for the surge in storage pricing, it has also doubled or more the cost of RAM, CPUs, anything computer related really. Right now is a terrible time to buy new computer hardware, though it’s an excellent time to be within the supply chain for manufacturing computer hardware. Such is the level of spending on AI infrastructure that it’s holding up the US economy and stockmarket, and probably also the Asian economies who would otherwise be in deep recession. They think US$400 billion was spent on AI infrastructure last year, and US$725 billion is the current projection for 2026 – and this omits the estimated injection of funding into their AI companies by the Chinese government as direct financial supports. Landing humans on the moon cost about US$250 billion in today’s money; the whole Vietnam war all in cost around US$1,125 billion in today’s money, but they spent that over twenty years and the tech industry is spending that in just two years. The sums involved are breathtaking, and of course, unsustainable.

Based on Q1 2026 reported results, Meta is now in net debt with the balance sheets of Microsoft and Amazon seeing significant deterioration in the past year. While Meta is in trouble, Microsoft and Amazon have enough cash they can probably carry on spending like this for another year, but after that, they’re going to have to decide if they can justify continuing. In contrast, Google and Bytedance look very healthy and could keep spending like this for years to come, and probably therefore will outlast everybody else when the stack of cards falls down (which I currently assume will be either or both of OpenAI and Anthropic collapsing when investors stop lending more money to them, which will set off a chain of capital withdrawal across the industry).

It is entirely feasible therefore that we have a full twelve more months of this sort of spending on AI infrastructure, and therefore this annual update this time next year will also report historically expensive storage. But I would be very surprised if this remains the case in 2028. I also think that the rest of the economy may become a noose around the neck of tech later this year, there is a fair chance of the financial system doing a wobbly again, maybe in private credit markets or even possibly sovereign debt. That might bring the party to an end before the end of 2026.

I guess we should know by this time next year!

#ssdsvsharddrives




Word count: 3954. Estimated reading time: 19 minutes.
Summary:
A detailed account of an Irish micro solar installation is presented. Technical aspects regarding the “balcony solar” system are discussed, including measurement methods and control via an Anker Solix unit. Legal constraints regarding grid export are addressed, while optimization strategies for bill reduction are detailed. The role of an LLM in system design is also described.
Friday 29 May 2026:
20:03.
Word count: 3954. Estimated reading time: 19 minutes.
Summary:
A detailed account of an Irish micro solar installation is presented. Technical aspects regarding the “balcony solar” system are discussed, including measurement methods and control via an Anker Solix unit. Legal constraints regarding grid export are addressed, while optimization strategies for bill reduction are detailed. The role of an LLM in system design is also described.
Last diary entry I went into a fair bit of detail about the hardware and the theory behind ‘balcony solar’ installations in Ireland, and I was hopefully persuasive about the theoretical potential reduction in electricity bills and theoretical return on investment of under two years.

One major caveat is that we cannot legally export power to the grid in Ireland without gaining prior approval, for which a registered electrician has to submit the appropriate documentation for what they have personally installed. This rules out the type of DIY installed micro solar installation called ‘balcony solar’ which is based on pushing power in the opposite direction via a standard household appliance plug, up to 800 watts as per the legal maximum in many EU countries such as Germany.

As a result, one needs to script and control the overall system to:

  1. Maximise the electricity not consumed from the grid.
  2. Minimise the electricity exported to the grid (which is wasted, but also illegal).

The next post in this series (but not the immediately next post, which will be my annual review of hard drive and SSD storage prices) will look at the empirically measured results at the mains meter i.e. bills actually reduced. For that though, I need at least a month of measurements to draw any definitive conclusions, so that last post of the three in the series will necessarily have to wait until sometime next month.

So what is the first thing that we need to ensure we do not export to the mains grid? As mentioned last entry, everybody in Ireland with a smart meter can retrieve the last two years of their electricity usage from https://www.esbnetworks.ie/services/manage-my-meter/view-my-smart-meter-usage with a thirty minute granularity, along with exact counts of kWh used for day rate (8am - 5pm, 7pm - 11pm), peak rate (5pm - 7pm), and night rate (11pm - 8am). For non-obvious reasons, these lag by four days or so, so if I went to that site right now I could see usage data only up to the 24th or 25th. This is useful for checking if a solution is accurate, but it is not the solution itself. What we need is a much more immediate way of reading current mains grid consumption power.

Locally reading the mains grid meter

Many years ago we had a thing called an OWL which had an AA battery powered clamp remote unit you could install in the meter box, and its main unit had a big LCD display showing the exact power being used right now. It had a USB port, and you could plug it into a PC and read the live data. It worked very well for about five years, but then one day stopped reading data which I had assumed was the remote unit failing, so it went off to electrical recycling heaven.

OWL seemed to have trebled the price since then, and not upgraded the system so you’re still stuck with its USB interface. This is annoying, the remote unit was a standard 433 Mhz low power transceiver and once upon a time you could cheaply buy a generic USB transceiver for those. But apparently no more – I couldn’t find any of that technology cheaply, and its driver support in Linux was very questionable. In short, it is abandoned hardware and especially at the trebled price it was a bad purchase.

I naturally then gravitated towards something Zigbee or Z-Wave based as both are low power enough to run off AA batteries for months, with Zigbee being the cheaper option, because I can’t install wiring into a rented house so wireless and battery powered is my only option. There are several affordable clamp-based Zigbee meters available, but for some inexplicable reason they all require mains power to work which would require me to rewire the mains meter box. As this isn’t my house, I can’t do that, and because they only take AC 230V, I can’t wire in a battery box either.

I eventually landed on the only cheap option remaining: a pulse counter. Smart mains electricity meters have a little LED on their front which flashes every one thousandth of a kWh. You can attach a pulse counter which records every one of those flashes, and from that can calculate the current number of watts being imported. There are several options for these devices, I went with the Frient Electricity Meter Interface 2 for about €35 inc VAT delivered, and it does exactly what it says on the tin: the meter flashes, it updates its Zigbee state, anything subscribed gets notified. It turns out to be very accurate overall – just 0.72% deviation from the ESB readings over a month – but it is prone to instantaneous overestimation i.e. it’ll report, for a short while, far more mains power usage than is correct. It’ll then self correct, and given enough time it balances out to within one percent of correct:

I have tried to see a pattern to when it deviates, but I can see nothing obvious and the fact that it does recover over time makes me think it’s possibly a suboptimal choice of algorithm. Big overestimation spikes are followed by extended spells of mild underestimation until the total count evens out. That said, I’ve never implemented one of these before, and maybe it’s harder to implement than it looks?

There are obvious limitations to pulse counting: the first is that by definition we cannot detect export to the grid as the meter LED does not flash if exporting power. The second is that resolution is very lousy at low power usage:

Power (watts)      Seconds between pulses (i.e. measurement lag)
1000 3.6
500 7.2
250 14.4
125 28.8
60 60
30 120

As you can see, it must take a minimum of half a minute to detect 125 watts of mains grid usage, and a minimum of two minutes to detect 30 watts of mains grid usage. As is very obvious, this means that the closer we get to exporting to the grid, the exponentially worse instantaneous resolution our pulse counter has. This is very unfortunate, but I am unaware of any better solution under €150 which doesn’t require modifying the wiring in this rented house, so it will have to do.

Getting the Anker Solix Solarbank E1600 data into a local MQTT broker

One of the more annoying things about the Anker E1600 battery box is internally it uses bog standard MQTT for pub-sub communication with the Anker cloud and the Anker mobile phone app. That makes it straightforward to write a web client which subscribes to the MQTT feed (https://github.com/thomluther/anker-solix-api is probably the most popular and best supported implementation), including a straightforward ‘replicate this MQTT from the Anker cloud to my local MQTT broker’. The reason that this is annoying is because the Anker cloud is completely unnecessary here, the device could connect to a local MQTT broker and skip the cloud entirely. But no, Anker didn’t enable that trivially easy thing to enable in its firmware, so we are at where we are at.

I took one of the examples from the github repo above and adjusted it to replicate all MQTT updates to a local MQTT broker. This isn’t Niall’s coding at its finest, but it’s been running trouble free for a month now so it’ll do:

#!/usr/bin/env python3
"""Example: E1600 MQTT integration with monitoring and control."""

import asyncio
import logging

from aiohttp import ClientSession
from api.api import AnkerSolixApi  # pylint: disable=no-name-in-module
from api.mqtt_factory import SolixMqttDeviceFactory  # pylint: disable=no-name-in-module
from api.mqtt_solarbank import SolixMqttDeviceSolarbank  # pylint: disable=no-name-in-module
from aiomqtt import Client
import common

_LOGGER: logging.Logger = logging.getLogger(__name__)
CONSOLE: logging.Logger = common.CONSOLE
MODEL = "A17C0"
MQTT_BROKER = "192.168.x.x"
MQTT_PREFIX = "Solarbank"

class Device:
    def __init__(self, queue, mqttdevice : SolixMqttDeviceSolarbank):
         self.mqttdevice = mqttdevice
         self.queue = queue
         self.last_items = {}

    def topic_updated(self, *args, **kwargs):
        for k,v in args[6].items():
            if k not in self.last_items or self.last_items[k] != v:
                self.queue.put_nowait((k, v))
                self.queue._loop._write_to_self()
                self.last_items[k] = v

async def main():
  async with Client(MQTT_BROKER) as client:
    async with ClientSession() as websession:
        myapi = AnkerSolixApi(
            common.user(), common.password(), common.country(), websession, _LOGGER
        )
        CONSOLE.info("Checking for devices...")
        await myapi.update_sites()
        await myapi.get_bind_devices()
        device_sn = None
        for sn, device in myapi.devices.items():
            if device.get("device_pn") == MODEL:
                device_sn = sn
                CONSOLE.info(f"Found device: {sn}")
                break

        if not device_sn:
            CONSOLE.info(f"No device ({MODEL}) found")
            return

        queue = asyncio.Queue()
        device = Device(queue, SolixMqttDeviceFactory(
            api_instance=myapi, device_sn=device_sn
        ).create_device())
        mqttsession = await myapi.startMqttSession(device.topic_updated)
        if not mqttsession:
            CONSOLE.info("Failed to start MQTT session")
            return
        mqttsession.subscribe(f"dt/anker_power/{MODEL}/{device_sn}/state_info")

        CONSOLE.info("Topic subscribed, awaiting topic updates ...")
        while True:
            for n in range(0, 100):
                k, v = await queue.get()
                CONSOLE.info(f"{MQTT_PREFIX}/{k} => {v}")
                await client.publish(f"{MQTT_PREFIX}/{k}", payload=v)
            # Republish unchanging values periodically
            device.last_items = {}

if __name__ == "__main__":
    try:
        asyncio.run(main(), debug=False)
    except Exception as err:  # pylint: disable=broad-exception-caught  # noqa: BLE001
        CONSOLE.info(f"{type(err)}: {err}")

I wrapped that into a docker image and wrote a little docker compose stanza for it so it launches with OpenHAB, and that’s how I built the OpenHAB dashboard you saw in the last post – it’s just values from MQTT. OpenHAB has been told to record readings into a SQLite database, and from that I generated the graph above comparing the Frient pulse counter readings to those from ESB Networks.

Controlling the system

You may remember from a few posts ago me extolling the virtues of a 196b LLM called Step 3.5 Flash which is designed to work well on consumer hardware. Well, it turns out not only does it name personally members of the Chinese Communist party when describing alleged incidents of impropriety, it’s also not half bad at software engineering. So I plugged it into Visual Studio Code as my coding assistant, and told it to go research a design which would solve controlling this system. It went off scouring the web including reading through all the German Balkonkraftwerk discussion forums AND all the datasheets for my specific devices, and then constructed a very feasible design plan. I prompted it with a few ‘stupid’ questions to help it improve its design, then I let it loose implementing the solution.

Step 3.5 Flash isn’t very good at writing code, it makes a lot of mistakes, but it realises its mistakes quickly enough and keeps iterating until they’re all fixed. That, combined with voluminous thinking token output, means it burns through the tokens quickly. It certainly chewed through 500 million tokens with ease, costing me about $14, and it ran for a few hours including live running the control program against the real hardware, interpreting the log output and/or launching the program under the debugger, fixing bugs and improving its test suite, until it declared that it felt it had a working control program.

I was suitably impressed if I am honest. This LLM runs well on consumer hardware with enough RAM e.g. a Mac Book with >= 128Gb of RAM. It’s not up there with Claude Opus, it makes far more mistakes and generates oodles of thinking tokens, but if I’m not paying by the token this is something you can give it a job to do, go to bed and when you wake up it’ll have something potentially production ready to go. That’s impressive and it gets me excited about the future for when I need working code and I don’t really care about its performance nor security e.g. local device control code.

Step 3.5 Flash was released last February, and by pure sheer coincidence its next iteration landed this morning: Step 3.7 Flash. It’s better across every metric whilst staying within the 200bn parameter limit, it’s still fast on consumer hardware with at least 128Gb of RAM, and it can now also see (i.e. it has gained vision). It writes better quality code first time, outputs far less thinking tokens, and unsurprisingly local LLM enthusiasts are all very excited – I myself was busy poring through the benchmarks and documentation at 7.30am this morning despite being just awake. I’m sure I’ll be writing here more about that LLM, but to return to the point, Step 3.5 Flash did a pretty good job at getting this solved with minimal oversight from me.

Unfortunately, as I mentioned last diary entry, we came foul of the Anker box finding the APSystems inverter controlling output to be unacceptable and the cause of occasional error states where all output power is cut until somebody clears the error by pressing the button on the front of the box. So my $16 of OpenRouter spend ended up being wasted, which was annoying, though it did gain me my first experience of end-to-end agentic AI software design and implementation.

Controlling the Anker storage output instead

The Anker battery storage can be told to output any wattage value you choose with a ten watt granularity, but it is via its timed program facility i.e. you tell the Anker cloud that between X time and Y time the battery shall output Z watts. The next time that the device pushes an update to the Anker cloud, it’ll look at the current output and if it is not what it is supposed to be, it pushes a command to the storage to adjust its output. This seems to have an update frequency no better than one minute, and more usually like ninety seconds. Given that the Frient meter has a lag of a minute or so, and so does output control, and that most large electrical loads like an oven work by a relay switching on and off (i.e. all on, all off), by the time you’ve told the system to increase output the device consuming it will have stopped, and now you’re exporting to the grid and wasting power.

As mentioned last post, you can control the Anker battery storage via Bluetooth instead, and at least there you can push new output levels pretty much instantly and they’ll apply. I read online that the Anker device responds within seconds, so IF you had a sensitive and responsive mains power clamp AND you controlled this via Bluetooth, I think zero export power is achievable. But I am missing both, so that won’t work in my situation. We will need an alternative solution!

Back to the drawing board

Throughout all this high systems engineering, I began to wonder if I am overcomplicating the control of this system? Yes, in a traditional battery storage powered inverter you want to have the system output as close to what the house is using so mains power consumption is as close to zero as possible. But this particular micro solar installation has a unique aspect: it has just 1.6 kWh of battery storage. And here’s the revelation: it doesn’t matter which day and peak hour kWh you offset, they all cost the most.

If you therefore have the battery discharge at a low, fixed, rate during day and peak hour rates after the sun goes down so that it is empty by end of day rate, you don’t need to do anything more. You’re already maximising your bill savings. So complicated control programs aren’t necessary so long as that low, fixed, rate is at or below the house’s baseline power consumption.

I’ve ended up configuring the system as follows: at 5pm when peak rate begins, the battery always starts to discharge at 220 watts. After conversion losses, that turns into almost exactly 200 watts being pushed by the inverter into the house. You may remember from the last post that I wired my best panel directly into the inverter, and the other three panels into the battery storage, so during daylight hours you typically see 80-300 watts from that single panel while the battery storage charges, after it is full you see a varying depending on cloud cover 240-700 watts from all four panels up to 5pm each day, then you get the ~200 watts from the battery plus whatever the single panel adds during the beginning of peak rate hours.

At a 220 watt discharge rate, and given that the battery stops discharging at 5% capacity, you will consume the battery after 6.91 hours. If starting at 5pm and stopping at 11pm, you should have 17.5% of battery capacity remaining of which 12.5% is usable. The battery turns on again at 8am, and usually reaches the 5% shut off a little after 9am (it depends on how much charging it does 6am - 8am).

This should be fairly optimal from a bills reduction perspective. It could be better, but it’s also not terrible: a kWh is a kWh, so long as our 200 watts battery output doesn’t exceed what the house uses.

As we saw in the half hourly electricity consumption graph last entry, we’re usually using at least 400 watts from 3pm onwards each day. So we’re all good on the bills reduction part, except of course for what happens between the battery getting full and 5pm each day.

To clamp output or not to clamp: that is the question

You can tell the Anker box to clamp its output after its battery is full so one never exports to the grid. However, if you think about that, that isn’t bill minimising: what you actually want to do between battery full and 5pm each day to minimise bills is push into the house everything the solar panels can gather. Then if say somebody runs the dishwasher, or the dryer, as many billed day rate kWh as possible get offset even if it means contributing kWh to the grid for no compensation. After all, once the battery storage is full, any kWh not reaped from the solar panels goes to waste in any case, so if they might potentially reduce your mains grid consumption you’re better off expending them on that than not using them at all.

Obviously that would be illegal, so you shouldn’t do that. However reading online I find that for low contributions, the ESB’s monitoring equipment at the nearest substation will never notice anything as other houses on the same ring will consume any power you export. So the only thing which could notice is your smart meter, and for some reason in Ireland the smart meters are explicitly configured to not count exported kWh unless activated remotely to do so. You can check your smart meter’s counts for day, peak, night and export by pressing the button on its front.

So, in other words, the ESB have configured their smart meters to intentionally not notice any kWh exported unless you get your connection upgraded to an export counting connection. Or, put another way, they’re apparently glad to take free electricity if they don’t have to pay you for it, so long as it is amounts that are less than what their substation emits (from reading online, if a substation ever sees negative flow it shuts down, triggering alarms at ESB Networks HQ, which I assume means that the installed capacity of solar power exporters per substation can never exceed half that of the substation).

What’s next?

The next entry will be my traditional annual entry on the inflation adjusted history of storage prices for spinning rust and flash memory. I’ll likely write that tomorrow or Monday.

I have the spreadsheets set up to analyse the ESB Networks raw data, so I should have some pretty graphs to show in the next entry in this series on balcony inverters which reveal just how much bill savings there were in the months of April and May. Expect that sometime in June.

If anything happens with the house build – ha! – it might gain mention here.

Finally, at the end of June will be the end of an era, and I think I’m going to do a special diary entry on here about it. The EU will be introducing a €3 per item tariff on small packages from outside the EU after the end of June. This means the end of cheap stuff imported directly by EU consumers, and in my particular case it’ll mostly mean the end of me buying stuff from the likes of Aliexpress as they won’t be cheap anymore.

Knowing that this is coming, I have been wracking my brains thinking of what to buy from Aliexpress before the deadline (the items must cross the EU border before 1st July to avoid the tariff, so I can’t really order anything new after the end of May). I have bought the following items recently:

  • Any components that the house would use which hadn’t been purchased yet in sufficient quantity, which turned out after a survey to be: seven more DC dimmer switches, thirteen more BTS7960 H-bridges for the ventilation boost fans, and sixteen more GA12 N20 blind motors. Not much cost – if bought now – so I’m glad that’s done.
  • Current inrush thermistors to perhaps prevent some of the 54v to 24v DC converters from blowing their fuses which has been happening occasionally on the site. These are very cheap components – on Aliexpress – and may solve the problem.
  • Two new types of DC dimmer, one a wall switch type cheaper than the ones I’ll be fitting to the house, and one ultra cheap inline wire type.
  • A snubber to fix the transient voltage shutdown problem at the site where if I try using the power washer, the Sungrow inverter cuts out complaining about overvoltage. I think that is caused by inductive voltage spikes from its motor. In any case, I’ll be constructing a plug in snubber box to work around the issue which I’ll show and tell here.
  • Many years ago now I expensed to the business the purchase of a used Fluke LRAT-2000. It has a SFP cage and can test fibre, but I’d never got round to getting a compatible SFP fibre transceiver for it, so I thought I ought to get that solved before the Aliexpress close deadline as I’ll need to assemble several small parts each of which would get a €3 tariff later.
  • And lastly, and it’s a bit silly but shows exactly why the loss of cheap Aliexpress is going to be a pain, I will be doing some furniture work to convert an old TV cabinet from my father’s house into a set of drawers. I have a sheet of Chinese coated plywood for the new shelves and back, and to fix the back and those shelves I’ll be using some cheap fixings from Aliexpress which cost very little, but aren’t things you can get over here easily or if you can, they are priced with a very hefty markup.

And that’s the annoying thing with this new EU tariff: I totally get that it puts EU based vendors at a disadvantage as they can’t compete on price. But they sell the exact same Chinese made stuff as Aliexpress, just usually with a 50-100% markup e.g. Amazon is chock full of identical items to Aliexpress, just usually a good bit more expensive. So we’re all going to have to pay more for the same stuff going forwards which does feel rather like the Corn Laws in the 19th century. It certainly is worse for the majority, to the benefit of a few.

I do expect to continue to use Aliexpress for items you just can’t get elsewhere: those DC PWM dimmers are an excellent example, the only other source for those I found was German units costing €120 each whereas the high end model from Aliexpress cost €17 each delivered. I also remember a fun time trying to find little metal cogs for the blind motors, and they were utterly unsourceable in quantities less than a thousand except from Aliexpress. For this type of thing, Aliexpress will remain king going forwards, and I’ll just have to pay the €3 tariff.

#solar #solarpanels #balcony-solar




Word count: 7284. Estimated reading time: 35 minutes.
Summary:
A DIY balcony solar installation in Ireland is described. High electricity costs are discussed, and the ROI of the system is calculated. Technical details regarding inverters (Anker Solix, APSystems EZ1-M) and battery storage are provided. The importance of simultaneous charge/discharge capability is stressed, as maximum efficiency must be achieved for significant savings.
Saturday 16 May 2026:
22:54.
Word count: 7284. Estimated reading time: 35 minutes.
Summary:
A DIY balcony solar installation in Ireland is described. High electricity costs are discussed, and the ROI of the system is calculated. Technical details regarding inverters (Anker Solix, APSystems EZ1-M) and battery storage are provided. The importance of simultaneous charge/discharge capability is stressed, as maximum efficiency must be achieved for significant savings.
First things first: April 2026 was a rotten month for us, as we had fail all in quick succession the dishwasher, the side mirror on my car, the lawn mower, and Megan’s car failed its annual roadworthiness test due to a rotten rear subframe. All very expensive and time consuming to fix, and it blew out almost all my free time and energy outside of erecting temporary solar panels, so I got little else of what I had originally planned done. Still, earlier today we got the last of these finally fixed which was Megan’s car, and I have regained my freedom to travel now I have my car back. Woohoo! As much as it was very annoying and expensive to fix, once the old subframe was out I was glad that it was fixed as it’s carrying around my wife and children:

You can see where the join in the subframe was detaching from rust

Thankfully all that is now fixed, and many thanks to my brother-in-law Donal for all his help.

Last diary entry I mentioned that I was doing manual labour most days installing into my rented house temporarily four solar panels from my future house. I have a box of solar panels just sitting there, along with their wall mounting brackets, so it made no sense that they shouldn’t be reducing my bills, especially as I have had no income for the past eleven months now.

As electricity prices climb ever steeper in Europe with little chance of getting better in the next few years, there will surely be a much larger push to install solar panels than until now. Traditionally, solar panel installations in Ireland cost many thousands of euro: about €7,500 for the average installation in 2026. And that is after:

  • 0% VAT incentive.
  • SEAI grant worth a further 19%.
  • Long, long wait times due to all the grant approved installers being booked out.

Thankfully, there is another way which is very popular in other EU countries: balcony solar, which is 100% DIY installation and therefore vastly cheaper.

As it’ll be so long, this topic will span three diary entries:

  1. The hardware and the theory (this post!).
  2. Scripting and controlling the overall system (next post).
  3. The empirically measured reality (post after that).

Balcony solar

In 2019, the German parliament removed the requirement for micro solar installations to be installed by expensive professionals, enabling the home owner to DIY their own installation. There were sensible conditions placed on these micro installations:

  1. Nothing in the installation could use more than 60 volts in order to comply with existing electrical safety legislation (you don’t need a registered electrician when DIY wiring with voltages below about 80 volts).

  2. The inverter must feed the power into the house mains using a standard electrical socket, thus making the inverter like a household appliance.

  3. The maximum feed in is capped to 600 watts (later increased to 800 watts in 2024).

  4. The inverter must cut all output within a few seconds of the mains grid disappearing to prevent workers getting electrocuted – also, because these reverse feed up a standard household plug, a home owner could touch the pins of the plug after unplugging it.

The idea was that apartment dwellers – which are the majority in Germany – could fit two to four panels on their balconies and capture electricity when the sun hits their balconies – which if their household didn’t use the power it would be exported to the grid for others to use, which then appeared as a credit on their electricity bill.

Unsurprisingly, balcony solar proved to be very popular. The first models went on sale in 2020; by the end of 2023 over half a million systems had been installed, and by the end of 2025 over two million systems had been installed. As there was now an established market for these products, prices kept tumbling and multiple countries around the world enacted specific laws enabling them.

Ireland is one of an increasingly few European countries with no plans to introduce specific legislation for balcony solar. In Ireland, you cannot export to the grid without being granted approval first, and for that you need a RECI qualified electrician to submit the application. So, in Ireland, we can never feed in more power than the house consumes.

That implies that we have no choice but to fit battery storage, but thankfully due to grid export prices in Germany tumbling there has been a large increase in the production and popularity of battery storage for balcony inverters, so now it’s very feasible to fit a small amount of battery storage and for that to still be worth doing given we hopefully only have a year or two left in this rented accommodation. To be specific, why the cost benefit for installing these systems changed a few months ago:

  1. The energy shock from America blowing stuff up where a fifth of the energy comes from pushed up demand for balcony solar enormously.

  2. That increased competition, but also economies of scale, and prices for these systems fell still further.

  3. The cost of electricity rose, which made the Return on Investment (ROI) for balcony solar much shorter than before.

Return on investment periods for balcony solar installations in Ireland are now below two years with current electricity and component prices – and that’s without any subsidies whatsoever! Anybody not fitting them is being foolish at that rate of return.

How much energy does our rented house use?

Everybody in Ireland – irrespective of their current electricity provider – can pull the last two years of their electricity usage from https://www.esbnetworks.ie/services/manage-my-meter/view-my-smart-meter-usage with a thirty minute granularity. The website will export a CSV, and from that I can tell you that assuming this month’s current electricity prices which will surely rise still further in the months to come:

PeriodCurrent cost per kWhSummer daily avrgWinter daily avrg
Peak rate: 5pm - 7pm€0.38
(+65% over night rate)
1.93 kWh (€0.73)2.41 kWh (€0.92)
Day rate: 8am - 5pm, 7pm - 11pm€0.33
(+43% over night rate)
8.81 kWh (€2.91)9.80 kWh (€3.23)
Night rate: 11pm - 8am€0.233.15 kWh (€0.72)3.30 kWh (€0.76)

Total average cost per day is therefore €4.36 for 13.89 kWh in summer and €4.91 for 15.51 kWh in winter, for a total annual bill of €1,675 per year which is for 5,314 kWh of electricity. The key part to take away from this is:

  1. 66.7% of the bill goes on day rate electricity.
  2. 16.7% of the bill goes on peak rate electricity.
  3. 16.5% of the bill goes on night rate electricity.

Therefore, anything we can do to get (i) day rate electricity and (ii) peak rate electricity consumption down will have the largest impact on my bill. Night rate electricity can be safely ignored for a micro solar installation.

Breaking it out into thirty minute granularity:

Straight away it is obvious that the bulk of the electricity bill occurs between 3pm (when the kids get home) until 11pm (when we all go to bed). There is a small spike in the morning as everybody gets hustled out to school and jobs, but generally speaking the hours you care most about are when the sun is out and the first five hours after the sun goes down.

Indeed, if for at least the sunny months we could cover 70% of the day and peak rate costs with solar – that’s seven months – one third of my annual bill would get taken off. So that put an upper bound on the cost of this installation of €544 inc VAT. If I could assemble a system for less than that, I’d have Return on Investment under one year and therefore it would be rational to install said system, even though we’ll hopefully be moving out from this rented house in the next year or two.

Parts I already had

I already had the solar panels and their mounting brackets, plus some free pressure treated wood so all the external stuff I could get for free. Therefore all that cost me zero, and I didn’t count it for my personal ROI calculations.

Though, let’s cost those out here now for anybody else interested:

  • 4x ~450w solar panels: €200 (used off donedeal, new currently cost about €70 each way up from last year when new cost €40)
  • 4x aluminium solar panel brackets from Amazon: €63
  • Pressure treated wood: €20
  • 2x Y-splitters and solar cables: €30

Total: €353 inc VAT and delivery (excluding the panels delivery).

(Delivery for panels is a real pain as they’re so bulky, if you have an estate car or a van or can borrow one, then collecting them will be almost always cheapest)

You might wonder why wall installation and not roof installation? Of course the roof will produce superior results. But it’s also a lot more hassle having to pull up roof tiles, get brackets and rails in there, then get the panels up there without the wind blowing you off the roof etc. Wall mounting is drilling in a few concrete anchors, attaching the brackets, get the panels on and you’re done. Much less hassle.

Modern solar panels are surprisingly okay with not pointing directly at the sun. Your ideal angle for Ireland is about 45 degrees, which makes calculating the brackets dead easy. You point them as south as you can manage. Our rented house actually points 29 degrees east of due south, so those panels above point about an hour too early in the day for maximum yield. It’s still something like 86% of peak at midday, and because Ireland doesn’t get much direct sun the typical overcast clouds do a great job of mushing the sunlight all around so direction matters far less in overcast Ireland than sunny places elsewhere.

As I often say to people who think their site unsuitable for solar: just fit more panels. At fifty euro each, almost always just throw more panels at every problem, and you get less directional sensitivity for free if you fit 3x more to handle overcast weather.

Best bang for the buck balcony inverters + battery storage

As I had alluded to earlier, because we’re so limited in maximum feed in, we will have no choice but to fit battery storage so that the excess from the panels goes into the battery when it’s sunny, and then that battery discharges when it’s not sunny, and always staying under whatever the house is consuming from the mains.

Only very recently have balcony inverters with storage come under €750, even a year ago they were all well over a grand. Most quality branded balcony inverters without storage now cost less than €120 delivered from your local Amazon – if you’re willing to take unbranded, Aliexpress will deliver one for about €70. If you shop around, the cheapest inverters with storage built in cost €650-700 including 23% VAT and delivery to Ireland, and you have a choice of:

  1. Marstek Venus A which has a 2.12 kWh battery, 4 MPPT inputs up to 2.4 kW of panels, and it can supply up to 1.5 kW to AC. It can charge from the grid using cheap night rate power as well as from panels.
  2. Anker Solix Solarbank 2 E1600 Pro which has a 1.6 kWh battery, 4 MPPT inputs up to 1.8 kW of panels, and it can supply up to 800 watts to AC.

Everything else exceeds €750 once including Irish VAT @ 23% (which German vendors have to charge, instead of the 0% they charge German addresses) and delivery to Ireland. And both cost more than my €544 limit!

The Marstek is the superior technical specification for the money, but if you search online there are more reports of flakiness and unreliability issues than for the Anker. The Anker is the same brand we all know for making power adapters and battery banks for years, so they’re a better known brand plus because they’ve sold hundreds of thousands of these boxes, their Home Assistant integration and open source tooling is much more mature.

Just before I departed for England end of March I spotted online an Anker Solix Solarbank 2 Pro for €450 delivered to Ireland. With an Aliexpress coupon, I got that down to €409. It seemed a bit too good to be true, but I reckoned why not take the punt, usually when they realise my Irish address the vendor tends to cancel the order, and then I get my money back. 85% of the time I get my money back instead of the item I ordered, the other 15% of the time I get really good bargains.

What actually turned up

Much to my surprise while I was in England the order went to dispatched, and about ten days later after I had returned it arrived on my doorstep. I eagerly tore it open to find … it wasn’t an Anker Solix Solarbank 2 E1600 Pro, but rather an ‘Anker Solix Solarbank E1600 2’ with a model code of A17C03A2 i.e. gen two of model A17C0.

You can obtain this for about €442 inc VAT delivered to Ireland, so I had gotten quite a good deal. However, there are good reasons why you do NOT want to buy this model as your balcony solar solution – for one thing, it lacks entirely an AC inverter. What it’s intended for is that it adapts your current battery-free balcony inverter into a battery storage one by sitting in between your panels and your existing inverter, so basically it’s an upgrade kit for an existing system.

The gen one of this model I had read much about. It is considered one of the most frustrating balcony solar products of the past three years (the gen one launched in 2023). This was, however, the gen 2 and the main changes over gen 1 are:

  1. It has an integrated zero watt output switch, which was previously a €50 separate add on for the gen 1. This means it can exclusively charge the battery without sending anything to the output, which maximises the battery charge rate.
  2. It has added heating for the batteries so they can be used in winter (at a cost of energy efficiency obviously), where ‘winter’ is defined as the batteries being below 20 degrees celsius (yes you did read that right).

I initially opened a return case as this wasn’t the model I ordered. However Aliexpress wanted a video of me opening it, and in my excitement I hadn’t taken one. Fool on me. However I had also noticed that I could pick up a standalone balcony solar inverter for about €109 delivered, so that brought this total system to €518 inc VAT inc delivery to Ireland. Which is under my ROI threshold of €544, so I decided to try keeping it and I closed the RMA ticket.

The Anker Solix Solarbank E1600 gen 2 (A17C03A2 not A17C03A1)

This system, which is intended for upgrading an existing balcony solar installation, has two sets of inputs where the solar panels connect (BUT both inputs are wired into a single MPPT input, which they don’t make entirely clear except in some small writing buried in the user manual) and one output which connects to the balcony inverter. The idea is that power in excess of what the inverter consumes is directed into the battery storage, and then the battery is later used to power the inverter when the sun has set.

It has the same 1.6 kWh battery as the Anker Solix Solarbank 2 E1600 Pro and the Anker Solix Solarbank 2 E1600 Plus, and specifications wise looks like the Plus model but minus a built in AC inverter, though in fact this model has much cheaper electronics and quite a bit worse design tradeoffs. They also look physically dissimilar, here are pictures of the E1600 non-Plus, and E1600 Plus:

The Anker Solix Solarbank E1600 gen 2 can take a maximum of 30 amps of input at a voltage range between 30 volts and 55 volts, and can output up to 30 amps from its single output port. Claimed MPPT efficiency is 97.8%, and the reversible boost-buck converter is 93% so power drawn from the battery loses about 9%. My panels have an open circuit voltage of 41 volts, so you must NOT connect panels in series like you’d normally do, but rather in parallel. Each of my panels theoretically could output ten amps, but in realistic conditions it’s going to be more like eight amps. As I mentioned earlier, it only has a single MPPT input despite having two physical inputs, so however you prefer to wire your panels in parallel across those two physical inputs is up to you, as they’re electrically identical. This is why I listed Y-splitters for the solar panel cables above.

Its battery can charge at up to 800 watts, which I’ve personally confirmed is true. Supposedly it can also discharge at 800 watts, but you’ll need your inverter to play ball which we’ll get onto later.

One very big caveat with this model is that it only has a single reversible DC-DC converter i.e. it can either (i) charge the battery from solar OR (ii) discharge the battery (or enter bypass mode, where solar input is directly passed to output). The Plus and Pro models have TWO converters, and so what is going on with charging doesn’t affect discharging, and therefore if a cloud passes overhead then the battery can be drawn down upon to maintain the AC output level. This model can NOT do that, it is EITHER charging or discharging, though you can set a schedule to force it to charge or discharge throughout each day. Obviously the lack of two converters makes this box less efficient, but in the end you get what you pay for.

Unfortunately, the Anker documentation doesn’t explain any of the above well and makes it seem like their battery box can both charge and supply the house simultaneously. This is ‘true’ in a way: this model appears to have maybe four fixed shunt ratios between input/battery/output, so as an example it can:

  1. Charge battery 100%, output 0%
  2. Charge battery 3x output, so if input were 1000w and output were 100w then the battery gets charged at 300w, and 600w is wasted. Yes, you read that right!
  3. Charge battery at same as output, so if input were 1000w and output were 400w then the battery gets charged at 400w and 200w is wasted.
  4. Charge battery 0.33x output, if input were 1000w and output were 600w then the battery gets charged at 200w and 200w is wasted.

I chose the 3.0 - 1.0 - 0.33 ratios as approximately correct. There may be a few more fixed shunt ratios in hardware, though not many more. What you should take away from this is: if your house is drawing a small amount of power under the fixed shunt ratio mode it can greatly reduce your battery charge rate, IF the Anker Solarbank has chosen a ratio which clamps battery charge rate.

If you’re about to ask how often its firmware chooses a ratio which clamps battery charge rate and wastes solar input?, the answer is ‘most of the time’. The firmware is profoundly stupid and delegates all decision making to the Anker cloud (and if you configure the device without a cloud connection, then it delegates everything to the app running on your phone over Bluetooth, and if your phone loses the Bluetooth connection then the device does not implement the schedule you told it in the app. Oh, and yes, in Bluetooth only mode the Anker app must always be running in the background, and it’ll zomp your phone’s battery life as a result).

Unfortunately, the Anker cloud’s decision making appears to me and everybody who has complained about it online to be profoundly dumb. The only good news here is that the open source ecosystem support for interacting with the Anker cloud is very mature, and I was able to cobble together an Anker cloud to MQTT bridge docker image in only a few hours of work (and without AI assistance too). Once into MQTT, I could hook it into OpenHAB and within that I can easily script command and control of the battery and the inverter, plus a dashboard:

(I should mention for completeness that there are also mature open source ecosystem solutions for controlling the device entirely over Bluetooth e.g. https://github.com/flip-dots/SolixBLE. In my case, I’d need a Bluetooth repeater to reach where the device is stored in the garage, and it was just cheaper and easier to use the Anker cloud interface instead. If I were expecting to live in this rented house for more years than I currently expect, I’d probably invest in a €30 Zigbee/Bluetooth repeater off Aliexpress and exclusively drive the Anker device from OpenHAB over Bluetooth only)

Thanks to the hundred thousand odd users of this system out there, there has been work to deduce what rules Anker programmed into the firmware. Almost all of that is written in German, but thanks to AI that isn’t a problem nowadays. Here are the approximate rules, executed in order, if the battery is not full and your Anker app schedule has enabled battery charging:

  1. If solar panel input is less than 15-20w, sleep and emit no output.
  2. If solar panel input is less than 45-50w, charge the battery and emit no output.
  3. If solar panel input is less than 100w, if output is enabled, don’t charge the battery and emit output.
  4. Otherwise, choose a fixed shunt ratio from those available such that the output gets something like the configured amount (e.g. if you configured 100w, you might get 100-250w; if you configured 200w, you might get 100-300w), with the balance charging the battery. Reevaluate and adjust the ratio chosen periodically. Note that output can NOT be below 100w if the battery is charging unless output is set to 0%.
  5. BUT if battery is being charged at maximum rate, choose a fixed shunt ratio so that output gets the balance of the solar panel input. This happens even if you set the output to 0%. Yeah I know, go figure.

In other words, the firmware is bound by minimums: if solar input is high and you’ve told it to exclusively charge, it’ll use as much power as possible to charge and dump the rest to output; if you’ve told it to output say 200w, it’ll get somewhere within 50-150% of that even if it curtails battery charging rate. It’s a dumb design if it weren’t for the cost element – as converters get ever cheaper, almost certainly in the future just fit two converters and call it a day. Back when Anker designed this maybe in 2021, converters were expensive so they made a compromised design in order to use exactly one converter. The fixed shunt ratio design is kinda clever for cost reduction, but it’s also very square hole round peg.

For temperature:

  1. If battery temperature is below 20 C, activate 80w battery heater until battery temperature is at least 20 C. Yes this wastes a lot of solar gain.
  2. Charge up to 600w if battery temperature is less than 24 C. Note that charging at 600w will heat the battery up over 24 C within minutes unless it’s very cold outside.
  3. If battery temperature is over 24 C, charge up to 800w.

The reason this coddling of the battery is done is because (i) it’s a 16v battery so to get the amps to move you can’t be cold and (ii) they guarantee 80% capacity remaining after 6000 cycles. Most LiFePO4 batteries are charge-discharged through a voltage range which results in a ~2000 cycle lifetime, but you can narrow both that voltage range and the temperature range and the amperage pushed through the battery to reach 6000 cycles.

Given the cold Irish climate, the battery heater characteristic suggests that fitting an insulation blanket to the Anker Solarbank is a very wise idea as it will reduce energy losses to the battery heater. I fitted a roll of 10 mm ceramic fibre blanket out of an overabundance of caution in case the battery ever caught fire:

Before and after applying the ceramic fibre insulation blanket
(the reason that I blacked out the inverter labels is because anybody with the inverter serial number can remotely hijack it, see below)

10 mm of blanket doesn’t cost much, and it’ll greatly reduce the amount of time that the battery heating coils need to run. The great thing about insulation is that the first few millimetres always has the best bang for the buck – even ten cheap millimetres makes a big difference.

Finally, I just want to point out that the fact that I can write out so much precise detail about device behaviour is because so many (mostly German) end users had documented this device’s real world behaviours. Anker certainly didn’t document most of it, though they seem to have partially caught up via their website’s FAQ, if not by updating the product’s manual. If you were looking at an unbranded solution off Aliexpress, then nothing would be documented and all these behaviour quirks would be 100% on you to figure out. By choosing a branded and popular solution, you get a head start on figuring out ‘why is this device behaving the weird way it is?’. And the mature open source ecosystem for integration is certainly worth the small added cost for purchase over an unbranded system.

What to take away about the Anker Solix Solarbank E1600 gen 2

After all that detail, it won’t be obvious that to maximise solar yield you attach dedicated panels directly to the inverter so those can contribute to the house while another dedicated set of panels charge the battery. If you choose the split of panel allocation to match your environment and hardware, you can ensure that the battery usually gets to 100% before 3pm when the house power consumption starts to rise, and therefore the Anker box enters bypass mode due to battery full and the inverter gets all panels from which to supplement the house during the peak consumption hours. Then when the sun sets the battery starts to discharge, and if you configure things right it’ll be nearly empty by 11pm when the day rate ends, and anything left over can be discharged from 8am onwards the following morning.

In other words, completely ignore the fixed shunt ratio functionality. It’s an idea that looks good on paper, and maybe it works better in climates with constant blue skies where the wastage won’t matter as much. But here in Ireland where wastage really matters a lot, just forget about that feature entirely. Plan around the battery storage being in one of (i) charging (ii) bypass (iii) discharging and exclusively one of those three.

I ended up wiring my strongest panel directly into the inverter, and the other three panels in parallel into the battery storage. My panels are all STC rated for 375 watts each, and under ideal circumstances you can see 400 watts off a single panel. In the much more common overcast day you get in Ireland, one third of STC is about right, so ~125 watts per panel. This means three panels generate around 375 watts, and given that the Anker box limits charge rate when it’s cold that’s about right. At 375 watts it takes about five hours to charge to full, so if it starts charging at 9.30am (which it does because I told it to do so via timetable) then it becomes full by around 2.30pm on a bright overcast day. This is exactly matches our period of lowest day rate electricity usage, and during which a single panel will cover more than half the house power consumption. Once the battery is full, it then enters bypass mode and all four panels are available to the inverter to supplement the house’s current electricity consumption.

Come 5pm, my timetable forces the battery into discharge, so peak time electricity always gets the battery to draw from and the single panel is also available to draw from if the day remains bright. We cap the discharge rate to 230 watts so the battery runs down to around 20% remaining by 11pm after which we turn everything off until 8am the following morning. Between 8am and 9.30am we force the battery into discharge to offset the morning electricity usage spike, then from 9.30am onwards the battery charges as quickly as possible. We rinse and repeat that daily. We therefore offset as much day rate and peak rate electricity as is possible with this single inverter based design of system, which might be around 5 kWh per day on a typical overcast day, or €1.68 per day, which might be worth €352 per year of bill savings. This is obviously well less than planned for above thanks to the single inverter design limitations, but it would repay my own personal investment within eighteen months, and as I mentioned, I expect to transplant this system into my Dad’s house once we move out from this rented house.

Note that one useful feature of micro solar is that because you’re only ever aiming to offset the baseline X kWh off your bill, it doesn’t matter when you offset a kWh so long as it’s done during day or peak rate hours. Obviously, ideally you want to offset more of the peak rate when you can, but that’s exactly the topic for the next diary entry – if any of that is too complicated, you can legitimately set this thing to trickle out the power during day and peak rate hours and get most of the savings possible. As you’ll see next post, I’ll be reducing the fixed trickle out rate from 230 watts by a bit, but only if we burst output 400 watts during peak hours due to household load. In other words, given that peak rate is only a bit more expensive than day rate, it won’t save much more of my bill, maybe a few euro per year. In any case all that is for next entry not now.

To be extra extra clear, before we move on from the Anker Solix Solarbank E1600 gen 2 I cannot stress this point enough:

If you’re buying a new balcony inverter with storage, buy a system capable of simultaneous charge and discharge i.e. dual converters e.g. the Anker Solix Solarbank 2 E1600 Pro, the Anker Solix Solarbank 2 E1600 Plus, or the Marstek Venus A. Do NOT under ANY CIRCUMSTANCES waste your money on a single converter system in 2026!

I knew all this before my order to Aliexpress – unfortunately what turned up was this single converter system, not the one I ordered. As Aliexpress weren’t going to let me return it, I’ve made do with this 2023-era system. In 2026, less compromised more efficient designs cost only a little more, and you should choose those instead!

The APSystems EZ1-M balcony inverter

Being in the ‘fortunate’ position of having to choose my balcony inverter to match my battery storage rather than the other way round, I had a few choices within the sub-€120 price range:

  1. Hoymiles HMS-800W-2T. The most popular choice in Germany. Not a great choice for combining with the Anker Solix though as it has max 14 amps per MPPT input AND it can’t yield more than 400w if only one input is used. In other words, it would underperform in my 3 + 1 panel configuration. Though, see below about that.
  2. Growatt NEO 800M-X. Has class leading 23 amp inputs, plus it can generate all 800w off one input, but needs a high input voltage (28v!) to start so you lose your mornings and evenings for yield.
  3. Marstek MI800, cheapest of them all and no reported issues except for its max 16 amps per MPPT input. Low 22v start voltage.
  4. APSystems EZ1-M. Has 20 amp inputs, input start voltage is 26v which isn’t the best but also not the worst. BIG tick in favour is an official local REST API for control and very rapid output response to it being told a new power to output (i.e. if you can read grid mains power consumption, you can script REST API calls to the inverter and it’ll respond quickly). Another tick in favour is that the official Anker micro inverter for the Solix Solarbank E1600 is a rebadged APSystems EZ1-M, so same hardware and mildly different firmware. Unsurprisingly, the Anker app treats the EZ1-M inverter specially compared to others. Note that the official Anker MI80 inverter costs at least €180 and usually more, and the EZ1-M is a lot cheaper.

There are many other low cost balcony inverter choices incidentally – especially unbranded balcony inverters from Aliexpress and others – but the above are the main lowest price branded balcony inverters as of Q2 2026.

I ended up plumping for the APSystems EZ1-M principally for its official local REST API, because now it’s dead easy to integrate into pretty much everything (unlike the Anker device, which needs an enthusiast maintained library such as https://github.com/thomluther/anker-solix-api). Some of the devices listed above also have open source ecosystem integrations, but all have caveats and there is nothing better than an officially supported local API. Another factor was the high input amps capability, if this balcony inverter ever gets used for something else then the higher amp input range would be useful.

Unfortunately, a bit like with the Anker Solix Solarbank E1600 gen 2, my own personal testing of the APSystems EZ1-M has revealed convenient failures to document actual behaviours and other quirks. Firstly, maybe it’s the firmware that the Anker app insisted be flashed onto it (v2.1.4_b), but this inverter is only capable of yielding a maximum 400 watts per MPPT input. So if you have 600 watts available on one input, it’ll only draw max 400 watts from that, like the Hoymiles inverter above. Secondly, its Wifi antenna is absolutely crap, and even with a nearby Wifi AP you’ll struggle to reliably communicate with it – you’ll see a lot of timeouts for your REST API requests. So driving this thing to prevent export to the grid is tricky just from that standpoint. Suffice it to say that I am disappointed in my choice, and as you’ll see next paragraph the open REST API actually turns out to be pretty useless when this device is combined with the Anker device – if doing this again, the Marstek MI800 as the cheapest of the lot would be my preference.

Unfortunately, there is a much bigger problem: there is something about how the EZ1-M throttles its input when it’s restraining its output to meet your configured setting which sometimes upsets the Anker Solix Solarbank E1600, causing the latter to enter an error state and halt output. This happens infrequently, it could run for a day without issue, but then another day it’ll trip out two or three times in a day. And the Anker Solix won’t resume output until you physically press a button on its front, for which you need to notice that it has tripped out. This, needless to say, is immensely frustrating.

The EZ1-M uses very typical budget balcony inverter hardware, and thanks to a reverse engineered firmware (https://github.com/Fexiven/open-apsystems) which replaces the firmware with a pure ESPHome image, we know that the processor which does the inverting is a TI C2000 DSP. The user facing front end runs on an ESP32-C2, and it tells the DSP what to do via a UART connection. The TI C2000 is a very low end CPU, but it appears to come in a preconfigured and pretested budget solar-inverter-to-grid push module, so it’s probably cheapest to whack one of those in and have the ESP32 implement the Wifi, Bluetooth etc side of things. As far as I can tell, all the branded balcony solar inverters under €150 use nearly identical hardware, so if the Anker Solix dropout issue occurs with the EZ1-M – which is identical hardware to the official Anker MI80 inverter – then it’ll occur with all other solar inverters.

And indeed, searches of balcony inverter forums reveal this is exactly correct, and is why when I said above ‘It is considered one of the most frustrating balcony solar products of the past three years’, this is what I was referring to.

But surely, you might ask, how then does the official Anker MI80 inverter work seamlessly with the Anker Solix Solarbank E1600 without random drop outs? It turns out that the official Anker MI80 inverter is configured to never throttle at all, it always outputs the maximum it can draw. Instead, it’s the Anker Solix Solarbank E1600 which implements the output throttling. Once you realise this, the system finally behaves in a stable fashion:

And we finally have a reliable, working solution! It took me three weeks of trial and error to reach what I just described. I knew it was possible to build a reliable system from these parts as thanks to dialogue on the German Balkonkraftwerk forums I knew that it was possible. It’s just nowhere actually wrote out the specific configuration and settings for this specific hardware combination. And now somebody has: me.

Before I move on, I ought to mention that the APSystems EZ1-M balcony inverter is exceedingly easy for malicious third parties to hijack. You can read all about that at https://jakkaru.de/articles/apsystems-remote-firmware-injection, but in short you really need to keep other devices away from talking to this inverter as anybody with access to the REST API can push any firmware to the device without limitation. This is great if you want to write a custom firmware onto the device – very refreshingly old school – but seeing as any device on your network can gain a permanent foothold into your network via this wide open exploit mechanism, you would be wise to secure network access to this inverter and only allow whitelisted devices access. The easiest way to implement this is via VLANs, so via OpenWRT you put the inverter onto its own, segmented, Wifi + VLAN and then permit only say your OpenHAB controller access to that VLAN so values can be read. Under NO CIRCUMSTANCES should you permit the EZ1-M access to the public internet. Also, under NO CIRCUMSTANCES should you permit the EZ1-M access to any other device in your network.

And if you do so anyway, also be aware that anybody with your inverter’s serial number can do a man-in-the-middle attack to remotely push a malicious firmware upgrade to your specific inverter. The serial numbers do appear to be fairly randomised, so there is that, but yeah that’s how much you really need to keep this inverter away from the public internet. Oh, and finally, just to get even better, this inverter never turns off its Bluetooth and always allows wide open access. So anybody with a Bluetooth gun can upload any firmware they like from outside your house, and they now have a foothold into your network. So you really DO need to prevent this device from having any access to anything else – give it its own Wifi AP and its own VLAN and firewall it off from everything.

Unfortunately, you’ll probably have no choice but to permit the Anker Solix Solarbank E1600 access to the internet, as you have two choices for controlling it: (i) its Bluetooth API and (ii) its cloud API. Both have very mature open source support, but as I didn’t want to spend more money on Bluetooth repeaters when I’ll have zero use for those down the line (I’m far more amenable to Zigbee repeaters, as those I know I’ll use in the future), I ended up punching a hole through the VLAN just for this device to reach the Anker cloud. The device itself has no concept of the current time of day, so won’t execute its programmed time plan on its own – it gets commands pushed at it by the Anker cloud or the Anker app on your phone. At least this makes command and control easy – you tell the Anker cloud of a new plan, and it’ll push that to the device – but it’s all so very not private plus with a very obvious single point of failure. As I mentioned above, if this installation were more permanent I’d use the Bluetooth based control and dispense entirely with brittle cloud based functionality. But, for now, for this specific installation, cloud based control will do.

That’ll be where part two of this series of diary entries begins: how do you go about ensuring that this system doesn’t export power to the mains grid? Expect another long entry full of technical detail soon!

What would I recommend to somebody wanting to fit Balcony Solar in Ireland in 2026 for under €1,000?

As listed above, you can get right now four used solar panels making up 1,800 watts of electricity gathering power, plus wall brackets and cables for €353 inc VAT and delivery (excl delivery of the panels, you’ll need to go collect those yourself).

After my super fun times with the Anker Solix Solarbank E1600 and the APSystems EZ1-M, I would doubt that the Marstek Venus A could be more hassle to get working well. You can get one of those delivered to Ireland from Germany including 23% VAT for €638 right now. That’s €991 inc VAT inc delivery all in for a 2.12 kWh battery storage system with simultaneous charge-discharge inverter AND a bundled mains power meter to prevent export to the mains grid. As it can also charge itself from the mains grid, in the winter months when there is no sunshine you can have it charge using night rate electricity and offset expensive day rate electricity. It of course has its own cloud based control system with mobile phone app and all that is leaky for privacy and concerning for single point of failure, so whilst being easy for the average home owner there are concerns. There is a Modbus API, but apparently using it will crash the device periodically causing factory reset. That’s probably scriptable around, but maybe sticking with their cloud based control system would be wiser for this brand.

Specs wise it’s one hell of a lot of kit for the money, and you should get ~7 kWh per day of day rate savings out of it in the summer months and save maybe 0.7 kWh per day of day rate savings in the winter months. That is about 1,575 kWh per year, worth about €525 of savings per year, so your investment should be fully paid off within two years.

And that is with zero subsidies from the government! If you have the space for the panels, you’d be mad to not fit one of these in Ireland right now. And if in the future Ireland does legislate for balcony inverters to enable you to get paid for exporting power without needing a RECI electrician to submit a certificate, the return on investment time on these gets a lot better again. Here’s hoping!

#solar #solarpanels #balcony-solar




Click here to see older entries


Contact the webmaster: Niall Douglas @ webmaster2<at symbol>nedprod.com (Last updated: 2019-03-20 20:35:06 +0000 UTC)