Skip to content

FoxESS Freeze Export mode predicts no battery charge, but the battery does charge #4207

Closed

Description

@daviessm

Describe the bug
Predbat expects that in Freeze Export mode all available PV generation is used either by the house load or sent to the grid. It expects that if there is more generation than is covered by load or export, it is lost/clipped.

Image

Expected behaviour
For FoxESS (and probably other) inverters, in freeze export ("feed-in first") mode, generation above the load and export limits will be stored in the battery and will therefore increase the SoC. Predbat should plan for this.

Predbat version

v8.44.5

Environment details

  • Inverter and battery setup
    • FoxESS KH9 inverter with 18kWh battery storage
    • Connected using modbus integration
  • Standard HAOS installer or Docker
    • HAOS install

Log file

predbat.log

Predbat debug yaml file

predbat_debug.yaml.txt

Activity

  1. springfall2008 commented on Jul 8, 2026

    @springfall2008
    Owner

    How are you controlling the Fox during an export freeze, your apps.yaml isn't attached?

  2. daviessm commented on Jul 9, 2026

    @daviessm
    SponsorContributorAuthor

    Sorry, the issue template doesn't ask for apps.yaml. Here it is:

    apps.yaml.txt

    Inverter control is the same as the Fox template:

      # Services to control charging/discharging
      charge_start_service:
        service: select.select_option
        entity_id: select.work_mode
        option: "Force Charge"
      charge_stop_service:
        service: select.select_option
        entity_id: select.work_mode
        option: "Self Use"
      discharge_start_service:
        service: select.select_option
        entity_id: select.work_mode
        option: "Force Discharge"
      discharge_stop_service:
        service: select.select_option
        entity_id: select.work_mode
        option: "Self Use"
      discharge_freeze_service:
        service: select.select_option
        entity_id: select.work_mode
        option: "Feed-in First"
      charge_freeze_service:
        service: select.select_option
        entity_id: select.work_mode
        option: "Back-up"
  3. chalfontchubby commented on Aug 2, 2026

    @chalfontchubby
    Collaborator

    Root cause found: during an export freeze, prediction.py's freeze guard unconditionally zeroed the predicted charge rate, ignoring inverter_can_charge_during_export - so on inverters that route PV surplus to the battery during a freeze (e.g. FoxESS "Feed-in First"), the plan predicted no charging while the inverter actually charged from surplus PV.

    Fix (mirrored in the C++ kernel too): #4425

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions