Controlling a home battery: what each brand lets you read, and what it lets you write
Almost every home battery lets you watch. A much smaller number lets you change anything. This is the full dossier behind the video: the endpoint or register per brand, the firmware version it applies to, the verification date, and the arithmetic that shows why an 800-watt setpoint rarely pulls 800 watts out of your battery.
In this article15
- Key takeaways
- Control is two questions, not one
- The brand column
- Victron is the benchmark, and its register number is version-bound
- What a setpoint actually measures
- The control is not where you go looking for it
- The generation pattern: the model beats the brand
- What it costs, in euros and in hours
- Two outages that are not the same thing
- Four questions to ask the documentation before you buy
- What is deliberately not in here
- Frequently asked questions
- The video
- Transparency
- Sources
Jay's Desk
TL;DR
One line in a terminal, enter, and a relay clicks inside the inverter. The battery starts discharging while the app on the phone stays closed.
That box worth thousands of euros is called your battery. Who operates the controls appears on no product page.
The video spends fourteen minutes on why that matters. This article is the documentation underneath it: the endpoint or register number per brand, the firmware version that number applies to, the date it was checked, and the two calculations that do not fit in a video. If you never watch the video, you miss nothing here.
One thing up front, because it shapes how you read the rest. This is not about which battery is best. It is about the question almost nobody asks before buying: am I allowed to command this thing a power level, or may I only pick from a list somebody else wrote?
Key takeaways
- Open does not mean on. Victron publishes its complete register list and ships with Modbus TCP switched off. Sessy has a documented Open mode, but a setpoint you write does nothing while the unit is not in API mode.
- Reading and writing are two different rights. Almost every brand lets you read the state. The number of brands that let you write a power level in watts is considerably smaller.
- A mode is not a power level. HomeWizard is the sharpest example: four modes, no watts. And the endpoint sits on the meter, not on the battery.
- The brand tells you less than the model. Zendure, Anker SOLIX and Marstek all three split between older and newer hardware. "Does brand X support local control" therefore has no answer.
- A register number is not a constant. Victron moved the grid setpoint register from 2700 to 2716+2717 as of Venus version 3.50. Using the old number writes to a register that wears out the GX device's flash faster.
- A setpoint of โ800 W rarely pulls 800 W from your battery. The measuring point is the grid connection, not the inverter. Your house load stacks on top.
- Local control survives an internet outage, not a power outage. Those are two different failures and they get confused constantly.
โน๏ธInfo
This article accompanies the video "Who gets to control your home battery?" on Jay's Desk. The video has to keep pace, so it names no register numbers, no firmware thresholds and no verification dates. Those are here. Every figure below carries a source and a date, and where a claim is only half solid, that is stated next to it rather than buried under it.
Control is two questions, not one
Almost every conversation on this topic stalls because "control" means two things at once. Pulled apart, they are two questions, and each brand answers them differently.
The first question is reading versus writing. You can see what the device is doing, versus: you can tell the device what to do. An API that only returns state of charge, power and voltage is a window. Useful for a dashboard, worthless for a strategy. Nearly every manufacturer gives you that window, because it costs them nothing and it looks good on the box.
The second question is a mode versus a power level. Picking a mode means choosing from a list the manufacturer wrote. Zero on the meter. Charge to full. Standby. Writing a power level means eight hundred watts, now, in that direction. The first is a choice inside somebody else's plan; the second is a plan of your own.
Those two questions are independent, which is exactly why "does this brand have an API?" is the wrong question. A brand can have beautifully documented API that only lets you read. Another can allow writing, but only a mode.
The brand column
This table is why the article exists. Four states, not three, because "works but is not supported" is a different reality from "open".
| Brand | State | Why | Confidence |
|---|---|---|---|
| Victron | Open | Official register list, writing supported; disabled by default | Verified 23-08-2026 |
| Sessy | Open | Open mode as a product feature, OpenAPI spec, setpoint in watts | Verified 11-08-2026 |
| Anker SOLIX | Open on the newer models | Its own official Home Assistant integration, local, mode and power setpoint | Verified 11-08-2026 |
| Zendure | Open on the newer generation | zenSDK, local REST, read and write; older generation via MQTT and cloud | Verified 08-08-2026 |
| Marstek | Works, not supported | Port 502 from firmware V144, Venus E v3 only; registers reverse-engineered by the community | Partial |
| HomeWizard | Half | Mode only, no watts; endpoint sits on the meter | Verified 08-08-2026 |
| EcoFlow | Half | Official developer API, but cloud-bound; no offline control | Verified 11-08-2026 |
| Sigenergy | Half | Modbus present, writing off by default, installer lock | Partial |
โ ๏ธWarning
This table expires. Compatibility shifts every quarter and sometimes inside a fortnight: Marstek went from "only through an RS485 bridge" to "native Modbus TCP on port 502" in fourteen days. The verification date in the last column is not decoration. If it is more than three months old, check with the manufacturer yourself before buying on it.
Victron is the benchmark, and its register number is version-bound
Victron is the only vendor in this research that publishes the register list itself and officially supports writing. That is why it heads the list, and why the trap underneath it is worth spelling out.
Modbus TCP is off by default. You enable it under Settings โ Services โ Modbus-TCP. Available devices and addresses live under Available services and on the Unit ID mapping tab of the Modbus TCP spreadsheet. The unit is watts: positive means drawing from the grid, negative means feeding back.
The grid setpoint register has moved.
| Venus version | Register | Name |
|---|---|---|
| 3.50 and later โ use this | 2716 + 2717 (32-bit) | Grid power setpoint |
| before 3.50 | 2700 (16-bit, โ32768โฆ32767 W) or 2703 (scale factor 0.01) | Hub4 grid target |
2716 + 2717
Victron's 32-bit grid setpoint register from Venus version 3.50 onward; before that it was 2700 or 2703
Bron: Victron GX Modbus-TCP Manual, checked 23-08-2026
Victron on why the number matters: "it is recommended that future implementations use the 32-bit setting at registers 2716 and 2717 to avoid constantly logging the new setpoint to VRM, and wearing the flash on the GX-device with repeated writes." Register 2700 still works. It is the old road, and it wears the flash.
The lesson is wider than Victron, and it is why every line in this article carries a date: a register number, an endpoint or a field name is not a constant. It belongs to a firmware version. Our own fact sheet recorded 2700 as the register without a version next to it, so there was no way to see it had expired.
What a setpoint actually measures
Here is the calculation a video cannot carry, and it is the mistake I made myself.
My assumption was: write โ800 W and eight hundred watts flow into the house. You are pulling from the battery, so it goes to your appliances. That is wrong.
The measuring point is the grid connection, not the inverter. The setpoint controls the power flowing through the grid meter. Victron on ESS mode 3, verbatim: "When set to -400W, it will feed 400W back through its input. This energy will be taken from the battery. If there is also a 200W AC load connected to AC output the total energy taken from the battery will be 600W." And on mode 1: "the ESS control system tries to keep the power flowing through the grid meter at 0 Watt."
Worked out for an ordinary household:
| What you write | House load at that moment | What the battery delivers | What goes to the grid |
|---|---|---|---|
| โ800 W | 0 W | 800 W | 800 W |
| โ800 W | 200 W | 1,000 W | 800 W |
| โ800 W | 900 W | 1,700 W | 800 W |
| 0 W (zero on the meter) | 200 W | 200 W | 0 W |
So the battery discharges harder the more your house consumes, while the number you wrote never changes. Set a setpoint close to the maximum discharge rate, then start the dishwasher, and you hit a limit that was not in your own arithmetic.
One more detail belongs here. The default is +50 W, a deliberate dead band that keeps the system drawing slightly so it never accidentally feeds back.
The control is not where you go looking for it
Two brands show that "where does the API live" is a real question rather than a formality.
HomeWizard puts the endpoint on the meter. The manufacturer warns about it directly: "Despite its name, the /api/batteries endpoint is available on the P1 Meter and kWh Meter." No meter means no local control, whatever the battery looks like. And what you can push through it is a mode: zero (zero on the meter, the default), to_full, plus standby and predictive, both marked legacy. Four modes, no watts.
Sessy does let you write a power level, and even so a setpoint alone is not enough. Open mode is a named product feature with its own page. The documentation lives on the device's own IP address with /api appended, and there is a downloadable OpenAPI spec. Authentication is basic auth using the username and password on the sticker. Setpoint convention: negative charges, positive discharges, between the unit's minimum and maximum power.
The nuance that gets lost everywhere: a setpoint does nothing while the Sessy sits in NOM mode, or in any mode other than API. So even with the most open brand it is pick a mode first, then write a power level. Mode and watts are not opposites. They are two steps.
Zendure goes through a local REST API called zenSDK: GET /properties/report to read, POST /properties/write to write, mDNS for discovery, entirely on your own network. You enable it in the app first: add HEMS, then close the app.
502
the default Modbus TCP port on Anker SOLIX, Marstek and Victron alike. Same number, three different sets of conditions to get it open
Bron: Anker's official HA integration, accessed 11-08-2026
The generation pattern: the model beats the brand
Of everything above, this observation ages the slowest, and that is why it carries the article.
Three brands all split at the model level rather than the brand level:
- Zendure. zenSDK runs on the newer generation (SolarFlow 800 / Plus / Pro, 1600 AC+, 2400 AC / AC+ / Pro, SmartMeter3CT). The older devices (Hyper 2000, Hub 1200, Hub 2000, Ace 1500) run over MQTT, by default to Zendure's cloud broker.
- Anker SOLIX. The official integration is published by Anker itself and runs locally over port 502, refreshing every five seconds, with both mode and power setpoint. Supported hardware includes the Solarbank 4 E5000 Pro and the Solarbank Max AC. For the Solarbank 2 and 3, local Modbus control is still an open request in Anker's own issue tracker.
- Marstek. Port 502 opens from firmware V144, plus a factory reset (hold the power button for ten seconds), and only on the Venus E v3 over an Ethernet cable. The v1 and v2 still need the RS485-to-TCP bridge.
5 seconds
refresh rate of Anker's own local Home Assistant integration. No cloud server, no API key, everything on the LAN
Bron: anker-charging/ha-anker-solix-official, accessed 11-08-2026
"Does brand X support local control" is therefore not a question with an answer. The model number decides, and with Marstek the firmware version gets a vote too.
Marstek is the fourth state
Marstek deserves its own section, because it is the clearest example of something none of the three usual labels covers.
What is confirmed: several independent sources report the same thing about port 502, firmware V144 and the factory reset: German, Dutch, two forums and two GitHub repositories. Only one simultaneous Modbus TCP connection is possible, so your dashboard and your automation fight over the same socket.
What is not confirmed, and weighs more than expected: there is no public official register list. The registers were reverse-engineered by the community, among them 32100 through 32104 for voltage, current, power and state of charge. Marstek Netherlands does not list local control as officially supported in its own FAQ; the Home Assistant integration is a workaround.
That is more precise than "Marstek has Modbus" and more honest than "Marstek is closed". It works, and officially it does not exist.
โ ๏ธWarning
There is a thread in the Home Assistant community titled forced discharge commands do not seem to work about the Venus E3. One thread is a signal, not a pattern. I mention it because you will run into it, not because it is proven. We have not reproduced it ourselves.
What it costs, in euros and in hours
The cheapest route in euros is the most expensive in hours. That is a trade-off rather than a ratio: the euro side is solid, the hours side has never been measured.
| Route | Cost | What you get |
|---|---|---|
| The manufacturer's app | โฌ 0 | Pick a mode, inside somebody else's plan |
| Bliq Powerflow | โฌ 7โ12 per month, incl. SIM data plan, cancel monthly | Four algorithms in the app: solar charging, optimised charging, dynamic trading, imbalance trading |
| Home Battery Control | โฌ 0, open source | Self-consumption, dynamic prices, solar only or a schedule, via Home Assistant and Node-RED |
| Building it yourself on Modbus or REST | โฌ 0 in software, โฌ 50โ150 for a P1 meter | Everything the device permits, plus the maintenance of it |
โฌ 7โ12 / month
Bliq Powerflow, including a built-in SIM data plan and cancellable monthly. The price tag on somebody else's strategy running on your hardware
Bron: bliq.energy, accessed 11-08-2026
Two caveats on that table, and both are too important for a footnote.
Bliq Powerflow is the software that comes with the Bliq battery. A commercial knowledge base presents it as an external solution that works with BYD, Huawei and SolarEdge. The manufacturer itself presents it as the software belonging to its own product, shipped with its own energy manager and SIM data plan; the compatibility claim is about inverter brands, not about other companies' batteries. I follow the manufacturer, being the heavier source here. If you want a brand-independent example: Home Battery Control, free, broad across RS485 and Modbus.
Not every P1 meter gives you local access. "Buy a P1 meter and you are in" does not follow. Some P1 meters only report to their own manufacturer's app and expose no open local endpoint. The HomeWizard P1 does expose one; that is the one we own. Check before buying whether that specific meter has a documented local API.
Two outages that are not the same thing
This was wrong in our own script until recently, so it appears here with the correction attached.
During an internet outage, local control keeps working. There was no server in the path, so your schedule runs on.
During a power outage, nothing works. The P1 meter has no power, so there is no measurement. And without a transfer switch, an ATS, your house does not run off the battery at all, however full it is. Backup power is a different device and a different topic.
Four questions to ask the documentation before you buy
๐กTip
Ask these four questions of the documentation, not of the salesperson. A salesperson says "yes, there is an API". The documentation says what you may do with it.
- May I write, or only read? Look for an endpoint or register containing setpoint, write or target. If all you find is
report,statusorGET, it is a window. - Can I set a power level, or only pick a mode? Look for a unit. If it says W or watts, you get to do arithmetic. If it is only a list of words, you are choosing inside somebody else's plan.
- Does it work without a cloud connection? Look for an IP address or a
.localname in the examples. If you see a manufacturer domain, it needs internet. - Does this apply to my model and my firmware? Look for a version number next to the endpoint or register. If there is no version, assume the number can expire.
And one question for yourself, which no documentation answers: how many hours are you willing to spend on this, every quarter, when a firmware update moves a register?
What is deliberately not in here
This section belongs in the article, because the omitted claims say as much as the included ones.
- Which energy suppliers offer control, and what exactly they control. There is a layer where your supplier steers your battery, and for many households that is the practical route. I do not have a per-supplier overview with public sources attached, so no supplier names carry claims here. That survey is the next research round: Zonneplan, Eneco, Essent, Vandebron, Budget Energie and the rest, recording per company whether the customer may set a power level or may only opt in.
- One brand with registers "on request only". Cut. A single source, and it was a blog rather than manufacturer documentation. Sigenergy covers the same nuance on firmer ground.
- The exact body of a write command. The endpoints above come from manufacturer documentation. The field names inside the body could not be confirmed from a primary source, so they are not printed. Run the command against your own unit before building on it.
- How many hours a self-built setup costs. No time-tracking exists for a Modbus integration. "Cheap in euros, expensive in hours" is a direction, not a ratio, and that is how it is written.
- Re-checking Sigenergy. The brand column entry comes from our own knowledge base, recorded for the SigenStor, Sigen PV and Sigen Hybrid, and not for the SigenMate. It was not re-verified against a source this round.
Frequently asked questions
Veelgestelde vragen
How do I control my home battery with Home Assistant?+
That depends on your brand and model, not on Home Assistant. Anker SOLIX has its own official integration running locally over Modbus TCP on port 502, with both mode and power setpoint. Victron goes through Modbus TCP, which you must enable yourself under Settings, Services, Modbus-TCP. Sessy uses its local REST API with basic auth. Zendure has zenSDK on the newer generation. Marstek works through a community integration on port 502 from firmware V144, without an official register list. Always check first whether your specific model appears in the supported list.
Can I control my home battery myself without a subscription?+
Yes, if your device permits writing. Home Battery Control is open source, costs nothing and runs on Home Assistant plus Node-RED; it was built primarily for the Marstek Venus series but works more broadly over RS485 and Modbus. Building on your brand's own API or Modbus registers also costs nothing in software. What it does cost is a P1 meter at fifty to a hundred and fifty euros, and your own time, including after every firmware update.
What is the difference between a mode and a power level on a home battery?+
A mode is a choice from a list the manufacturer wrote: zero on the meter, charge to full, standby. A power level is a number in watts that you decide. HomeWizard is the clearest example of mode without watts: four modes through the /api/batteries endpoint, and no way to command eight hundred watts yourself. Sessy and Victron do let you write a power level. The distinction matters more than whether a brand 'has an API', because almost every brand does.
Can I control my home battery with a P1 meter?+
Sometimes, and the meter decides. With HomeWizard the control endpoint actually sits on the meter rather than the battery: without a P1 or kWh meter there is no local control at all. But not every P1 meter exposes an open local API. Some only report to their own manufacturer's app. Check before buying whether that specific meter has a documented local endpoint.
Which Modbus register controls a Victron system?+
From Venus version 3.50 onward it is the 32-bit register pair 2716 and 2717, 'Grid power setpoint', in watts: positive means drawing from the grid, negative means feeding back. Before 3.50 it was register 2700 (16-bit) or 2703 (with a 0.01 scale factor), then called 'Hub4 grid target'. 2700 still works, but Victron recommends 2716 and 2717 because repeated writes to the old register wear out the GX device's flash. Modbus TCP is off by default.
Why does my battery discharge harder than the setpoint I configured?+
Because the measuring point is the grid connection, not the inverter. A setpoint of minus eight hundred watts means eight hundred watts to the grid, on top of whatever your house is consuming at that moment. With 200 watts of house load running, the battery delivers 1,000 watts. Victron describes exactly this for ESS mode 3. So when you model your own schedule, house load belongs inside the equation, not beside it.
Does an open API mean I can control my battery?+
No, and that is the core of it. Victron publishes its complete register list and ships Modbus TCP switched off, so you have to enable it. Sessy has a documented Open mode, but a setpoint you write does nothing while the unit sits in NOM mode instead of API mode. EcoFlow has an official developer API that runs exclusively through the cloud, so without internet there is no control. Open, on, and local are three different things.
Does Marstek officially support local control?+
No. It works: port 502 opens from firmware V144 after a factory reset, on the Venus E v3 over Ethernet, with one simultaneous connection. But there is no public official register list; the registers were reverse-engineered by the community, among them 32100 to 32104. Marstek Netherlands does not list local control as officially supported in its own FAQ. That makes it a fourth state alongside open, half and closed: working, but without warranty and without support.
Will my battery control keep working if the internet drops?+
During an internet outage, yes, provided your route is local: there is no server in the path. On a cloud-bound route such as EcoFlow's developer API, no. And during a power outage nothing works at all, because the P1 meter has no power and without a transfer switch your house does not run off the battery anyway. Those are two different failures.
Does my brand support control? I keep finding contradictory information.+
Probably because the brand is not the unit in which the answer exists. Zendure, Anker SOLIX and Marstek all three split between older and newer hardware: zenSDK runs on the newer Zendure generation and not on the Hyper 2000 or Hub 1200, Anker's integration covers the Solarbank 4 E5000 Pro among others but not yet the Solarbank 2 and 3, and Marstek only works on the Venus E v3 from V144. So search on your model number and firmware version, not on the brand name.
The video
The accessible version of this story is on Jay's Desk: who actually gets to control your battery, in fourteen minutes, with the terminal on screen and the relay clicking.
This article is the complete version: every register with its firmware threshold, every endpoint with its condition, the arithmetic behind the setpoint, and the verification date per brand.
Transparency
No sponsorship, no affiliate links, no brand preference. Nothing was lent, given or paid for this video or this article. The Zendure units used as an example come from a closed collaboration dating to the ThuisbatterijNederland period; there is no payment and no arrangement in place.
Where a figure comes from a manufacturer, that is stated. Where two sources contradict each other, both appear. Where a number needs a firmware version or a measurement date to be true, it is attached.
Sources
Bronnen
- [1]Victron โ GX Modbus-TCP Manual / FAQOfficial manual. Modbus TCP off by default, Unit ID mapping, unit in watts. Accessed 11-08-2026.
- [2]Victron โ ESS mode 2 & 3Source for the register move to 2716+2717 from Venus 3.50, and for the -400W plus 200W house load quote. Checked 23-08-2026.
- [3]Victron โ technical information and downloads (register list xlsx)The register list itself. Accessed 11-08-2026.
- [4]Victron Community โ controlling an ESS system over Modbus TCPDutch-language practitioner thread. Accessed 11-08-2026.
- [5]anker-charging/ha-anker-solix-official (GitHub)Anker's own integration. Local Modbus TCP on port 502, 5-second refresh, mode and power setpoint. Accessed 11-08-2026.
- [6]Issue #39 โ request for local Modbus on Solarbank 2 and 3The open status for the Solarbank 2 and 3. Accessed 11-08-2026.
- [7]Sessy โ About Open modeManufacturer. Open mode as a named product feature. Accessed 11-08-2026.
- [8]Sessy Forum โ OpenAPI specificationOfficial forum. Downloadable spec, basic auth with the sticker credentials, negative setpoint charges. Accessed 11-08-2026.
- [9]HomeWizard API โ Batteries (v2)Manufacturer. Verbatim: the /api/batteries endpoint is available on the P1 Meter and kWh Meter. Four modes, two of them legacy. Accessed 08-08-2026.
- [10]Zendure/zenSDK (GitHub)GET /properties/report and POST /properties/write, mDNS discovery, local. Accessed 08-08-2026.
- [11]Zendure/Zendure-HA (GitHub)Zendure's own Home Assistant integration. Accessed 08-08-2026.
- [12]EcoFlow Developer โ documentationManufacturer. Developer account with approval, Access Key and Secret Key, regional cloud endpoints including api-e.ecoflow.com for Europe. Accessed 11-08-2026.
- [13]HAProfs.com โ Marstek Venus E V3.0 over Modbus without extra hardwareDutch-language confirmation of port 502 from V144. Accessed 11-08-2026.
- [14]Photovoltaikforum โ Marstek Venus E 3.0 nativ Modbus TCP aufgetaucht?Independent German confirmation, including the ten-second factory reset. Accessed 11-08-2026.
- [15]ViperRNMC/marstek_venus_modbus (GitHub)Community register list. Source for the single simultaneous Modbus connection limit. Accessed 11-08-2026.
- [16]reschcloud/marstek_venus_e_modbus_home_assistant (GitHub)Second community register list; registers 32100โ32104 for voltage, current, power and SOC. Accessed 11-08-2026.
- [17]Marstek Netherlands โ frequently asked questionsManufacturer. Local control is not listed as officially supported here. Accessed 11-08-2026.
- [18]Home Assistant Community โ Marstek Venus E3 forced discharge commands do not seem to workOne thread, not a pattern. Included as a report, not as fact. Accessed 11-08-2026.
- [19]Bliq โ PowerFlow control explainedManufacturer. Price 7 to 12 euros per month including SIM data plan, cancellable monthly, four algorithms. Accessed 11-08-2026.
- [20]Bliq โ PowerflowManufacturer. Presents Powerflow as the software belonging to its own battery; compatibility refers to inverter brands. Accessed 11-08-2026.
- [21]Thuisbatterijenhulp.nl โ HEMS explainedโ ๏ธ Contradictory source. Claims Bliq Powerflow is an external solution working with BYD, Huawei and SolarEdge. Commercial knowledge base, claim unsupported; the manufacturer says otherwise. Accessed 11-08-2026.
- [22]homebatterycontrol.comProject site. Open source, no subscription, Home Assistant plus Node-RED, broad across RS485 and Modbus. Accessed 11-08-2026.
- [23]fonske/MarstekVenus-M5stackRS485 (GitHub)The adapter route for older Venus models. Accessed 11-08-2026.
- [24]onzestroom.nl โ Sessy in Home Assistant via HACSIndependent confirmation of the Sessy route. Accessed 11-08-2026.
