Workstation Update – 2025/2026

About five years ago now I wrote a blog post about the new workstation computer I’d just built. In summary, I built a low-power system in a standard ITX case to replace a power-hungry Dell workstation I’d owned previously.

After five years, it’s time for an update – both to the hardware and to some of the predictions I made in that blog post.

I ended up keeping that build (an Intel i3-10100 and 16GB RAM) for almost five years, though it wasn’t used as my primary workstation all that time – for about a year I used a Surface Pro 8 and docking station instead as I was moving about a lot. However, the core hardware did serve me well for the timespan I thought it would.

In mid-2025 I bought a new set of core components for the machine:

  • AMD Ryzen 7 7700 CPU
  • Thermalright SI-100 CPU Cooler
  • Gigabyte A620I AX Motherboard
  • G.Skill Flare X5 64GB RAM (2x 32GB)
  • Crucial T500 1TB SSD

I kept the original Fractal Design Era ITX case, Corsair SF450 PSU, and assorted Noctua case fans. I opted to have two 120mm fans at the top as intakes, with the CPU cooler churning air towards the side vents and rear panel.

The Fractal Era case with internals visible, including CPU cooler and power supply. There is a spaghetti of cables everywhere.
Behold the cable management!

I’m still very happy with the Era ITX – it’s a fabulous case and I still don’t understand the hate it has received online. It’s not a case for high-powered GPUs, but it’s a rare ITX case that is! At this point I’m expecting to get another 5 years out of this case and power supply, barring any catastrophic failures.

I chose to go AMD over Intel this time not because I believe AMD is better performing than Intel. For the productivity tasks I tend towards Intel still wins a fair number of benchmarks at the same price point. However, I dislike the way Intel changes CPU socket every generation or two (AMD only switches every time a new RAM socket is released). If Intel still made CPUs for the LGA1200 socket, I wouldn’t have upgraded to DDR5 – but they don’t so I did!

At this point, six months into the new build, I am considering a few upgrades. The CPU cooler isn’t as quiet as I’d like – it is indeed silent at idle, but it spins up to be pretty loud when the CPU is under load for a while (despite my best efforts tinkering with fan curves in the BIOS). I would also like to put a 3.5″ hard drive back in this machine for more storage. My best option is likely to move to an all-in-one liquid cooler, such as the BeQuiet Silent Loop 3 (renowned for low pump noise, important for silence at idle). The 240mm model would fit in the Era, and would reduce CPU cooler height enough I could fit in the hard drive.

I’m also considering a dedicated graphics card. I’m not a big gamer, but there are a few titles I play that would benefit from a bit more grunt than onboard graphics have to give. The other common uses for graphics cards don’t really interest me a great deal; I loathe cryptocurrency and the few times I’ve tried out local AI LLM inference have been overwhelmingly disappointing (like everything else to do with “AI”). If I do end up getting one, I’m looking at the Intel Arc B580 mostly because I think Intel needs encouragement to keep going with their dedicated graphics hardware.

We’ll see what the next five years bring!

What is the best Internet Service Provider if I live in the Huon Valley?

I’m writing this post as a reference answer to a question that seems to get asked once a week in the Huon Valley Community group on Facebook.

So you’ve just moved to the Huon Valley, and want to know what the best internet service is for you? Here’s my simple guide, with a few personal opinions thrown in for good measure.

Use the tool on the NBN’s website to perform an address check at your property to see what technologies are available where you live. Use the toggles at the bottom of the page to see what’s available.

Image

If you are able to get Fixed Line or Fixed Wireless at your property, this is great! Scroll down to ‘Choosing an NBN Provider‘. First though, we’ll talk about what to do if your only option is satellite.

Satellite: SkyMuster vs Starlink

The tl;dr: Unless the personal ethics of Elon Musk absolutely disgust you to the point of refusing to give him a single cent, go with Starlink.

SkyMuster (owned by the NBN) and Starlink (owned by Elon Musk) are the two different satellite internet options available in Australia. They operate in basically the same way: your internet connection is beamed up to a satellite from a base station somewhere on the mainland, and then beamed back down to a dish on your roof. The difference between the two is how far away the satellites are, and who owns them.

SkyMuster satellites are a long way away, in something called geostationary orbit (where they are always over the same place on the earth). Starlink satellites, on the other hand, are much closer to surface of the planet, and instead of being in the same place whiz around the place at an amazing speed. In practise this means that the Internet signal takes much longer to get out the SkyMuster satellite (500ms) than it does to the Starlink satellite (40ms). You may not notice this difference checking your email, but you will absolutely notice it when browsing the web or gaming.

There is a downside to Starlink though, from a technical standpoint: because the satellites whiz around the earth, there needs to be a huge number of them in the sky so there’s always one overhead. The number grows by hundreds every week, and it’s getting to the point of being an actual problem for astronomers (the satellites get in the way of their telescopes).

Then there is one final issue with Starlink worth mentioning: Starlink is owned by SpaceX, which is owned partially by Elon Musk. He is almost the actual definition of a bad man, and giving him more money than he already has should be a last resort.

Some people feel that Starlink is better than NBN Fixed Wireless – I disagree, I feel they are roughly on par with each other in terms of speed and service quality. But I will always recommend and prefer NBN Fixed Wireless over Starlink for the simple reason that I believe we should support Australian public infrastructure over lining the pockets of American billionaires.

Expect to spend $80 to $140 per month on Starlink, depending on the speed.

NBN Fibre and Fixed Wireless: Choosing an NBN Provider

The tl;dr: If you want the best, go with Launtel. If you want good value, go with Aussie Broadband.

If you’re lucky enough to be in an area serviced by NBN Fibre or Fixed Wireless, great news! Your Internet connection will be cheaper and better quality than anything you can get via satellite. The NBN is a wholesale provider, and you’ll connect via a retail ISP. There are plenty of options, but I’ll mention a few of the best options:

  • Launtel: Based in Tasmania (guess which city…), this is the ISP I use. They’re slightly more expensive than some of the other options, but the quality of the connection is great, pricing is clear, support is fantastic, and I overall recommend them. One quirk is they price per day, but this also means that it’s possible to get an Internet connection for a single day if you wanted to (for example, if you had a shack and wanted a connection there for a few days over your Easter break).
  • Aussie Broadband: If Launtel are a bit on the expensive side, Aussie is another great option. I haven’t used them personally, but family members have, and I’ve never heard any complaints.
  • Telstra: Overpriced but otherwise fine, as Telstra always has been and always will be. If you already have an account with Telstra and just want a single bill, I can’t fault you at all for that logic.

Expect to spend between $60 and $120 per month on an NBN connection, depending on the provider and the speed you choose.

Each of these providers has zero-month contracts so you can switch things up any time you like. On these month-to-month plans you’re unlikely to get provided with a hardware router. Sometimes this doesn’t matter, you can usually reuse the router from your old house. If you do want a new router from your ISP, selecting a longer-term plan will usually get one included.

If you’re a gamer or a techie, I’d recommend Launtel. They’re great, and have features like static IP addresses, reverse DNS, BGP peering, and so on, available as extras. If you don’t know what any of those words mean, Aussie Broadband are a bit cheaper and do a great job of a stable Internet connection for browsing and Netflix.

The Ugly Stepchild: Mobile Internet

One final option is to use the mobile network as your home Internet provider. I don’t recommend this as a general solution, but it can work in some circumstances:

  • You don’t mind occasional reliability issues: almost all of the complaints on the Facebook group are from people using 4G or 5G connections (almost all of those are using the Optus network, but some with Telstra too).
  • You don’t have many people planning to use the connection. One or two people is probably fine, but if you have more people than that, you’ll want a more stable and speedy connection.
  • You’re not doing any gaming. Gaming over a mobile connection is a miserable experience and one best not experienced firsthand.

If you choose to go the mobile route, the hardware you choose will make big difference: avoid anything that plugs into your computer via USB, instead going with a proper router that gives a WiFi network you can connect to.

Conclusion

In summary:

  • If you can get NBN Fibre or Fixed Wireless, and want the best, go with Launtel.
  • If you can get NBN Fibre or Fixed Wireless, and primarily care about good value, go with Aussie Broadband.
  • If you’re stuck with satellite, unfortunately it’s Starlink for you, unless you don’t use the Internet much at all and a mobile connection will suffice.

Stuff I’ve Liked

Turns out I’ve had a bit of a problem with writing blog posts the last few years. Every time I look at my drafts folder in WordPress, this sense of overwhelm takes over – nothing is quite good enough to compare against some of the great ‘content’ I consume every day. So, I write nothing.

So I thought, fuck it, and instead here’s a list of some of that content I’ve enjoyed over the last month or two…

  • This video from the YouTube channel Climate Town about free shipping and free returns was an eye-opener. I really didn’t realise how big of a problem free returns are. It’s wild that we’re just throwing so much stuff away.
  • Nick Feik’s article on Why Albanese is in Trouble. It perfectly summarises how I feel about the Labor party in the world today: good, but not good enough.
  • My friend Tom has written a thought-provoking article on generative AI in the open source world. I really need to publicly share my own thoughts on AI some time. I’ve written an internal policy for use at Loop Foundry that might be useful for others so I should get around to that.
  • If you’re a fan of computer science, and you’re not already watching Dr Matt Regan’s Youtube channel, you need to subscribe yesterday.
  • Likewise if you’re a fan of retro PC and server hardware and haven’t already subscribed to Clabretro. They both deserve far more subscribers than they have.
  • Another friend Robin Riley has written a list of the sources they get news from, which I think is an excellent thing to share. I should share the same, but my list is nowhere near as comprehensive (it’s basically ABC News Australia, The Economist, and The Guardian). Still, an updated list of my RSS feed subscriptions could be interesting (I did write one 15 years ago, but it’s hopelessly out of date).
  • Lastly, Alan Kohler’s article on how Donald Trump has impacted the Australian federal election was a fantastic read.

The featured image at the top of the post is from a recent flight. I think the lights below are Midway Point and Sorell in Tasmania.

Hopefully I can do this more often!

My Vote in the Australian Federal Election 2025

I’m not one that usually shares my political views that openly. Generally, those close to me already know how I feel about things, and I don’t want to impose my views on others who probably don’t care. Those who are observant can probably pick it out from my Mastodon (and earlier, Twitter) reposts.

However, I feel a bit differently about the state of the world this year. And I’ve also reasoned with myself that I’m not going to tell anybody how to vote. But I will tell you who I’m going to vote for, why I’m going to vote for them, and why I’m telling you who I’m voting for.

I’m going to tackle that last point first. I’m well aware that as a mid-thirties straight white male living in the “global north” (a term I loathe with the power of a thousand suns, as a resident of Hobart and the Huon Valley the only place I’m north of is Antarctica) I have a lot of privilege in being able to share my views without placing myself in any danger. And I’d like to perhaps speak for others who aren’t quite so able to speak for themselves.

Secondly, who I’m going to vote for. It’s important to note that in Australia we have preferential voting, so you can put minor parties or candidates first, and go down the list in decreasing order of how much you want them to represent you until finally you end up at the party who you least want to represent you.

I said “want to represent” there, not “will be the best for me”. That’s critical. I’m already (relatively) well off. There are more important issues than my personal well being, and I believe that what’s good for society and the environment will be best for me in the end.

In my electorate of Franklin, there are five candidates (as I write this, anyway) and my ranking of them is as follows:

  1. Peter George, Independent
  2. Owen Fitzgerald, Greens
  3. Julie Collins, ALP
  4. Brendan Blomely, Independent
  5. Josh Garvin, Liberal
  6. Stefan Popescu, Pauline Hanson’s One Nation

“Five” candidates and yet the list has six? A demonstration of why, despite absolutely loving the Greens as a concept, they completely fail as a modern political party. This is basic stuff. Like white girl ordering pumpkin spice lattes kind of basic.

My first preference will be for Peter George. He’s running primarily on an anti-salmon farming platform, but has a complete policy platform that I quite like. And my take on the salmon farming issue? If you can’t run an industry for 100 or more years in the way that it’s currently being run, it’s an unsustainable industry. And we shouldn’t be taking from our children’s future just to make profits now. This is also why I’m opposed to generative AI / large language models (ChatGPT, Deepseek, etc) and cryptocurrency. Is there a way of running all of these industries in sustainable ways? Yes (although in the case of crypto I’m less sure). Are we doing so? No. So something needs to change.

My second preference will go to Julie Collins. Whilst I’d like the ALP to win the election, I believe that Julie Collins has been safe in her seat for far too long and is not representing or delivering results for the people of Franklin. She needs a scare, and I really hope that Peter George delivers her a scare (at the very least). I want to make her to work again.

My third preference will go to the Greens, but for what purpose I don’t know. But if I rank them below the others I couldn’t forgive myself.

After that it gets depressing. The Liberal party is probably more preferable to me than either One Nation or Brendan Blomely, but that’s hardly saying much. I have a lot of queer friends that I care about a lot, and any candidate that wants to make their lives harder is not a candidate for me. Then there’s the issue of migration. A lot of people are opposed to migration either because it’s “bad for the culture” or “increasing property prices”. On property prices, just change the law so only citizens and permanent residents (or companies majority owned by citizens and permanent residents) can own property, like most other countries do. Sorted. And on culture? The culture of Australia is by definition a multi-cultural one. My family are migrants, and just because I’m white doesn’t mean I should ignore that fact. Every single person in Australia either came from somewhere else or has ancestors who did. Every. Single. Person. Even the Aboriginal people.

That was a bit of a ramble.

I’ll be voting in the senate in a similar way to the house of representatives. Now that Eric Abetz is a member of the Tasmanian parliament rather than a senate candidate, I no longer feel compelled to vote below the line just to put him dead last, so I’ll be saving some time by voting above the line for the party groups.

Finally, I hope you can all join me watching the ABC election coverage on election night, for no other reason than that it is Antony Green’s last election. What a legendary man.

Photo of Antony Green from Wikipedia.

Integrating a Selectronic Solar Inverter with Home Assistant

As we all know, solar systems are all the rage these days (and for good reason, we’ve got to fix the climate somehow). We got a Selectronic-branded inverter and battery system installed at my family’s property a few years ago, and whilst the web portal provided by the manufacturer is fine, I’ve always wanted to integrate it with Home Assistant. Integration would allow me to use the Home Assistant Energy dashboard to view history, as well as automate a few things (primarily the hot water system and heat pump) based on battery levels.

My first attempt at this integration involved scraping the web portal using a .NET application and publishing the data via MQTT to the Mosquito broker inside Home Assistant. Whilst this was excellent experience in writing web scrapers and using MQTT, it turns out there is a much better way!

Home Assistant has in-built functionality to poll REST endpoints and parse the JSON it finds. And it also turns out Selectronic inverters have REST endpoints in their local controllers.

A screenshot of the 'RESTful' integration within Home Assistant.

Thanks to this post on the Home Assistant forums, I was able to put together some configuration to read my local controller and present the data as a bunch of sensors:

sensor:
  - platform: rest
    name: "selectronic"
    json_attributes_path: "$.items"
    json_attributes:
      - 'battery_in_wh_today'
      - 'battery_in_wh_total'   #
      - 'battery_out_wh_today'
      - 'battery_out_wh_total'  #
      - 'battery_soc'           #
      - 'battery_w'             #
      - 'fault_code'
      - 'fault_ts'
      - 'gen_status'
      - 'grid_in_wh_today'
      - 'grid_in_wh_total'      #
      - 'grid_out_wh_today'
      - 'grid_out_wh_total'     #
      - 'grid_w'                #
      - 'load_w'
      - 'load_wh_today'
      - 'load_wh_total'         #
      - 'shunt_w'
      - 'solar_wh_today'
      - 'solar_wh_total'        #
      - 'solarinverter_w'
      - 'timestamp'
    resource: "http://192.168.1.105/cgi-bin/solarmonweb/devices/BB9FDF8BB64FE24C7CD183FC75E64423/point"
    value_template: '{{ value_json.device.name }}'
    force_update: true
    
template:
  sensor:
    # Data from selectronic for long term statistics
    - name: "Selectronic - Battery State of Charge"
      device_class: battery
      state_class: measurement
      state: "{{(state_attr('sensor.selectronic', 'battery_soc')|float) | round(3)}}"
      unit_of_measurement: "%"
      unique_id: sensor.selectronic.battery_soc
      
    - name: "Selectronic - Battery Watts"
      device_class: power
      state_class: measurement
      state: "{{(state_attr('sensor.selectronic', 'battery_w')|float) | round(3)}}"
      unit_of_measurement: "w"
      unique_id: sensor.selectronic.battery_w
      
    - name: "Selectronic - Grid Watts"
      device_class: power
      state_class: measurement
      state: "{{(state_attr('sensor.selectronic', 'grid_w')|float) | round(3)}}"
      unit_of_measurement: "w"
      unique_id: sensor.selectronic.grid_w
      
    - name: "Selectronic - Load Watts"
      device_class: power
      state_class: measurement
      state: "{{(state_attr('sensor.selectronic', 'load_w')|float) | round(3)}}"
      unit_of_measurement: "w"
      unique_id: sensor.selectronic.load_w
      
    - name: "Selectronic - Solar Watts"
      device_class: power
      state_class: measurement
      state: "{{(state_attr('sensor.selectronic', 'solarinverter_w')|float) | round(3)}}"
      unit_of_measurement: "w"
      unique_id: sensor.selectronic.solarinverter_w
      
    - name: "Selectronic - Battery Out Total"
      device_class: energy
      state_class: total
      state: "{{(state_attr('sensor.selectronic', 'battery_out_wh_total')|float) | round(3)}}"
      unit_of_measurement: "kWh"
      unique_id: sensor.selectronic.battery_out_wh_total
        
    - name: "Selectronic - Battery In Total"
      device_class: energy
      state_class: total
      state: "{{(state_attr('sensor.selectronic', 'battery_in_wh_total')|float) | round(3)}}"
      unit_of_measurement: "kWh"
      unique_id: sensor.selectronic.battery_in_wh_total
        
    - name: "Selectronic - Load Usage Total"
      device_class: energy
      state_class: total
      state: "{{(state_attr('sensor.selectronic', 'load_wh_total')|float) | round(3)}}"
      unit_of_measurement: "kWh"
      unique_id: sensor.selectronic.load_wh_total
        
    - name: "Selectronic - Solar Production"
      device_class: energy
      state_class: total
      state: "{{(state_attr('sensor.selectronic', 'solar_wh_total')|float) | round(3)}}"
      unit_of_measurement: "kWh"
      unique_id: sensor.selectronic.solar_wh_total
      
    - name: "Selectronic - Grid In Total"
      device_class: energy
      state_class: total
      state: "{{(state_attr('sensor.selectronic', 'grid_in_wh_total')|float) | round(3)}}"
      unit_of_measurement: "kWh"
      unique_id: sensor.selectronic.grid_in_wh_total
      
    - name: "Selectronic - Grid Out Total"
      device_class: energy
      state_class: total
      state: "{{(state_attr('sensor.selectronic', 'grid_out_wh_total')|float) | round(3)}}"
      unit_of_measurement: "kWh"
      unique_id: sensor.selectronic.grid_out_wh_total

If you choose to use this configuration yourself, the only change that should be required is the URL endpoint. Change the IP address to that of your controller on your network, and the device ID will also need to be changed. You can find the correct device ID by viewing IPADDRESS/cgi-bin/solarmonweb/devices/ in your browser.

And voila, solar generation and power usage statistics!

Image