---
title: "Omnibattery"
description: "Omnibattery is a Marketplace integration for Home Assistant. It has 838 installs sharing analytics, works locally and was last updated October 13, 2026."
canonical: "https://vulpo.app/integrations/marketplace/ffunes-omnibattery"
url: "https://vulpo.app/integrations/marketplace/ffunes-omnibattery.md"
last-updated: "2026-10-22"
version: "1.4"
---

# Omnibattery

> Omnibattery is a Marketplace integration for Home Assistant. It has 838 installs sharing analytics, works locally and was last updated October 13, 2026.

Omnibattery is a custom integration that monitors and controls Marstek Venus and Zendure home batteries, among other brands. It talks to the batteries locally, using Modbus TCP, serial Modbus RTU or local HTTP depending on the brand, and is set up in the UI. A proportional-derivative controller keeps grid exchange near zero, with selectable tuning profiles and a sensor that reports control quality. Several batteries of different brands can be managed together with load sharing and priority based on state of charge. Charging can be planned from the solar forecast and dynamic prices, with per-battery time slots, a weekly full charge and peak shaving. It adds sensors, switches, numbers, selects, buttons and binary sensors, plus optional three-phase current protection and repair notices.

Automatic summary of the README and code of ffunes/Omnibattery. Something wrong, or are you the maintainer and want your own text here? [Get in touch](https://vulpo.app/contact)

[Open in My Home Assistant](https://my.home-assistant.io/redirect/hacs_repository/?owner=ffunes&repository=Omnibattery&category=integration)

On Home Assistant 2026.11 or newer? [Open it in the Marketplace](https://my.home-assistant.io/redirect/marketplace_repository/?owner=ffunes&repository=Omnibattery&category=integration)

## Supports

- **Works locally**: Talks to your devices on your own network. No vendor cloud in between.
- **Found by itself**: Home Assistant spots it on the network and offers to add it.
- **From the Marketplace**: Installed through the Marketplace, formerly HACS.
- **Actively maintained**: Its author released or pushed a change in the last six months.

## Setting it up

Install it from the Marketplace and restart Home Assistant, then add it under Settings, Devices and services.

### Configure Omnibattery

- **Grid consumption sensor**: Real-time sensor for imported (+) or exported (-) grid power. Updates every 1-2 seconds are recommended. Slower sensors are accepted, but delayed readings reduce regulation quality; the latest reading is followed for up to 65 seconds.
- **Off-grid power sensor (optional)**: Separate W/kW meter for the backed-up circuit. It must differ from the normal grid sensor. Configuring it exposes a software switch that selects this source for control and statistics; it does not enable the battery's physical off-grid/EPS port.
- **Off-grid meter sign inverted**: Enable when the off-grid sensor uses the opposite convention: positive = export and negative = consumption. This setting applies only while off-grid meter mode is active.
- **Whole-day solar forecast sensor (legacy)**: Legacy sensor providing the whole-day solar forecast. Existing installations can keep using it during the transition; prefer Remaining Today for new configurations.
- **Solar forecast remaining today sensor (recommended)**: Sensor providing solar production still expected today in kWh. Saving it replaces the legacy whole-day forecast and it is never reduced by production already measured.
- **Solar production sensor (optional)**: Real-time PV production power sensor (W/kW) from an external inverter not wired through the battery MPPT inputs. Used to show the Solar node in the dashboard energy-flow diagram. Leave empty if your panels feed the battery MPPT directly.
- **Inverted meter sign**: Enable this option if your meter uses the opposite convention: positive = export, negative = import. The unit (W/kW) is detected automatically.
- **Maximum contracted power (W)**: Total contracted power in watts. System won't exceed this limit when charging to avoid tripping the breaker
- **Enable three-phase current protection**: Optional safety envelope for three-phase installations. Configure one signed RMS current sensor in A, one fuse-size limit in A and the physical battery phase for each circuit in the next step.

### Three-phase current protection

- **L1 grid current sensor**: Real-time signed RMS current on physical phase L1. Positive import, negative export; A and mA are accepted.
- **L2 grid current sensor**: Real-time signed RMS current on physical phase L2. Positive import, negative export; A and mA are accepted.
- **L3 grid current sensor**: Real-time signed RMS current on physical phase L3. Positive import, negative export; A and mA are accepted.
- **L1 fuse size (A)**: Fuse rating/current limit for L1 in amperes. Enter a value below the nameplate rating to leave margin for latency and transient peaks.
- **L2 fuse size (A)**: Fuse rating/current limit for L2 in amperes. Enter a value below the nameplate rating to leave margin for latency and transient peaks.
- **L3 fuse size (A)**: Fuse rating/current limit for L3 in amperes. Enter a value below the nameplate rating to leave margin for latency and transient peaks.

### Phase assignments

- **Physical battery phase**

### Number of batteries

- **Number of batteries**

### Battery brand

- **Brand**: Marstek Venus: Modbus TCP. Zendure SolarFlow: local HTTP (HEMS must be disabled for Omnibattery control). Anker SOLIX Solarbank Max AC / 4 E5000 Pro: Modbus TCP (enable Modbus TCP under Third-Party Control in the Anker app; only one Modbus client at a time). Sessy: local HTTP.

### Battery connection

- **Name**: Descriptive name to identify this battery
- **IP Address**: IP address of the battery on your local network. Leave empty if you use a serial port.
- **Modbus Port**: Modbus port (usually 502)
- **Modbus Slave ID**: Modbus slave/unit id (default 1). Change only when a Modbus proxy maps several batteries to one IP:port using distinct slave ids.
- **Battery Model**: Select your battery model version. Ev2 for older models, Ev3 for newer models with updated register map, A (Venus A) or D (Venus D) for hybrid inverter models
- **Serial port (Modbus RTU)**: USB-RS485 adapter path, e.g. /dev/ttyUSB0 or COM3. Fill this instead of the IP address to use Modbus RTU over serial; leave empty for TCP.
- **Reached through an RS485 gateway**: Tick when the Modbus TCP connection goes to an RS485 gateway (Elfin EW11, USB-RS485 bridge, ...) instead of the battery's own TCP port. The wait between messages only exists in the battery's TCP server, so dropping it to 30 ms makes polling roughly three times faster on a Venus Ev3/A/D. The wait is applied per battery: on a gateway shared by several batteries the bus carries that many times the traffic, so untick it again if reads start failing or timing out. Leave off when you connect straight to the battery's IP.

### Battery connection zendure

- **Name**: Descriptive name to identify this battery
- **IP Address**: IP address of the Zendure device on your local network
- **HTTP Port**: HTTP port (default 80)

### Battery connection hoymiles

- **Name**
- **MQTT device ID**: Hoymiles MQTT device ID, for example MSA-280024341346.
- **Battery model**: Use automatic discovery unless the device publishes an incorrect or generic model.

### After setup

- **Battery**
- **Grid consumption sensor**: Real-time sensor for imported (+) or exported (-) grid power. Updates every 1-2 seconds are recommended. Slower sensors are accepted, but delayed readings reduce regulation quality; the latest reading is followed for up to 65 seconds.
- **Off-grid power sensor (optional)**: Separate W/kW meter for the backed-up circuit. It must differ from the normal grid sensor. Configuring it exposes a software switch that selects this source for control and statistics; it does not enable the battery's physical off-grid/EPS port.
- **Off-grid meter sign inverted**: Enable when the off-grid sensor uses the opposite convention: positive = export and negative = consumption. This setting applies only while off-grid meter mode is active.
- **Whole-day solar forecast sensor (legacy)**: Legacy sensor providing the whole-day solar forecast. Existing installations can keep using it during the transition; prefer Remaining Today for new configurations.
- **Solar forecast remaining today sensor (recommended)**: Sensor providing solar production still expected today in kWh. Saving it replaces the legacy whole-day forecast and it is never reduced by production already measured.
- **Solar production sensor (optional)**: Real-time PV production power sensor (W/kW) from an external inverter not wired through the battery MPPT inputs. Used to show the Solar node in the dashboard energy-flow diagram. Leave empty if your panels feed the battery MPPT directly.
- **Inverted meter sign**: Enable this option if your meter uses the opposite convention: positive = export, negative = import. The unit (W/kW) is detected automatically.
- **Maximum contracted power (W)**: Total contracted power in watts. System won't exceed this limit when charging to avoid tripping the breaker
- **Enable three-phase current protection**: Optional safety envelope for three-phase installations. Configure one signed RMS current sensor in A, one fuse-size limit in A and the physical battery phase for each circuit in the next step.
- **L1 grid current sensor**: Real-time signed RMS current on physical phase L1. Positive import, negative export; A and mA are accepted.
- **L2 grid current sensor**: Real-time signed RMS current on physical phase L2. Positive import, negative export; A and mA are accepted.
- **L3 grid current sensor**: Real-time signed RMS current on physical phase L3. Positive import, negative export; A and mA are accepted.
- **L1 fuse size (A)**: Fuse rating/current limit for L1 in amperes. Enter a value below the nameplate rating to leave margin for latency and transient peaks.
- **L2 fuse size (A)**: Fuse rating/current limit for L2 in amperes. Enter a value below the nameplate rating to leave margin for latency and transient peaks.
- **L3 fuse size (A)**: Fuse rating/current limit for L3 in amperes. Enter a value below the nameplate rating to leave margin for latency and transient peaks.
- **Physical battery phase**
- **Number of batteries**
- **Brand**: Marstek Venus: Modbus TCP. Zendure SolarFlow: local HTTP (HEMS must be disabled for Omnibattery control). Anker SOLIX Solarbank Max AC / 4 E5000 Pro: Modbus TCP (enable Modbus TCP under Third-Party Control in the Anker app; only one Modbus client at a time). Sessy: local HTTP.
- **Name**: Descriptive name to identify this battery
- **IP Address**: IP address of the battery on your local network. Leave empty if you use a serial port.
- **Modbus Port**: Modbus port (usually 502)
- **Modbus Slave ID**: Modbus slave/unit id (default 1). Change only when a Modbus proxy maps several batteries to one IP:port using distinct slave ids.
- **Battery Model**: Select your battery model version. Ev2 for older models, Ev3 for newer models with updated register map, A (Venus A) or D (Venus D) for hybrid inverter models
- **Serial port (Modbus RTU)**: USB-RS485 adapter path, e.g. /dev/ttyUSB0 or COM3. Fill this instead of the IP address to use Modbus RTU over serial; leave empty for TCP.
- **Reached through an RS485 gateway**: Tick when the Modbus TCP connection goes to an RS485 gateway (Elfin EW11, USB-RS485 bridge, ...) instead of the battery's own TCP port. The wait between messages only exists in the battery's TCP server, so dropping it to 30 ms makes polling roughly three times faster on a Venus Ev3/A/D. The wait is applied per battery: on a gateway shared by several batteries the bus carries that many times the traffic, so untick it again if reads start failing or timing out. Leave off when you connect straight to the battery's IP.
- **Name**: Descriptive name to identify this battery
- **IP Address**: IP address of the Zendure device on your local network
- **HTTP Port**: HTTP port (default 80)

Texts from the code of [ffunes/Omnibattery](https://github.com/ffunes/Omnibattery).

## Entities

- **Binary sensors**: Peak Shaving Active, Predictive Charging Active, Smart Pre-discharge Status, Surplus Price Hold Status, Discharge Reserve Status, WiFi Status, Cloud Status, ESP WiFi Status, PLL Abnormal Restart, Overtemperature Limit, Low Temperature Limit, Fan Abnormal Warning, and 22 more
- **Buttons**: Reset Device, Re-evaluate Predictive Charging
- **Numbers**: Surplus Hold Minimum Saving, Discharge Reserve Minimum Saving, Set Charge Power, Set Discharge Power, Max Charge Power, Max Discharge Power, Charging Cutoff Capacity, Discharging Cutoff Capacity, Charge To SOC, PD Kp, PD Kd, PD Deadband, and 37 more
- **Selects**: Force Mode, Battery Phase, Off-Grid Mode, User Work Mode, Weekly Full Charge Day, Charge priority, Primary battery, High-Price Sale, PD Tuning Profile
- **Sensors**: Discharge Window, Active Batteries, Three-Phase Protection Status, System Battery Cell Power, Total Solar Power, Daily Solar Production, Daily Home Consumption, Expected Home Consumption Profile, Current Consumption Profile Capture, Daily Operation Timeline, Home Consumption, PD Control Quality, and 125 more
- **Switches**: Surplus Price Hold, Discharge Reserve, Feed the real demand forward, Status LEDs, Weekly Full Charge, Price-Based Discharge, Smart Pre-discharge / Anti-curtailment, Negative-price opportunistic charging, Manual Mode, Three-Phase Current Protection, No-PD Direct Tracking, Off-grid Meter Mode, and 19 more
- **Times**: External Charging End Time

## Actions

- **Exclude consumption days**: Keeps whole local days out of the learned consumption, for a day that does not represent the household: a meter outage, a one-off event, a stay away from home. Physical energy counters and history are untouched; only learning ignores the days. The exclusion is persisted, so a later Recorder backfill cannot bring the days back.
  Fields: Start date, End date

## Troubleshooting

- **Diagnostics**: Downloads a diagnostics file to attach to a bug report.
- **System health**: Adds its status to Home Assistant's system information.
- **Repair notices**: Notices it can show in Settings, Repairs:
  Mark your EV charger among excluded devices, Configured sensor no longer exists, Grid power sensor has stopped publishing, Grid power sensor updates too slowly, Price data unusable, Solar forecast unusable, Use a remaining solar forecast, Three-phase protection can be bypassed by manual commands

## From the README

> - Mix and match different battery brands: Marstek, Zendure, Anker Solix, Sessy, Hoymiles MQTT and more to come!
> - Zero Export/Import PD Controller: Keeps grid exchange near zero using a Proportional-Derivative algorithm.
> - Integrated dashboard: All the controls and adjustments from a single place. Graphs and power flow diagram included!
> - One-Click PD Profiles + Quality Sensor: Pick a tuning profile (Very smooth → Very aggressive) instead of tuning gains by hand; a control-quality sensor reports whether the result is stable,…
> - Multi-Battery Support: Manage up to 10 batteries with intelligent load sharing and SOC-based priority.
> - Predictive Grid Charging: Automatically charges from the grid when solar forecast + battery won't cover tomorrow's consumption. Supports fixed time slots, dynamic pricing, and real-time pricing…
> - Negative-price opportunistic charging: Optional Dynamic Pricing-only charging fills each battery to its configured maximum SOC during negative import-price slots, even without solar panels or a…
> - Smart Pre-discharge / Anti-curtailment: Optional Dynamic Pricing-only planning creates battery headroom before forecast PV surplus at negative-injection prices, then blocks discharge during the…
> - Time Slots: Per-battery windows with independent charge/discharge ticks, optional SOC and power overrides, and a manual mode that forces a fixed charge or discharge power. Up to 8 slots per…
> - Weekly Full Charge: Forces 100% SOC once a week for LFP cell balancing.

From the README of [ffunes/Omnibattery](https://github.com/ffunes/Omnibattery#readme), [GNU GPL v3.0](https://spdx.org/licenses/GPL-3.0.html). Shortened.

## At a glance

- Kind: Marketplace integration
- Category: [Energy](https://vulpo.app/integrations/category/energy.md), Solar and batteries
- Number: 838 installs sharing analytics; 206 GitHub stars
- Connection: Works locally
- Upkeep: Updated in the last 6 months
- Needs: Needs the Marketplace (HACS on 2026.10 and older)
- Latest version: v1.5.0, last updated October 13, 2026
- Domain: `omnibattery`
- Source: <https://github.com/ffunes/Omnibattery>
- Issues: <https://github.com/ffunes/omnibattery/issues>
- Screenshot: https://vulpo.app/integrations-img/9c4ff6cf02d6c265.webp (from ffunes/Omnibattery's README)

In Vulpo: Quick Toggle card, Button card, Select card, Chart card, Apple Watch, Control Center

Independent directory, made by the developer of Vulpo. Not affiliated with Home Assistant or the Open Home Foundation. [About these numbers](https://vulpo.app/integrations/about)

Last updated 2026-10-22. Source: https://vulpo.app/integrations/marketplace/ffunes-omnibattery

---

- HTML version of this page: https://vulpo.app/integrations/marketplace/ffunes-omnibattery
- Site index for agents: https://vulpo.app/llms.txt
- Everything in one document: https://vulpo.app/llms-full.txt
- All pages: https://vulpo.app/sitemap.xml
