Predbat version
v8.46.4 (Predbat app / add-on installation on Home Assistant OS)
Setup
Custom inverter integration for a Pylontech Force H3X (12kW/30.72kWh), controlled via a custom Home Assistant bridge automation using input_boolean helpers mapped to charge_start_service / discharge_start_service / freeze services (following the Fronius-style bridge pattern from the docs). The inverter is not natively supported by Predbat.
Problem 1: Persistent inverter_mode warning
Since installation, Predbat continuously logs:
Warn: Inverter 0 write_and_poll_option: No entity_id for inverter_mode to write Eco
This warning persisted even before I had defined a custom inverter_type/inverter: block (at which point I assumed it defaulted to GivEnergy-style behaviour). After discovering in the docs that omitting inverter_type causes Predbat to assume a GivEnergy inverter (with a 2600W limit), I added a full custom inverter definition:
yaml
inverter_type: H3X
inverter:
name: "Pylontech Force H3X"
has_rest_api: False
has_mqtt_api: False
has_service_api: True
output_charge_control: "power"
charge_control_immediate: False
current_dp: 1
charge_discharge_with_rate: False
has_charge_enable_time: False
has_discharge_enable_time: False
has_target_soc: False
target_soc_used_for_discharge: True
has_reserve_soc: True
has_timed_pause: False
time_button_press: False
support_charge_freeze: True
support_discharge_freeze: True
has_ge_inverter_mode: False
has_fox_inverter_mode: False
has_idle_time: False
has_time_window: False
charge_time_format: "S"
charge_time_entity_is_option: False
can_span_midnight: False
clock_time_format: "%Y-%m-%d %H:%M:%S"
num_load_entities: 1
soc_units: "%"
write_and_poll_sleep: 2
Confirmed via the "Apps" tab in the web console that this was loaded correctly (inverter_type: H3X, has_ge_inverter_mode: False, apps.yaml reports 0 errors).
The warning persists identically after this change. Since has_ge_inverter_mode is explicitly False, I would expect Predbat to never attempt writing a GE-style "Eco" inverter_mode value. This suggests either:
another code path unconditionally attempts an inverter_mode write regardless of has_ge_inverter_mode, or
a config key/precedence issue causes the custom inverter block to not fully override default GE-style behaviour for this specific control path.
Problem 2: Plan shows forced export ("Exp") but hardware does not receive discharge command
Separately (possibly related, possibly not), I observed a case where the Predbat plan table showed a continuous "Exp↘" (forced export) state for a ~4 hour evening window (all quarter-hours marked Exp, Limit% decreasing steadily ~2-3%/15min). At a point within that window, I checked live entity states:
input_boolean.predbat_discharge_start = off
The bridge-controlled hardware register (number.pylontech_force_h3x_charge_discharge_power_ref) = -11% (a charging value, not discharge, per our sign convention)
So despite the plan indicating active forced export, discharge_start_service did not appear to have been triggered at that time, and the battery was not discharging at anywhere near the expected rate for a 10.8kW-capable system.
The ~2-3%/15min SoC decline observed in this window corresponds almost exactly to what a 2600W GivEnergy-default discharge rate would produce (rather than our real 10,800W battery_rate_max), which is consistent with Problem 1's default-inverter-type theory, though I have not yet re-tested this specific scenario after adding the inverter_type: H3X block.
Request
Is there a known cause for the inverter_mode/"Eco" write attempt persisting despite has_ge_inverter_mode: False? Is there an additional flag or precedence rule I'm missing?
Does has_service_api: True fully guarantee that discharge_start_service is called whenever the plan enters a forced-export slot, or are there additional conditions (e.g. switch.predbat_calculate_export_first, or discharge rate curve requirements) that could silently prevent the service call?
Happy to provide the full apps.yaml, log excerpts, or test further with debug logging enabled.
Predbat version
v8.46.4 (Predbat app / add-on installation on Home Assistant OS)
Setup
Custom inverter integration for a Pylontech Force H3X (12kW/30.72kWh), controlled via a custom Home Assistant bridge automation using input_boolean helpers mapped to charge_start_service / discharge_start_service / freeze services (following the Fronius-style bridge pattern from the docs). The inverter is not natively supported by Predbat.
Problem 1: Persistent inverter_mode warning
Since installation, Predbat continuously logs:
Warn: Inverter 0 write_and_poll_option: No entity_id for inverter_mode to write Eco
This warning persisted even before I had defined a custom inverter_type/inverter: block (at which point I assumed it defaulted to GivEnergy-style behaviour). After discovering in the docs that omitting inverter_type causes Predbat to assume a GivEnergy inverter (with a 2600W limit), I added a full custom inverter definition:
yaml
inverter_type: H3X
inverter:
name: "Pylontech Force H3X"
has_rest_api: False
has_mqtt_api: False
has_service_api: True
output_charge_control: "power"
charge_control_immediate: False
current_dp: 1
charge_discharge_with_rate: False
has_charge_enable_time: False
has_discharge_enable_time: False
has_target_soc: False
target_soc_used_for_discharge: True
has_reserve_soc: True
has_timed_pause: False
time_button_press: False
support_charge_freeze: True
support_discharge_freeze: True
has_ge_inverter_mode: False
has_fox_inverter_mode: False
has_idle_time: False
has_time_window: False
charge_time_format: "S"
charge_time_entity_is_option: False
can_span_midnight: False
clock_time_format: "%Y-%m-%d %H:%M:%S"
num_load_entities: 1
soc_units: "%"
write_and_poll_sleep: 2
Confirmed via the "Apps" tab in the web console that this was loaded correctly (inverter_type: H3X, has_ge_inverter_mode: False, apps.yaml reports 0 errors).
The warning persists identically after this change. Since has_ge_inverter_mode is explicitly False, I would expect Predbat to never attempt writing a GE-style "Eco" inverter_mode value. This suggests either:
another code path unconditionally attempts an inverter_mode write regardless of has_ge_inverter_mode, or
a config key/precedence issue causes the custom inverter block to not fully override default GE-style behaviour for this specific control path.
Problem 2: Plan shows forced export ("Exp") but hardware does not receive discharge command
Separately (possibly related, possibly not), I observed a case where the Predbat plan table showed a continuous "Exp↘" (forced export) state for a ~4 hour evening window (all quarter-hours marked Exp, Limit% decreasing steadily ~2-3%/15min). At a point within that window, I checked live entity states:
input_boolean.predbat_discharge_start = off
The bridge-controlled hardware register (number.pylontech_force_h3x_charge_discharge_power_ref) = -11% (a charging value, not discharge, per our sign convention)
So despite the plan indicating active forced export, discharge_start_service did not appear to have been triggered at that time, and the battery was not discharging at anywhere near the expected rate for a 10.8kW-capable system.
The ~2-3%/15min SoC decline observed in this window corresponds almost exactly to what a 2600W GivEnergy-default discharge rate would produce (rather than our real 10,800W battery_rate_max), which is consistent with Problem 1's default-inverter-type theory, though I have not yet re-tested this specific scenario after adding the inverter_type: H3X block.
Request
Is there a known cause for the inverter_mode/"Eco" write attempt persisting despite has_ge_inverter_mode: False? Is there an additional flag or precedence rule I'm missing?
Does has_service_api: True fully guarantee that discharge_start_service is called whenever the plan enters a forced-export slot, or are there additional conditions (e.g. switch.predbat_calculate_export_first, or discharge rate curve requirements) that could silently prevent the service call?
Happy to provide the full apps.yaml, log excerpts, or test further with debug logging enabled.