A hybrid solar-and-battery system does not need to reach empty before it needs help. The useful question is whether the energy left in the battery can cover the house until solar production is expected again, with some reserve left over.
That became a practical question for MARA, the PowMr inverter at my family’s home in Jamaica. The system has a 24 V inverter and two 24 V, 200 Ah REDODO LiFePO4 batteries. Together, the batteries store about 9.6 kWh at their nominal ratings. The inverter’s local telemetry is available in Home Assistant through the Siseli bridge.
The guardrail: estimate the runway, not just the percentage
Battery percentage by itself is not a plan. The load changes, the inverter loses some energy in conversion, and a cloudy day can leave little solar energy for the evening. I want to compare the battery’s estimated runtime with the hours until useful solar production returns.
The rule is simple:
If the trusted battery monitor’s remaining runtime is shorter than the expected time to solar recovery, plus a safety margin, move the load to utility power while utility is available.
This is a conservative operating rule, not a prediction that the battery will reach exactly zero at the displayed time. It is a prompt to act before the inverter reaches its low-voltage fallback threshold. If utility is not available, the same warning should trigger load reduction and a human check; changing the inverter’s priority cannot create a power source that is absent.
Why I trust the shunt reading
During one evening check, Home Assistant showed the REDODO battery monitor at 51.7% and discharging at about 451 W. Its remaining-runtime estimate was 443 minutes, a little over seven hours. PV output was zero. That estimate put the battery’s runway well short of morning.
The inverter’s own SOC reading still said 100%, but that reading was older and did not agree with the fresh battery monitor. I used the REDODO battery reading and its live discharge estimate as the decision inputs. The inverter SOC was not a safe reason to assume the battery could cover the night.
Freshness matters for the other half of the decision too. An older Home Assistant grid-status entity said utility was unavailable, but its timestamp was stale. The local inverter telemetry showed about 113.7 V on the AC input. After the transfer, it showed utility-first mode and grid import matching the house load. A stale status bit should not overrule a fresh measurement.
The transfer and the proof
MARA was in SBU mode, using solar first and then battery. I used the narrow Home Assistant script that sets grid-first mode. That path is protected by a local safety lock: it permits the specific grid-priority setting, while broader inverter writes remain blocked.
I did not stop at the successful script response. After waiting for the inverter to apply the setting, I checked independent telemetry. It reported utility-first mode, about 111.8 V at the input, roughly 408 W of grid import for a 408 W load, and 0 W of inverter-reported battery discharge. The REDODO monitor later showed only about 30 W of battery discharge, down from roughly 450 W.
That is what a successful guardrail action looks like: the mode changes, the utility input is present, the grid carries the load, and battery discharge stops. A command accepted by Home Assistant is not enough on its own.
Grid-first is not the same as charging
Moving the load to utility protects the battery from continuing to discharge. It does not prove that the battery is charging. Charger priority and charge current are separate inverter settings, and I leave those behind their own safety checks. In this case, I verified the load transfer; I did not claim that the batteries had started charging.
The inverter also has a configured back-to-utility voltage threshold. I treat that as a last-resort backstop, not the main overnight plan. A runtime estimate can give me time to act while the battery still has reserve.
What I want the system to do every evening
For a low-sun evening, a useful Home Assistant check should:
- Read SOC and discharge power from the trusted battery monitor.
- Use the monitor’s runtime estimate, or estimate remaining time from usable capacity and recent load.
- Compare that runway with the expected time until solar can help again, including a reserve margin.
- Confirm utility availability from fresh local inverter telemetry.
- Alert me when the runway falls short, then switch only through the constrained grid-first control path when the evidence supports it.
- Verify the actual inverter mode and power flow after the command.
The check I ran was manual, not an automatic weather-based transfer. The important improvement is having a measurable rule and a verified, limited control path: use the battery when it can reasonably cover the night; use utility before the reserve is gone when a low-sun evening makes that unlikely.