Estimated reading time: 6 minutes
Table of contents
Two months of digital silence. You might think I’ve been relaxing, but the tangled mess of wires on my workbench tells a different story. I’ve been deep in the trenches of home energy management. This project started as a simple financial calculation and ended, as things usually do around here, in a mild obsession with Modbus register maps and working on AlphaESS Home Assistant integration.
About a year ago, I moved into a new home and immediately threw 15 solar panels (6300Wp) on the roof. At the time, I deliberately skipped the battery. In the Netherlands, the “Salderingsregeling” (net metering) effectively turned the national power grid into my free, infinite battery. Why pay for heavy lithium when the grid offsets your consumption one-on-one?
I chose an AlphaESS SMILE-G3 T10 hybrid inverter. The installer looked at me like I had two heads when I insisted on buying it without a battery. Apparently, I was their first “inverter-only” customer for that specific model. I stood my ground, betting that battery prices would drop within a year. After playing with Axel’s AlphaESS Home Assistant integration for a few months, and only seeing a nice curve early in the morning till mid about mid afternoon, I decided, August 2025 to be exact, to add another string of 10 solar panels (4500Wp) as solar panels were dirt cheap. This gives me an East-West orientation that provides a beautiful, wide generation curve from dawn until dusk.

The Motivation: When the “Free Battery” Breaks
A year passed and the math changed dramatically. Geopolitical conflicts sent energy prices spiraling, the Dutch government confirmed the abrupt end of net metering in 2027, and energy providers eagerly introduced “terugleverkosten” (feed-in fees).
Suddenly, my “free grid battery” was charging me for the privilege of storing my own power. I acted fast, secured a quote, and installed two 9.3kWh batteries. To squeeze every cent of ROI out of them, I switched my energy provider to Frank Energy. Unlike traditional providers, they offer dynamic pricing and support “Handel op de onbelansmarkt” (Imbalance Market Trading), and they claim to be able to work with my AlphaESS system (which I am keeping a very close eye on with the AlphaESS Home Assistant Integration…). This essentially lets my battery buy low and sell high automatically.
The Checklist for a Smart Energy Hub
Before touching a single YAML file, I defined what “perfect” looked like for this upgrade. As always, I have trust issues with the cloud:
- Cloud-Independent: Local control is mandatory. If the internet goes down, my house shouldn’t lose its intelligence.
- Market-Aware: Deep integration with Frank Energy’s dynamic rates.
- Granular Visibility: High-frequency data and dashboards for every power flow.
- HACS Ready: A clean Home Assistant integration that doesn’t feel like a duct-taped hack.
The Journey: Taming the AlphaESS Modbus Beast in Home Assistant
While Frank Energy’s “Zelfconsumptie plus” (Self-consumption Plus) is great on paper, the Stubborn Tinkerer in me wanted to see exactly what was happening under the hood. I started with the AlphaESS Home Assistant Integration from Axel’s excellent Modbus project from Hillview Lodge, but my SMILE-G3 T10 proved to be a different beast than the older generations.
The Troubleshooting Loop
The Symptom: I could read sensor data perfectly, but I had absolutely zero control over force-charge or discharge cycles via Home Assistant.
The Cause: The existing community Modbus templates used register maps for older AlphaESS hardware. The G3 T10 utilizes specific registers – like 0x0860 for charging periods and 0x0881 for active dispatch power – that weren’t fully implemented or correctly addressed for this model.
The Solution: I spent several late nights mapping Modbus registers manually. By cross-referencing technical PDFs and sniffing network traffic, I identified the correct 2-byte and 4-byte registers. I even had to account for varying scale factors, like the 0.01 precision required for the grid frequency at 0x041C.
The Implementation: AlphaESS, Home Assistant, YAMLs and Templates
The Modbus sensors in the AlphaESS Home Assistant integration are configured to pull directly from the inverter’s IP. To make the system actually usable, templates sensors are needed that link Home Assistant helpers to the Modbus registers. For example, uint32 for energy accumulation to prevent overflow issues and precise scaling needs to be applied for grid measurements.
# Excerpt from integration_alpha_ess.yaml
# Modbus sensor configuration
modbus:
- name: modbuspvsystem
type: tcp
host: !secret alphaess_modbus_host_ip
port: !secret alphaess_modbus_host_port
message_wait_milliseconds: 10 # Waittime between 2 messages
timeout: 10 # Timeout in seconds before connection is closed
delay: 1 # Delay in seconds at startup
# Definition of sensors
sensors:
# Measurements other
- name: AlphaESS Inverter Grid Frequency
unique_id: AlphaESS_Inverter_Grid_Frequency
slave: !secret alphaess_modbus_slaveId
address: 0x041C
data_type: uint16
unit_of_measurement: Hz
device_class: frequency
state_class: measurement
scan_interval: 30
scale: 0.01
precision: 2
To visualize the financial wins, I built a massive five-column dashboard, which is also using ApexCharts (not yet in the repo). It tracks the Battery State of Charge (SoC) against Frank Energy’s dynamic prices in real-time. Seeing the battery actively charge from the grid when prices plunge into the negative (yes, they actually pay you to take power!) is incredibly satisfying.
The Discovery: Not Reinventing the Wheel (Exactly)
Feeling like a bona fide Modbus wizard, I published my own public repository (ha-alphaess-modbus) to share my findings. I dropped a comment on Axel’s blog to thank him for the inspiration. I noted that I aimed to eventually turn my work into a proper HACS integration and wanted to make sure I wasn’t stepping on any toes.
Axel replied with a warm and incredibly helpful response. He pointed me to Senal (senalse/ha-alphaess-modbus), who had actually already done a lot of the heavy lifting for a HACS integration. Axel was already in the trenches helping him test it, and he suggested we combine our powers to create “the one and only” integration rather than having multiple people building their own things.
I had spent hours mapping registers that probably were already being baked into another integration. I really should have searched a bit better. It would have saved me a lot of time! 🙂
Final Thoughts
I might have spent a few hours reinventing a very sophisticated wheel, but I honestly don’t regret it. I now understand the battery logic and Modbus architecture of my home energy hub better than any manual could teach me. The stubborn tinkerer is satisfied.
Instead of splitting the community with competing repos, I am taking Axel up on his offer and teaming up with Senal. Combining our findings into one unified HACS integration is definitely better than going solo. The open-source community is a beautiful thing, but it’s a good reminder that sometimes you just need to look over the fence before you start digging your own hole!
Project Status: 🔋 Fully Automated & Local.
Next Up: Optimizing the imbalance trading logic for the upcoming winter.
Buy me a coffee 🙂
If you found this post helpful, informative, or if it saved or made you some money, consider buying me a coffee. Your support means a lot and motivates me to keep writing.
You can do so via bunq.me (bunq, iDeal, Bankcontact and Credit- or Debit cards) or PayPal (PayPal and Credit- or Debit cards). Thank you!
Disclaimer
The blog posts, guides, and scripts provided on this website are for informational and educational purposes only. They are provided “as is” and without any warranty of any kind, either express or implied, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.
By using the information or scripts from this blog, you agree that I am not liable for any direct, indirect, incidental, consequential, or any other damages or losses arising from the use of or inability to use the information, scripts, or instructions contained herein. You assume full responsibility for any and all risks associated with the use of this content.
The blog posts, guides, and pages may contain referral/affiliate links. If you make a purchase through these links, I may receive a commission at no additional cost to you.