Fox EVO 10-8-H modbus registers
Hi Folks,
Can anyone share with me the modbus registers for the 10-8-H EVO?
i am integrating to home assistant and given the super Foxess modbus integration doesn't yet support the model, I am going to fork and add the model myself.

many thanks in advance,
Re: Fox EVO 10-8-H modbus registers
That unfortunately is the big question, which spec is it following as there are 2 very different modbus spec and a number of hybrids in between.

I’ve just seen your post on github and I would say the easiest thing to try is to intercept an existing inverter profile and test with that, i’m guessing maybe the H1 G2 is the best starting point - you’ll find the inverter models are created in the custom_components/foxess_modbus/inverter_profiles.py so for example if the model name is H1-6.0-E-G2 then it will run the H1 G2 register set.

Your post says it’s reported the model name as 'EVO 10-8-H' so if want to test as an H1 G2 then edit line 270 which is

InverterModel.H1_G2, r"^H1-([\d\.]+)-E-G2", capacity_parser=CapacityParser.H1

And change it to catch that model name - something like this should do it.

InverterModel.H1_G2, r"^EVO ([\d\.]+)-8-H", capacity_parser=CapacityParser.H1

Then restart you HA and add the adapter again and hopefully you should get a reasonable amount working - any fine tuning can come after that.
Re: Fox EVO 10-8-H modbus registers
I did manage to get a copy of the modbus document from Fox - can share with anyone if required.
i have to admit - im going beyond my capability if im honest.
Re: Fox EVO 10-8-H modbus registers
I got my evo fully integrated in the end. Took quite some time and some gpt help!
I can share my entity_descriptions file that maps the registers if anybody is interested!
Energy dashboard in HA looks great!

I wet my back on advanced control with node red. For now the mode scheduler does what it needs to do to respect my IO go fixed night rate. And node red just controls the car charging.

System is great so far!

Still thinking to dynamically change Soc based on solar forecast to maximise savings but will be a project for January!

As said, let me know if anyone would like th evo integration python file.

Best
Adam
Re: Fox EVO 10-8-H modbus registers
Hi Adam,

I am getting my Fox EVO 10-8-H installed in the week beginning 5th Jan. I am very interested in what you have done and how you achieved it.

I would appreciate it if you could share your information.

Thanks

Brian
Re: Fox EVO 10-8-H modbus registers
Hi Brian.
I iterated through the modbus protocol that fox emailed to me.
Sorry for the late reply. I’ve been away for new year.
I’ll PM you today with the steps I took and share the python files I changed to get the integration to work.
Best
Adam
Re: Fox EVO 10-8-H modbus registers
Hi Brian,

all changes I made to the original modbus integration are here:
https://github.com/AdamNewberry/foxess_ ... /tree/main

i installed it via HA manually from my git fork download.

it went through all the normal setup steps like the official hacs version from nathan.

Adam
Re: Fox EVO 10-8-H modbus registers
Hi Adam,
Thank you in advance for the hard work tinkering. HACS won't allow me to download the modded version, any ideas: Downloading AdamNewberry/foxess_modbus_EVO with version d973b21 failed with (Could not download, see log for details)
Normal version works fine.... Sorry if i'm being a bit dim here.
Did you connect via a modbus adaptor or could you connect wirelessly via the IP of the DATA logger from the LAN option? Using the unmodified latest beta version of the standard Modbus integration doesn't work as it states the Evo isn't supported.
Thank you for any help, just got the Evo today :-)
Steve
Re: Fox EVO 10-8-H modbus registers
Hi Steve,
im no expert with github, how i installed mine was manually using the downloaded zip folder from git:

Code: Select all


---

## Install a Custom Home Assistant Integration from a ZIP (Manual Method)

1. **Download and unzip** the integration from GitHub.

2. Inside the unzipped files, locate the folder named after the integration (it must contain `manifest.json`).

3. Copy that folder into your Home Assistant config directory so the path is:

   ```
   /config/custom_components/integration_name/
   ```

4. If the `custom_components` folder does not exist, **create it**.

5. **Restart Home Assistant** (a full restart, not a reload).

6. Go to:

   ```
   Settings → Devices & Services → Add Integration
   ```

   and search for the integration name.

**Important:**
The folder containing `manifest.json` must be directly inside `custom_components` (not nested inside another folder).

---

If you want it even shorter or formatted for WhatsApp/Slack, say the word 👍
once you have added it you can just go to hacs and search for the integration - you should see it saying EVO support.
i also couldnt get it to work via custom repositories. - but i am no git expert and im sure i do something wrong there.

once you add it you should be able to config the integration fine (no inverter model not supported error).
Re: Fox EVO 10-8-H modbus registers
I connect using a elfin wifi modbus adapter.
Re: Fox EVO 10-8-H modbus registers
Hi Adam,

I've downloaded the zip file>extracted> copied the foxess_modbus folder and put it into: Home assitant/custom_components:
modbus in cust.png
modbus in cust.png (14.02 KiB) Viewed 366 times
I then restart but it doesn't show up in the downloaded (available) in HACS.
If I try to instal the integration through the normal integrations page I can select it to setup as a new integration but then it fails with an error Config flow could not be loaded: {"message":"Invalid handler specified"}:
error.png
i'm obviously doing something wrong :-(
Thought I would try and succeeding at this before buying the modbus adaptor.
Re: Fox EVO 10-8-H modbus registers
hi Steve,
maybe i made a mistake - if you manually install the folder, dont look in HACS, rather just go to add the integration on setting>devices and service page.sorry for that confusion. if thats not working, I'm running fully on GPT at this point:

Code: Select all

That **“Invalid handler specified”** almost always happens when Home Assistant **can’t find the integration’s domain in `/custom_components`** (usually because the folder got copied in the wrong place / wrong name / nested too deep).

In your fork, the integration lives under a `custom_components` folder in the repo. ([GitHub][1])
So your friend needs to copy **only the integration folder inside that**, not the whole repo.

## What to tell your friend to do

1. **Remove any existing install first (important)**

* If they already installed Nathan’s original via HACS or manual, delete it from:

  * `/config/custom_components/foxess_modbus` (or whatever folder it used)
* Restart Home Assistant once.

2. **Copy the right folder (most important bit)**
   After unzipping your GitHub ZIP, they must end up with:

```
/config/custom_components/foxess_modbus/manifest.json
```

**Not:**

* `/config/custom_components/foxess_modbus_EVO/...`
* `/config/custom_components/foxess_modbus_EVO-main/custom_components/foxess_modbus/...`

That nesting is the #1 cause of this exact error.

3. **Restart Home Assistant (full restart)**
   Settings → System → Restart

4. If it still errors, check logs
   Settings → System → Logs
   Look for lines mentioning `foxess_modbus` / `custom_components` (this will reveal missing dependency / import error, etc.).

---

### Why this is especially likely here

Your repo is a fork of `nathanmarlor/foxess_modbus` ([GitHub][1]), so the integration **domain is almost certainly still `foxess_modbus`**. If your friend renamed the folder to something like `foxess_modbus_EVO`, Home Assistant will try to start the config flow using the domain from the UI, won’t find the right handler, and you get **Invalid handler specified**.

If you want, paste your `custom_components/.../manifest.json` (just the JSON) and I’ll tell you the exact **domain** name your friend’s folder must use.

[1]: https://github.com/AdamNewberry/foxess_modbus_EVO/tree/main "GitHub - AdamNewberry/foxess_modbus_EVO: FoxESS inverter integration with Fox EVO support. Connect directly to your FoxESS inverter (no cloud!) for real-time status and control."

Perfect — thanks, that confirms it 👍
Your `manifest.json` is **correct** and **not the problem**.

Given this manifest, the error **must** be one of the following **three concrete causes** (in order of likelihood):

---

## ✅ What *must* be true for this to work

### 1️⃣ Folder name **must be exactly** `foxess_modbus`

Because:

```json
"domain": "foxess_modbus"
```

Your friend **must have**:

```
/config/custom_components/foxess_modbus/manifest.json
```

❌ Any of these will cause **Invalid handler specified**:

```
/config/custom_components/foxess_modbus_EVO/
/config/custom_components/foxess_modbus-main/
/config/custom_components/foxess_modbus_EVO-main/custom_components/foxess_modbus/
```

This is the **single most common cause** of this error.

---

### 2️⃣ The integration is loading, but `config_flow.py` is missing or broken

Because you have:

```json
"config_flow": true
```

Home Assistant expects:

```
/config/custom_components/foxess_modbus/config_flow.py
```

If:

* the file is missing
* renamed
* has a Python error
* imports something that fails

→ HA cannot register the config flow handler
→ **Invalid handler specified**

📌 Ask your friend to check **Logs** immediately after restart:

```
Settings → System → Logs
```

They should see an error mentioning `foxess_modbus`.

---

### 3️⃣ There is a **domain collision** with an existing FoxESS install

If your friend previously installed:

* Nathan’s original via **HACS**
* or a previous manual install

Then HA may be loading the wrong version or failing silently.

**Fix sequence (important):**

1. Delete **all** FoxESS folders under:

   ```
   /config/custom_components/
   ```
2. Uninstall from HACS if present
3. Restart Home Assistant
4. Install **only your fork**
5. Restart again

---

## 🔎 One very fast sanity test

Tell your friend to temporarily rename the folder to something wrong, like:

```
foxess_modbus_test
```

Restart HA → the integration should **not appear at all**.

Rename it back to:

```
foxess_modbus
```

Restart → it **should appear**.

If it appears but errors when clicked → it’s **100% a config_flow.py error**.

---

## 🧠 Most likely root cause (based on your repo)

Because your repo structure is:

```
foxess_modbus_EVO/
└── custom_components/
    └── foxess_modbus/
```

Your friend almost certainly copied **the repo root** instead of the inner `foxess_modbus` folder.

---

## ✅ The exact instruction to give your friend

> Copy **only** the `foxess_modbus` folder from inside the repo’s `custom_components` directory into:
>
> ```
> /config/custom_components/foxess_modbus
> ```
>
> Then restart Home Assistant.

---

If after that it *still* fails, paste the **first foxess_modbus error from the HA logs**, and I’ll pinpoint the exact line in your fork that’s breaking the config flow.

Re: Fox EVO 10-8-H modbus registers
Thank you, yeah, that's what I tried to do 🙁 I'll have to put the hours in to try and get it working 🤣
Re: Fox EVO 10-8-H modbus registers
I did add a pull request on GitHub for Nathan to integrate my changes to get the evo fully supported. Hopefully he reviews it and adds it soon!
Re: Fox EVO 10-8-H modbus registers
Awesome. Hopefully they'll update.
I've got an elfin on route, can I ask how you powered yours please? what pins did you connect for power or did you use the USB port?
Thank you again for all your input 🙂
Re: Fox EVO 10-8-H modbus registers
Steve / Adam - could you please point me to which specific adpater you've purchased? I'd rather order one that I know works :)
Re: Fox EVO 10-8-H modbus registers
Also.. does the EVO have a built in Modbus server by any chance? I'm able to get a connection over port 502 to the inverter IP address on Wifi , but it quickly errors out.
Re: Fox EVO 10-8-H modbus registers
I've just bought the following but it obviously hasn't arrived yet...

https://www.aliexpress.com/item/1005006 ... 25170e93a2

Going from a youtube video from will, once the modbus integration is updated and the actually evo unit I reckon we'll be able to connect directly with wireless connection (selecting language connection method) using the IP address.... it can see it but currently says the evo isn't supported.

Who knows how long the updates will take though....
Re: Fox EVO 10-8-H modbus registers
*Selecting LAN (not language)
Re: Fox EVO 10-8-H modbus registers
Ok so it appears right now the Modbus over WLAN directly to the EVO is limited to reading some registers. Can’t make any changes. If you want to give it a go just using the standard HA Modbus integration, I can paste the YAML code for it here later.
Re: Fox EVO 10-8-H modbus registers
Interesting, which version of the modbus integration are you using for that? I tried a few including the v1.14.0b3 pre release and could only get the following:
Screenshot_20260110_151957_Home Assistant.jpg
Re: Fox EVO 10-8-H modbus registers
I’m not using the Fox ESS Modbus integration. There’s a generic Modbus integration available on the HA store which needs to be set up via the configuration yaml
Re: Fox EVO 10-8-H modbus registers
Which generic modbus integration are you using please?
Any helpful yaml you could post would also be greatly appreciated.
Re: Fox EVO 10-8-H modbus registers
Start with adding these lines to the bottom of your configuration.yaml

# FoxESS Modbus TCP over the Fox Wi-Fi adapter (port 502)
modbus:
- name: foxess
type: tcp
host: <your IP address>
port: 502
timeout: 5
message_wait_milliseconds: 50

sensors:
# ========= System =========
- name: "Fox System SoC"
slave: 247
address: 39423
input_type: holding
data_type: uint16
unit_of_measurement: "%"
scan_interval: 1

# ========= PV (PV1 examples) =========
- name: "Fox PV1 Voltage"
slave: 247
address: 39070
input_type: holding
data_type: int16
unit_of_measurement: "V"
scale: 0.1
scan_interval: 1

- name: "Fox PV1 Current"
slave: 247
address: 39071
input_type: holding
data_type: int16
unit_of_measurement: "A"
scale: 0.01
scan_interval: 1

# Total PV input power (Fox doc: kW with gain 1000)
- name: "Fox Total PV Input Power"
slave: 247
address: 39118
input_type: holding
data_type: int32
unit_of_measurement: "kW"
scale: 0.001
scan_interval: 1

- name: "Fox PV1 Power Raw"
slave: 247
address: 39279
input_type: holding
data_type: int32
unit_of_measurement: "W"
scan_interval: 1

- name: "Fox PV2 Power Raw"
slave: 247
address: 39281
input_type: holding
data_type: int32
unit_of_measurement: "W"
scan_interval: 1

# ========= Grid / meter =========
# Active power. Fox sign convention: >0 export to grid, <0 import from grid
- name: "Fox Grid Power (Import/Export)"
slave: 247
address: 39168
input_type: holding
data_type: int32
unit_of_measurement: "W"
scan_interval: 1

# ========= Battery =========
- name: "Fox Battery Power (Combined)"
slave: 247
address: 39237
input_type: holding
data_type: int32
unit_of_measurement: "W"
scan_interval: 1

# ========= Energy counters (slow poll) =========
# PV energy
- name: "Fox Total PV Energy"
slave: 247
address: 39601
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox PV Energy Today"
slave: 247
address: 39603
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

# Battery energy (recommended for Energy Dashboard battery flows)
- name: "Fox Total Battery Charge Energy"
slave: 247
address: 39605
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox Battery Charge Energy Today"
slave: 247
address: 39607
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox Total Battery Discharge Energy"
slave: 247
address: 39609
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox Battery Discharge Energy Today"
slave: 247
address: 39611
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

# Grid import/export totals for Energy Dashboard (CORRECTED)
- name: "Fox Total Grid Export Energy"
slave: 247
address: 39613
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox Grid Export Energy Today"
slave: 247
address: 39615
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox Total Grid Import Energy"
slave: 247
address: 39617
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30

- name: "Fox Grid Import Energy Today"
slave: 247
address: 39619
input_type: holding
data_type: uint32
unit_of_measurement: "kWh"
scale: 0.01
scan_interval: 30
# ========= House load (real-time) =========
- name: "Fox House Load Power (Combined)"
slave: 247
address: 39225
input_type: holding
data_type: int32
unit_of_measurement: "W"
scan_interval: 1
# ========= Battery temperature (BMS) =========
- name: "Fox Battery Temperature (BMS1 Ambient)"
slave: 247
address: 37611
input_type: holding
data_type: int16
unit_of_measurement: "°C"
scale: 0.1
scan_interval: 5
# ===== Battery cell temperatures (BMS1) =====
- name: "Fox Battery Max Cell Temp"
slave: 247
address: 37617
input_type: holding
data_type: int16
unit_of_measurement: "°C"
scale: 0.1
scan_interval: 5

- name: "Fox Battery Min Cell Temp"
slave: 247
address: 37618
input_type: holding
data_type: int16
unit_of_measurement: "°C"
scale: 0.1
scan_interval: 5
Re: Fox EVO 10-8-H modbus registers
If you plug that code into ChatGPT, after uploading the attached PDF file, then ask it to update the code for the sensors you need, it’ll spit out more.
Attachments:
Post Reply