Choose your preferred language
Go to the explanation of all entities and the dashboard
Get your battery running locally in Home Assistant in just 2️⃣ simple steps.
Based on the zenSDK RESTful API for Home Assistant. This package connects locally to one Zendure Solarflow 2400 (AC, AC+ or AC Pro) / Zendure Solarflow 1600 AC+ / Zendure Solarflow 800 (Pro(2) or Plus) / Zendure Solarflow 3000 Mix AC+ / Zendure Solarflow 4000 Mix (AC+ or Pro). Perfect for anyone who wants to run their battery 100% local in Home Assistant. There are now 11 preconfigured modes — from relaxed solar-based usage to acting like an energy trader with dynamic pricing for a few extra cents.
Several integration add-ons are also available, including support for multiple inverters and older models such as the SolarFlow Hyper 2000. See Integration add-ons for a complete overview.
Do you find this project useful and want to support further development?
Buy me a coffee ☕️ and follow this GitHub repository ⭐⭐⭐.
- Homewizard P1 (or another home energy meter that provides per-second data (+watt import / -watt export)).
- One Solarflow 2400 (AC, AC+ or AC Pro) / Solarflow 1600 AC+ / Solarflow 800 (Pro(2) or Plus) / Solarflow 3000 Mix AC+ / Solarflow 4000 Mix (AC+ or Pro).
- Or mutiple identical inverters combined with the Node-RED proxy by Gast777
- Make sure HEMS is disabled in the Zendure app.
- Place Zendure_gielz1986_global.yaml from the GitHub packages folder into your Home Assistant
packagesfolder. If it does not exist, create it. - Create a backup of your
configuration.yaml. - Then edit your
configuration.yamland add the following:
homeassistant:
packages: !include_dir_named packages
![]() |
|---|
- Restart Home Assistant.
- Optionally create the plug-n-play dashboard Go to Plug-N-Play Dashboard. Or fill in the entities below in Home Assistant and restart again.
- Go to part 2 to not only read data but also use the battery with an single automation.
*plug-n-play dashboard
| Explanation per configuration item | |
|---|---|
| Configuration (Basic) | Information |
zendure_setting_ip_address |
e.g. 192.168.0.172 – Found in the Zendure app under device information. |
homewizard_setting_p1_ip_address |
e.g. 192.168.0.192 – Enable local API in the Homewizard app |
zendure_setting_standby_delay |
(Recommended: 15 minutes) 5–30 minutes – Defines how quickly the inverter goes into full standby at 0 activity. Prevents ~19W idle consumption. |
zendure_setting_set_default_settings |
Once the battery is running, you can use this to apply the recommended settings below. |
| Configuration (Charging) | Information |
zendure_setting_max_charge_power |
400–2400W – Maximum charging power (up to 7200W with multiple inverters via Node-RED). |
zendure_setting_start_charging_at |
(Recommended: -300W) -1000 to -80W – Defines when charging starts. |
zendure_setting_charge_buffer |
(Recommended: 50W) 0–250W – Determines how much less to include during charging. In summer you can increase this (e.g. 200W) to prevent daytime grid import. |
| Configuration (Discharging) | Information |
zendure_setting_max_discharge_power |
400–2400W – Maximum discharge power (up to 7200W with multiple inverters via Node-RED). |
zendure_setting_start_discharging_at |
(Recommended: 100W) 80–500W – Defines when discharging starts. |
zendure_setting_discharge_buffer |
(Recommended: 5W) 0–250W – Extra margin for discharging. |
| Configuration (State Of Charge) | Information |
zendure_setting_soc_protection_disabled |
Check this to disable the dual SOC protection. When the battery drops below the minimum allowed charge percentage, it will no longer automatically recharge. It will wait until the BMS (Battery Management System) takes action. |
zendure_setting_minimum_allowed_state_of_charge |
(Recommended: 10%) 5% to 50% – Set the minimum allowed state of charge percentage here. |
zendure_setting_maximum_allowed_state_of_charge |
(Recommended: 100%) 70% to 100% – Set the maximum allowed state of charge percentage here. At 100%, an SOC calibration is performed to accurately estimate the state of charge level. |
| Configuration (PV) | Information |
zendure_setting_pv_export_disabled |
Check this to disable the pv export. When the battery is full it will no longer export the energy of connected solarpanels. |
| Configuration (Optional) | Information |
home_energy_setting_meter_sensor |
e.g. sensor.custom_energy – Add your own home energy sensor (+watt import / -watt export). This will take priority. Go to WIKI) for P1/CT API's. |
zendure_setting_battery_order |
e.g. 1;5;3;4;2 – Manually define battery order based on serial numbers and physical stacking. |
| Configuration (Dynamic) | Information |
dynamic_setting_nordpool_sensor |
e.g. sensor.nordpool_kwh_nl_eur_3_09_0 – Your Nordpool (HACS) sensor. |
dynamic_export_correction |
Specify how many cents should be subtracted during export. This value is used in the spread calculation. |
dynamic_setting_minimal_spread |
e.g. 25% – Minimum price spread before dynamic charging/discharging activates. |
dynamic_setting_15_minute_interval |
Enable this if you want to use 15-minute intervals. |
| Configuration (Dashboard) | Information |
dashboard_setting_show_help |
Enable to show help text on the dashboard. |
dashboard_setting_show_pv |
Enable to show connected (offgrid/mppt) PV on the dashboard. |
dashboard_setting_show_dynamic |
Enable to show dynamic control on the dashboard. |
The engine of everything: it charges smartly, discharges smartly, and ensures everything works together. Choose from 11 different modes to make it behave exactly how you want.
If you didn’t change any entity names above, you can simply create this automation:
- Create a new automation.
- Click Edit in YAML.
- Paste the YAML code from Automation_global.yaml.
- Save and start the automation.
The moment has arrived: time for your battery to prove it’s more than just an expensive decoration with cables.
- Open the plug-n-play dashboard or add the entity Zendure Operation Mode.
- The mode will be set to Standby.
- Select your desired mode to activate the Zendure zenSDK (Gielz) automation.
- The battery will with the desired operation mode.

Go to the explanation of all modes
You can now also directly use a fully plug-n-play dashboard:
- Requires Apexcharts HACS and (optionally) Graphite HACS.
- Create a new empty dashboard via ⚙️ and go to Dashboards.
- Click Add Dashboard and choose New dashboard from scratch
- Open the new dashboard.
- Click on the 3 dots → Edit Dashboard.
- Click on the 3 dots → Raw configuration editor.
- Paste the YAML from Dashboard_global.yaml.
- Save — dashboard is ready to use.
- Go to the WIKI for explanation of all entities.
Several users have created additional code to integrate directly with this integration. They are listed below.
| Extra add-ons | Use case | Information |
|---|---|---|
| Node-RED proxy from @gast777 | Multiple inverters in use | Then you can expand this with this Node-RED proxy. This proxy ensures everything in this automation works seamlessly together, allowing multiple identical inverters to be controlled intelligently with optimal power distribution. |
| Node-RED proxy (Hyper 2000) from @twoenter | SolarFlow Hyper 2000 user | Then you can use this add-on to connect Zendure Home Assistant (MQTT/Cloud) through a Node-RED proxy and gain access to all the features of this integration. |



