Releases: StekkerDeal/aecc-battery-local
Release list
v1.7.3: Humsienk on the brand list
Added
- Humsienk NOVA All-in-One as a brand in the Configure dialog, with a 2500 W ceiling like TSUN. Community confirmed in #27.
v1.7.2: temperature names in the right order
Fixed
- The first two temperature sensors had each other's names. The vendor app numbers them the other way round from the registers, so 30073 is the PV radiator and 30074 the inverter. Confirmed on a Lunergy without PV, where the PV radiator reads -17 °C. Entity ids are unchanged, only the names move.
Changed
- README advises disabling the integration during a firmware update.
v1.7.1: one slow answer stays one slow answer
Fixed
- A busy battery no longer turns one slow answer into a run of unavailable entities. A reply that arrived after its request had timed out was taken as the answer to the next request, and a partial one blocked the connection until the next timeout. Replies are now matched to the request that asked for them. Seen with a HEMS writing a setpoint on every P1 tick.
- Charge Limit and Discharge Limit now take effect immediately during a manual command. The battery enforces the limits written inside the active schedule slot, not the standalone registers, so a limit change did nothing until the next setpoint write and the interface showed the new value while the battery stopped at the old one. The limit write now updates the slot as well. Confirmed with register dumps on a Voltdeer SR5000 in #10.
Verified
On a TSUN PowerTrunk MAU5000: both fixes exercised live, the limit write carrying the slot verified on readback, regular polling and setpoint writes untouched. The reply-matching fix was confirmed in the field on a Voltdeer SR5000 Pro driven by a HEMS at the 5 s P1 rate: no unavailable spells, setpoints followed.
Same code as v1.7.1-beta.1.
v1.7.1-beta.1
Pre-release. To install it, open the integration's page in HACS, choose Redownload from the three-dot menu, expand Need a different version? and pick v1.7.1-beta.1.
Fixed
- A busy battery no longer turns one slow answer into a run of unavailable entities. A reply that arrived after its request had timed out was taken as the answer to the next request, and a partial one blocked the connection until the next timeout. Replies are now matched to the request that asked for them. Seen with a HEMS writing a setpoint on every P1 tick.
- Charge Limit and Discharge Limit now take effect immediately during a manual command. The battery enforces the limits written inside the active schedule slot, not the standalone registers, so a limit change did nothing until the next setpoint write and the interface showed the new value while the battery stopped at the old one. The limit write now updates the slot as well. Confirmed with register dumps on a Voltdeer SR5000 in #10.
Verified
On a TSUN PowerTrunk MAU5000: both fixes deployed and exercised live, the limit write carrying the slot verified on readback, the diagnostics register dump intact, regular polling and setpoint writes untouched, no timeouts or reconnects in the log.
Feedback welcome before this is promoted to a full release, especially from anyone who saw entities go unavailable while an automation was writing setpoints quickly, and from Voltdeer owners who change the SOC limits during a manual command.
v1.7.0
Added
- Modbus telemetry. AECC batteries answer plain Modbus TCP on the same port 8080 connection the integration already uses, and that map holds readings the JSON API never exposed. New entities, all read-only:
- Inverter, PV Radiator and Transformer Temperature, as the vendor app labels them.
- Lifetime Energy Charged, Discharged and to Grid. The device's own counters, so they do not drift with poll gaps or restarts. They count at the battery, behind the inverter, so they are not Energy Dashboard inputs; keep using Energy Charged and Energy Discharged there. To Grid needs an external meter or CT and reads 0 without one.
- Fault (binary sensor) and Alarm Flags (raw bitfield, diagnostic).
- Available Charge Power, plus Nominal Power and Nominal Battery Power as diagnostics.
- The Modbus values refresh every 30 seconds. The integration probes the map once at setup and creates these entities only on a device that answers. On a device that does not, nothing changes.
Changed
- The README now describes the current HACS path for installing a pre-release (Redownload, then pick the version).
Verified
- TSUN PowerTrunk MAU5000: a week on the beta, all entities live, temperatures and available charge power tracking load, regular polling and setpoint writes untouched.
- Voltdeer SR5000 Pro: Modbus entities confirmed by an owner on the beta.
Coming from v1.7.0-beta.1: the three temperature sensors keep their entity ids and history, only their names change.
v1.7.0-beta.1
Pre-release. Enable Show beta versions on this repository in HACS to install it.
Added
- Modbus telemetry. AECC batteries answer plain Modbus TCP on the same port 8080 connection the integration already uses, and that map holds readings the JSON API never exposed. New entities, all read-only:
- Temperature 1, 2 and 3. The vendor does not label the three points; the names follow once they do.
- Lifetime Energy Charged, Discharged and to Grid. The device's own counters, so they do not drift with poll gaps or restarts. They count at the battery, behind the inverter, so they are not Energy Dashboard inputs; keep using Energy Charged and Energy Discharged there. To Grid needs an external meter or CT and reads 0 without one.
- Fault (binary sensor) and Alarm Flags (raw bitfield, diagnostic).
- Available Charge Power, plus Nominal Power and Nominal Battery Power as diagnostics.
- The Modbus values refresh every 30 seconds. The integration probes the map once at setup and creates these entities only on a device that answers. On a device that does not, nothing changes.
Verified
On a TSUN PowerTrunk MAU5000 running Home Assistant 2026.7.4: all eleven entities appeared with values matching a raw Modbus read taken earlier the same day, the temperatures and available charge power tracked a 2.5 kW charge, and the regular polling and setpoint writes carried on untouched, with no timeouts or reconnects in the log.
Feedback welcome before this is promoted to a full release. In particular: do the new entities appear on your Lunergy, Sunpura, AEG or JET? If not, a diagnostics download shows the reason under modbus.
v1.6.4
Fixed
- Switching Work Mode to Self-Consumption left the old setpoint on display. Power Setpoint, Battery Direction and Battery Power carried on showing the last manual command, contradicting the Work Mode selector beside them. The battery had already stopped executing that command, so nothing was wrong with what it was doing, but an automation reading Power Setpoint to find out got a stale value until the next write or a reload. The three now fall back to 0 as soon as the AI takes over.
v1.6.3
A follow-up to v1.6.2, tuning the startup SOC guard that release introduced. Everyone on v1.6.2 should take this one.
Fixed
- The unconfirmed-zero guard added in v1.6.2 was one poll too short. It withheld a
SOC=0for three polls, and on the device it was written for the warm-up frame was still reporting zero when that ran out, so the zero was published after all. It then became the baseline for the rate-of-change check and held the true reading back for a further 79 seconds. The window is now 60 seconds, against a measured warm-up of 15 to 20. - The window is stated in seconds rather than polls. A count was the wrong unit as well as the wrong number: the poll interval is configurable, so three polls means six seconds on one setup and fifteen on another. The coordinator now records when the first valid frame arrived and passes the elapsed time, so the guard is expressed in the units it was measured in.
A pack that genuinely sits at 0 is unaffected in kind, only in timing: it still publishes zero once the window passes, rather than never.
v1.6.2
Fixed
- The integration no longer locks itself out of the battery. Every setup attempt opened a new connection without closing the previous one, twice per attempt, and a failed setup never unloads so nothing closed them later either. On firmware that serves one local client at a time the abandoned connection keeps the device's single session, so the integration was reading from a newer connection that would never be answered, and every retry made it worse. It now holds one connection per outage and closes what it replaces.
- The half-open socket guard can now actually fire. The counter of consecutive silent reads lived on an object that setup rebuilds on every attempt, while the socket it described lived on the shared connection manager, so during a retry loop the count reset to zero every time and the recycle at three timeouts was unreachable. The counter now lives with the connection. Confirmed in the field: the recycle warning appears during a retry loop where it previously never appeared once.
- A false
SOC=0right after a reload no longer sticks. The first frame after a reload can report the battery idle with every field at zero. Nothing in that frame contradicts the zero and there is no accepted reading yet, so it was published, became the baseline for the rate-of-change check, and hid the true SOC for several minutes. A zero is now withheld until a later reading confirms it. A pack that really is empty still publishes zero within a few polls.
Added
- TSUN is a choice in the brand dropdown, so a PowerTrunk MAU5000 owner no longer has to pick "Other". It gets the same sensor-cleaning profile as the other brands in that family, and the README lists the MAU5000 as fully tested.
- Per-brand power ceilings. The 2400 W maximum in the Configure dialog was the integration's own limit, not the hardware's. Brands rated higher can now be set higher (TSUN: 2500 W), and asking for more than the selected brand is rated for is refused in the dialog, so a 2400 W unit cannot be pushed to 2500 W by choosing the wrong brand. Measured on an MAU5000: 2500 W commanded, register 3039 read back 2500, 2440 W delivered at the wall on an independent meter.
- The README documents a firmware limitation worth knowing before relying on one: on the MAU5000, once the local connection drops for any reason it cannot be re-established until the device itself restarts, and then only within roughly 30 seconds. Other brands reconnect normally.
Upgrading
Existing TSUN owners running as "Other" should pick TSUN in the integration's Configure dialog. It only changes the sensor-cleaning profile and unlocks the 2500 W ceiling; nothing else about the entry changes.
v1.6.1
Fixed
- The write log is trustworthy again. The verify readback after a control write could race the next command, so a burst of writes showed every readback carrying the following command's value. The readback now completes before the next write starts, and is skipped, marked as superseded, when a newer write is already queued.
- The Power Setpoint box no longer writes on every spinner click. Stepping the value with the arrows sent one full register write per step. The entity now waits 0.4 seconds and only the last value is written.
Changed
-
Multi-unit stacks: manual control reaches the master only. This is now documented as a limitation rather than an open bug. On two AEG Solarcube stacks every register the integration writes is confirmed applied and matches the state the vendor app leaves behind, yet the secondary keeps executing its previous schedule. The app drives the other units through the cloud, which this integration deliberately does not use. Monitoring of every unit is unaffected. The v1.5.5 schedule-mode change did not fix this and is no longer presented as a fix.
If you need to control both units, register each battery separately in the vendor app so each gets its own IP, add the integration once per battery, and send each entry its share of the target. See the README section on multi-unit setups.
-
The tested-battery table is one line per brand. AEG is community confirmed, JET fully tested.
Refs #16