A read-only Home Assistant custom integration for PeiCheng/PACEEX Smart BMS Wi-Fi modules. It communicates directly with the BMS over the local network—no vendor cloud, mobile application, MQTT broker, or external polling service is required.
- Fully local polling over TCP.
- Configuration through the Home Assistant UI.
- One coordinated request cycle for all entities.
- Automatic availability and reconnect handling.
- Individual cell voltage monitoring.
- English and Spanish UI translations.
- No Python package dependencies outside Home Assistant Core.
- Read-only implementation: the integration never changes BMS settings.
This integration targets PeiCheng/PACEEX Smart BMS units whose wireless module:
- appears over Bluetooth with a name beginning with
PC-(for example,PC-CFBA); - exposes a local TCP service, commonly on port
8888; and - uses the PACEEX binary protocol with frames beginning with
0x9Aand ending with0x9D.
It was initially developed and tested against a 16-cell, 100 Ah PACEEX BMS used in a MUST battery system. Other capacities and cell counts should work when they use the same protocol, but reports from additional hardware are welcome.
Note
A battery using the PACE RS232/RS485 ASCII protocol is not necessarily compatible. This integration targets the binary protocol exposed by the PACEEX Wi-Fi/Bluetooth module.
The integration creates one Home Assistant device with the following sensors:
| Sensor | Unit | Description |
|---|---|---|
| State of charge | % | Remaining charge reported by the BMS |
| State of health | % | Battery health reported by the BMS |
| Battery voltage | V | Total pack voltage |
| Battery current | A | Signed pack current |
| Battery power | W | Calculated from pack voltage and current |
| Remaining capacity | Ah | Remaining charge capacity |
| Design capacity | Ah | Configured nominal capacity |
| Battery cycles | — | BMS cycle counter |
| Cell count | — | Number of cells reported by the BMS |
| Cell 01…NN voltage | V | Voltage of each individual cell |
| Minimum cell voltage | V | Lowest reported cell voltage |
| Maximum cell voltage | V | Highest reported cell voltage |
| Cell voltage delta | V | Difference between highest and lowest cell |
- Home Assistant 2025.1 or newer.
- Home Assistant must be able to reach the BMS IP address and TCP port.
- The BMS Wi-Fi module must be connected to the same network or to a routable network segment.
- Assigning the BMS a DHCP reservation is strongly recommended.
Until this repository is included in the default HACS catalog:
- Open HACS in Home Assistant.
- Select Integrations.
- Open the three-dot menu and select Custom repositories.
- Add
https://github.com/tuxevil/ha_paceex_smart_bmsas an Integration repository. - Search for PACEEX BMS and install it.
- Restart Home Assistant.
-
Download the latest release.
-
Copy
custom_components/paceex_bmsinto your Home Assistant configuration directory:/config/custom_components/paceex_bms/ -
Restart Home Assistant.
- Go to Settings → Devices & services.
- Select Add integration.
- Search for PACEEX BMS.
- Enter:
- Host: the local IP address of the BMS Wi-Fi module;
- Port: normally
8888; - Update interval: polling interval in seconds (minimum
5, default15).
During setup, the integration reads the BMS serial number and a complete status sample. Configuration is rejected if the endpoint is unreachable or does not return valid PACEEX frames.
To change the polling interval later, open the integration entry in Home Assistant, select Configure, and save a new update interval.
The wireless module may advertise over Bluetooth as PC- followed by the last
four hexadecimal characters of its MAC address. The Wi-Fi and Bluetooth
interfaces may share the same MAC address. Check your router's DHCP client list
for that address and create a DHCP reservation once identified.
The vendor's BMS-TOOL mobile application can also help confirm the Bluetooth name. The mobile application is not required after this integration is set up.
Home Assistant polls two read-only PACEEX commands:
- system/pack status;
- individual cell data.
Responses are validated for frame markers, declared length, and Modbus CRC
before any entity is updated. Network I/O runs outside Home Assistant's event
loop, and a single DataUpdateCoordinator shares each poll across all sensors.
- Confirm that the BMS answers on its IP address.
- Confirm that the configured TCP port is open;
8888is common but not guaranteed. - Verify that Home Assistant and the BMS can communicate across VLANs or firewall zones.
- Ensure the BMS IP address has not changed.
BMS-TOOL's Wi-Fi mode may use the vendor cloud. This integration requires the local TCP endpoint to be reachable from Home Assistant.
The integration marks entities unavailable after a failed update and retries
on the next interval. Check the BMS Wi-Fi signal, DHCP lease, and Home Assistant
logs for paceex_bms messages.
The integration preserves the sign reported by the BMS. If a firmware variant uses the opposite convention, please open an issue with raw diagnostic details, the observed operating state, and the BMS model.
- Communication remains on the local network.
- No credentials, accounts, or cloud APIs are used.
- The integration implements only known read commands.
- Home Assistant telemetry must not replace the BMS's physical protection, contactors, fuses, or inverter safety limits.
Treat the BMS network as trusted IoT infrastructure. Use firewall rules to limit access to the local endpoint where appropriate.
The integration does not collect analytics or transmit data outside your Home Assistant instance. Device readings are stored only according to your Home Assistant recorder configuration.
Compatibility reports, protocol traces from other PACEEX models, documentation improvements, and pull requests are welcome. When reporting a new hardware variant, please include:
- battery brand and model;
- BMS hardware/firmware information, if available;
- cell count and nominal capacity;
- Bluetooth advertising name;
- TCP port;
- Home Assistant log messages with sensitive network details removed.
Do not post passwords, public IP addresses, cloud tokens, or other secrets.
This project is licensed under the MIT License.
This is an independent community project and is not affiliated with or endorsed by PeiCheng Technology, PACEEX, MUST, BMS-TOOL, or Home Assistant.