I am trying to set up predbat with a Fox-ESS KH7 inverter. I have plugged in my sensor/control names (I am using FoxESS-Modbus), but cannot get a plan to display in predbat, and am seeing these errors repeatedly in the predbat log:
39869 2026-06-25 08:39:15.373380: Warn: record_status Error: Inverter 0 unable to read charge window time as neither REST, charge_start_time or charge_start_hour are set
39868 2026-06-25 08:39:15.355360: Error: Inverter 0 unable to read charge window time as neither REST, charge_start_time or charge_start_hour are set
39853 2026-06-25 08:37:01.319042: Error: timer_tick caught exception:
39852 2026-06-25 08:37:01.318906: Warn: record_status Error: Exception raised
My current apps.yaml is below. Any advice would be much appreciated.
pred_bat:
module: predbat
class: PredBat
prefix: predbat
timezone: Europe/London
currency_symbols:
- "£"
- "p"
predbat_mode: "Monitor"
validation_check: false
metric_inverter_load: 0.0
metric_house_load: "sensor.foxess_kh7_load_power"
metric_battery_soc: "sensor.foxess_kh7_battery_soc"
metric_grid_power: "sensor.foxess_kh7_grid_ct"
metric_battery_capacity: 11.52
metric_battery_charge_rate_max: 6000
metric_battery_discharge_rate_max: 6000
threads: auto
load_filter_threshold: 30
load_today:
- sensor.foxess_kh7_load_power
import_today:
- sensor.foxess_kh7_grid_consumption_energy_today
export_today:
- sensor.foxess_kh7_feed_in_energy_today
pv_today:
- sensor.foxess_kh7_solar_energy_today
num_inverters: 1
balance_inverters_seconds: 60
charge_start_service:
service: select.select_option
entity_id: select.foxess_kh7_work_mode
option: "Force Charge"
charge_stop_service:
service: select.select_option
entity_id: select.foxess_kh7_work_mode
option: "Self Use"
discharge_start_service:
service: select.select_option
entity_id: select.foxess_kh7_work_mode
option: "Force Discharge"
discharge_stop_service:
service: select.select_option
entity_id: select.foxess_kh7_work_mode
option: "Self Use"
charge_start_hour:
- 0
charge_start_minute:
- 0
charge_end_hour:
- 0
charge_end_minute:
- 0
charge_rate:
- number.foxess_kh7_force_charge_power
discharge_rate:
- number.foxess_kh7_force_discharge_power
battery_power:
- sensor.foxess_kh7_invbatpower
pv_power:
- sensor.foxess_modbus_foxess_kh7_pv_power_foxess_kh7
load_power:
- sensor.foxess_kh7_load_power
grid_power:
- sensor.foxess_kh7_grid_consumption
soc_kw:
- sensor.foxess_kh7_bms_kwh_remaining
soc_max:
- sensor.foxess_kh7_bms_kwh_remaining
reserve:
- number.foxess_kh7_min_soc_on_grid
charge_enable:
- input_boolean.predbat_dummy_charge_enable # <-- ADD THIS
charge_limit:
- input_number.input_number_predbat_dummy_charge_limit # <-- UPDATE THIS
inverter_limit:
- 7000
inverter_clock_skew_start: 0
inverter_clock_skew_end: 0
inverter_clock_skew_discharge_start: 0
inverter_clock_skew_discharge_end: 0
clock_skew: 0
pv_forecast_today: re:(sensor.(solcast_|)(pv_forecast_|)forecast_today)
pv_forecast_tomorrow: re:(sensor.(solcast_|)(pv_forecast_|)forecast_tomorrow)
pv_forecast_d3: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_3|d3))
pv_forecast_d4: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_4|d4))
car_charging_energy: "re:(sensor.myenergi_zappi_[0-9a-z]+_charge_added_session|sensor.wallbox_portal_added_energy)"
num_cars: 0
car_charging_planned:
- "re:(sensor.wallbox_portal_status_description|sensor.myenergi_zappi_[0-9a-z]+_plug_status)"
car_charging_planned_response:
- "yes"
- "on"
- "true"
- "connected"
- "ev connected"
- "charging"
- "paused"
- "waiting for car demand"
- "waiting for ev"
- "scheduled"
- "enabled"
- "latched"
- "locked"
- "plugged in"
- "waiting"
car_charging_now_response:
- "yes"
- "on"
- "true"
octopus_api_key: "sk_live_********************"
octopus_api_account: "A-******"
octopus_automatic: true
octopus_intelligent_slot: "re:(binary_sensor.octopus_energy([0-9a-z_]+|)_intelligent_dispatching)"
octopus_ready_time: "re:((select|time).octopus_energy_([0-9a-z_]+|)_intelligent_target_time)"
octopus_charge_limit: "re:(number.octopus_energy([0-9a-z_]+|)_intelligent_charge_target)"
octopus_saving_session: "re:(event.octopus_energy([0-9a-z_]+|)_saving_session_event(s|))"
octopus_saving_session_octopoints_per_penny: 8
octopus_free_session: "re:(event.octopus_energy_([0-9a-z_]+|)_octoplus_free_electricity_session_events)"
metric_octopus_import: "sensor.octopus_energy_electricity_z16n195525_1900006012690_current_rate"
rates_export_agile_override: 0.0
metric_standing_charge: "sensor.octopus_energy_electricity_z16n195525_1900006012690_current_standing_charge"
days_previous:
- 7
days_previous_weight:
- 1
forecast_hours: 48
battery_scaling:
- 1.0
import_export_scaling: 1.0
solcast_api_key: "*************************"
solcast_poll_hours: 8 # Forces Predbat to only poll once every 8 hours (3 calls/day)