Skip to content

docs(sigenergy): fix rate automation sensor names, re-apply mode on restart, stop zeroing import limit in freeze - #5464

Merged
springfall2008 merged 6 commits into
mainfrom
docs/sigenergy-setup-5459
Oct 12, 2026
Merged

springfall2008 merged 6 commits into
mainfrom
docs/sigenergy-setup-5459

Conversation

@chalfontchubby

@chalfontchubby chalfontchubby commented Oct 9, 2026 •

Copy link
Copy Markdown
Collaborator

🤖 Written and posted by Claude (Claude Code) on behalf of @chalfontchubby.

Summary

Fixes the Sigenergy Sigenstor setup instructions reported in #5459, plus problems found while checking them against a live system:

  1. The rate automations reference sensors that don't exist. They now use the plant-level sensor.sigen_plant_ess_rated_charging_power / ..._discharging_power, as the SigEnergy Sigenstor setup documentation #5459 reporter found (the template's battery_rate_max already uses the plant-level discharging sensor).
  2. A Home Assistant restart can leave the battery exporting past its target. The mode automation now re-applies the mode after a restart.
  3. A lost rate-limit write is never retried. The rate automations now also re-apply their limits after a restart and when Remote EMS is switched back on, including Predbat's 0 W holds.
  4. Freeze modes no longer set the grid import limit to 0 (Sigenergy template locks grid import to 0 even when EV is charging #4911).
  5. Remote EMS has to be on, which the page never said. There's also an optional watchdog that turns it back on.

As agreed with @gcoan on #5459, this PR is the write-up of the Sigenergy section: it brings the docs in line with the setup running on the live system.

Detail

Rate automations (#5459). sensor.sigen_inverter_ess_rated_charging_power (inverter prefix with "-ing" suffix) matches neither of the integration's spellings, so the | float raised float got invalid input 'unknown'.

  • The automations now cap against the plant-level sensors, which match the plant-level limits they write.
  • They skip the write if the rate input isn't a number, rather than failing with a template error.
  • An unavailable rated-power sensor means no cap, rather than a template error and no write.
  • The renamed-entities note is rewritten around the plant/inverter split.
  • A new note warns that renaming charge_rate/discharge_rate in apps.yaml without changing the automations stops them firing, with nothing reported. That happened on the live system (also flagged by tdbegley28 on Sigenergy template locks grid import to 0 even when EV is charging #4911): the plant sat at a fixed 5.5 kW for months and never received Predbat's rate-0 holds.

Restarts. input_select.predbat_requested_mode had initial: "Demand", so a restart reset it without a state change and the mode automation never fired. On the live system a restart at 18:59, at the end of an 18:30–19:00 force export, left the plant on Command Discharging. By then Predbat wanted Demand, saw Demand, and wrote nothing, so the battery exported at 5.5 kW from 33% to 22% until it was corrected by hand. The fix:

  • initial: is dropped from the three helpers, so HA restores their state.
  • The mode automation also triggers on homeassistant: start and on Remote EMS going from off to on.
  • It waits for the select and the SoC sensor before writing.
  • The Freeze Charging pin now falls back to 0, not 100, if SoC can't be read. With the new triggers, a 100 fallback could pin the discharge cut-off at 99.75% and trigger the forced-import firmware bug this section documents.

Rate limits after a restart. Now that the rate helpers keep their value across a restart, a limit write lost to the restart was never retried: Predbat only writes a rate when it reads a different value, so it never re-sends one it already sees, including a 0 W hold.

  • Both rate automations now have the same homeassistant: start and Remote EMS off-to-on triggers as the mode automation.
  • They wait up to 5 minutes for the plant limit entity, and skip the write rather than write to an unavailable entity.
  • They run in restart mode, so the latest rate wins.
  • A 0 W rate is re-applied like any other, so a lost hold is put back.
  • Without initial:, a new install's rate helpers start at 0 W. A note tells new users to set each one once to the plant's rated power.

Import limit in freeze modes (#4911). The charge and discharge cut-offs enforce the freeze; the 0 kW import limit was left over from before #4392. It contradicts Freeze Charging's own definition (house load beyond solar comes from the grid), and it stalls Sigenergy EVAC/EVDC chargers behind the plant CT. Existing users are told to reset it once after updating.

Other changes

  • The enable list now names sensor.sigen_plant_daily_load_consumption, which is what the template uses.
  • The enable list now names sensor.sigen_plant_available_max_active_power (used by the template's inverter_limit, disabled by default in the integration) instead of sensor.sigen_plant_max_active_power (enabled by default, not used by the template).
  • The "Remote EMS must be on" note says the cut-off and limit numbers are still obeyed while it's off, which can make a setup look partly working.
  • The optional watchdog checks every 30 minutes. It has a commented-out Axle condition, so it doesn't take control back from Axle in the middle of an event. The comment says this needs Predbat's Axle integration enabled, under your prefix.

Testing

Documentation only. Every YAML block in the section parses, and the key templates render as expected with sample states, including unknown/unavailable inputs. Pre-commit passes.

The same automations are running on a live Sigenergy system (SigenStor, TypQxQ Sigenergy-Local-Modbus):

  • The freeze modes without the 0 import limit since 9 Sep.
  • Everything else since 9 Oct, apart from the rate-automation restart and Remote EMS triggers, which are newer and not yet tested live.

Seen working live since:

  • Zero-rate holds now reach the inverter. On the night of 9–10 Oct, every Freeze Charging period set number.sigen_plant_ess_max_discharging_limit to 0, and the next mode change restored it to 5.5 kW.
  • The restart trigger re-applies the mode. After an HA restart on 10 Oct, it restored Freeze Charging (with initial: gone, the input_select keeps its value across the restart) and re-pinned the cut-off at the current SoC. A second restart re-applied Demand.
  • Every mode change gets matching writes. Each one was followed by the right select, cut-off and import-limit writes, and nothing appeared in HA's error log.

Closes #5459
Closes #4911

🤖 Generated with Claude Code

…estart, stop zeroing import limit in freeze (#5459)

- Rate automations: cap against the plant-level
  sensor.sigen_plant_ess_rated_charging/discharging_power (what the
  template's battery_rate_max already uses, and what matches the
  plant-level limits being written). The inverter prefix with "-ing"
  suffix used here doesn't exist in the integration. Skip the write if
  the rate input isn't a number (rather than writing 0kW), and treat an
  unavailable rated-power sensor as no cap.
- Rework the renamed-entities note around the plant/inverter split, and
  warn that renaming charge_rate/discharge_rate in apps.yaml but not in
  the automations silently stops them firing.
- Restarts: drop initial: from the three helpers so HA restores them
  instead of resetting them without a state change, and re-apply the
  mode on HA start and when Remote EMS goes from off to on. A restart at
  the end of a force export otherwise left the plant on Command
  Discharging while Predbat already wanted Demand and wrote nothing.
  Wait for the select and SoC sensor before writing, and make the Freeze
  Charging pin fall back to 0, not 100: a re-run with SoC unreadable
  would otherwise pin the cut-off at 99.75% and trigger the documented
  forced-import firmware bug.
- Stop setting grid_import_limitation to 0 in both freeze modes (#4911):
  the cut-offs enforce the freeze, 0 contradicts Freeze Charging's own
  definition, and it stalls Sigenergy EV chargers behind the plant CT.
  Tell existing users to reset it once.
- Say that Remote EMS must be on, fix the enable-list entry to the
  daily_load_consumption name the template uses, and add an optional
  Remote EMS watchdog.

All of this is running on a live Sigenergy system: the import-limit
change since 9 Sep, the rest since 9 Oct.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
chalfontchubby and others added 5 commits October 11, 2026 11:06
The enable list named sensor.sigen_plant_max_active_power, which the
integration enables by default; the template's inverter_limit uses
sensor.sigen_plant_available_max_active_power, which is disabled by
default. The rate-automation note also said battery_rate_max uses both
plant rated-power sensors; it uses only the discharging one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…enable (#5459)

The rate automations fired only when the input number changed. Now that
the helpers restore their state across a restart, a limit write lost to a
restart or an integration outage was never retried: Predbat saw the input
number already at the value it wanted. Both rate automations now also
trigger on Home Assistant start and on Remote EMS going from off to on,
wait for the plant limit entity before writing, and run in restart mode so
the latest rate wins. The condition reads the input number directly, as
trigger.to_state does not exist for the new triggers.

Also tell new users to set the rate helpers once, as without initial: they
start at 0 W, which Predbat reads as the battery being held.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…at the re-apply covers (#5459)

On a new install the rate input numbers start at 0 W, so the new Home
Assistant start trigger would write a 0 kW charge and discharge limit to
the plant on the first restart, blocking the battery. The re-apply
triggers now skip a 0 W rate; a real rate change still writes 0.

The comment also claimed the triggers retry a write lost to an
integration outage, which they don't (recovery is unavailable to
available, which nothing triggers on). It now names what they do cover:
a write lost to a restart, and a limit changed by another service while
Remote EMS was off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The previous commit skipped a 0 W rate on the re-apply triggers to spare
new installs a 0 kW limit on their first restart. That also stopped a lost
or overwritten hold (Predbat's deliberate rate 0) from being put back,
which is the main case the triggers exist for: Predbat only writes the
rate when it reads a different value, so it never re-sends a hold it
already sees. A new install needs no special case, because Predbat writes
its non-zero rate on its first cycle. Drop the guard and say in the
new-install note that the restart writes the 0 W default to the plant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…og condition (#5459)

The rate automation comments said the is_number condition and the
float(99) fallback avoid writing a 0 kW limit. In current Home Assistant
'| float' with no default raises on 'unavailable', so the old behaviour
was a template error and no write; the comments now say so.

The watchdog's optional Axle condition only works with Predbat's own Axle
integration enabled, under the configured prefix (axle.py builds the
entity as binary_sensor.<prefix>_axle_event). Without it the condition
never passes and the watchdog never runs; the comment now says this.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@springfall2008
springfall2008 merged commit c0d901d into main Oct 12, 2026
2 checks passed
@springfall2008
springfall2008 deleted the docs/sigenergy-setup-5459 branch October 12, 2026 18:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SigEnergy Sigenstor setup documentation Sigenergy template locks grid import to 0 even when EV is charging

2 participants