From 73fb6212a669eb008bcfe36b5e88e91c6c34853f Mon Sep 17 00:00:00 2001 From: manoj125485 Date: Tue, 7 Apr 2026 04:55:49 +0100 Subject: [PATCH 1/4] Do not overwrite pv_power & pv_today via Fox Cloud if already defined in predbat config This is a temporary fix to prevent 0 values being set by Fox Cloud when you have an AC only inverter. I.e. it does not store any pv information for my Enphase solar. This will allow my setup to continue to work when appying the latest predbat updates. --- apps/predbat/fox.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/predbat/fox.py b/apps/predbat/fox.py index 1fde0e934..59596bbc3 100644 --- a/apps/predbat/fox.py +++ b/apps/predbat/fox.py @@ -1674,12 +1674,14 @@ async def automatic_config(self): self.set_arg("load_today", [f"sensor.{self.prefix}_fox_{device}_loads" for device in batteries]) self.set_arg("import_today", [f"sensor.{self.prefix}_fox_{device}_gridconsumption" for device in batteries]) self.set_arg("export_today", [f"sensor.{self.prefix}_fox_{device}_feedin" for device in batteries]) - self.set_arg("pv_today", [f"sensor.{self.prefix}_fox_{device}_pvenergytotal_today" for device in pvs]) + if not self.base.get_arg("pv_today", default=None, indirect=False): + self.set_arg("pv_today", [f"sensor.{self.prefix}_fox_{device}_pvenergytotal_today" for device in pvs]) self.set_arg("battery_rate_max", [f"sensor.{self.prefix}_fox_{device}_battery_rate_max" for device in batteries]) self.set_arg("battery_power", [f"sensor.{self.prefix}_fox_{device}_invbatpower" for device in batteries]) self.set_arg("grid_power", [f"sensor.{self.prefix}_fox_{device}_meterpower" for device in batteries]) self.set_arg("grid_power_invert", [True for device in batteries]) - self.set_arg("pv_power", [f"sensor.{self.prefix}_fox_{device}_pvpower" for device in pvs]) + if not self.base.get_arg("pv_power", default=None, indirect=False): + self.set_arg("pv_power", [f"sensor.{self.prefix}_fox_{device}_pvpower" for device in pvs]) self.set_arg("load_power", [f"sensor.{self.prefix}_fox_{device}_loadspower" for device in batteries]) self.set_arg("soc_percent", [f"sensor.{self.prefix}_fox_{device}_soc" for device in batteries]) self.set_arg("soc_max", [f"sensor.{self.prefix}_fox_{device}_battery_capacity" for device in batteries]) From 74952eae19469bf7e3c1443862e3db47139ee0bc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Wed, 8 Apr 2026 07:30:34 +0000 Subject: [PATCH 2/4] [pre-commit.ci lite] apply automatic fixes --- apps/predbat/fox.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/predbat/fox.py b/apps/predbat/fox.py index 59596bbc3..833d5181a 100644 --- a/apps/predbat/fox.py +++ b/apps/predbat/fox.py @@ -1675,13 +1675,13 @@ async def automatic_config(self): self.set_arg("import_today", [f"sensor.{self.prefix}_fox_{device}_gridconsumption" for device in batteries]) self.set_arg("export_today", [f"sensor.{self.prefix}_fox_{device}_feedin" for device in batteries]) if not self.base.get_arg("pv_today", default=None, indirect=False): - self.set_arg("pv_today", [f"sensor.{self.prefix}_fox_{device}_pvenergytotal_today" for device in pvs]) + self.set_arg("pv_today", [f"sensor.{self.prefix}_fox_{device}_pvenergytotal_today" for device in pvs]) self.set_arg("battery_rate_max", [f"sensor.{self.prefix}_fox_{device}_battery_rate_max" for device in batteries]) self.set_arg("battery_power", [f"sensor.{self.prefix}_fox_{device}_invbatpower" for device in batteries]) self.set_arg("grid_power", [f"sensor.{self.prefix}_fox_{device}_meterpower" for device in batteries]) self.set_arg("grid_power_invert", [True for device in batteries]) if not self.base.get_arg("pv_power", default=None, indirect=False): - self.set_arg("pv_power", [f"sensor.{self.prefix}_fox_{device}_pvpower" for device in pvs]) + self.set_arg("pv_power", [f"sensor.{self.prefix}_fox_{device}_pvpower" for device in pvs]) self.set_arg("load_power", [f"sensor.{self.prefix}_fox_{device}_loadspower" for device in batteries]) self.set_arg("soc_percent", [f"sensor.{self.prefix}_fox_{device}_soc" for device in batteries]) self.set_arg("soc_max", [f"sensor.{self.prefix}_fox_{device}_battery_capacity" for device in batteries]) From 999e5fadb9bf80702d6720e8a65985a6bac959c5 Mon Sep 17 00:00:00 2001 From: manoj125485 Date: Wed, 8 Apr 2026 10:59:46 +0100 Subject: [PATCH 3/4] Updated to use fox_pv_ignore option --- apps/predbat/fox.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/predbat/fox.py b/apps/predbat/fox.py index 833d5181a..01c768847 100644 --- a/apps/predbat/fox.py +++ b/apps/predbat/fox.py @@ -1674,13 +1674,13 @@ async def automatic_config(self): self.set_arg("load_today", [f"sensor.{self.prefix}_fox_{device}_loads" for device in batteries]) self.set_arg("import_today", [f"sensor.{self.prefix}_fox_{device}_gridconsumption" for device in batteries]) self.set_arg("export_today", [f"sensor.{self.prefix}_fox_{device}_feedin" for device in batteries]) - if not self.base.get_arg("pv_today", default=None, indirect=False): + if not self.base.get_arg("fox_pv_ignore", default=False): self.set_arg("pv_today", [f"sensor.{self.prefix}_fox_{device}_pvenergytotal_today" for device in pvs]) self.set_arg("battery_rate_max", [f"sensor.{self.prefix}_fox_{device}_battery_rate_max" for device in batteries]) self.set_arg("battery_power", [f"sensor.{self.prefix}_fox_{device}_invbatpower" for device in batteries]) self.set_arg("grid_power", [f"sensor.{self.prefix}_fox_{device}_meterpower" for device in batteries]) self.set_arg("grid_power_invert", [True for device in batteries]) - if not self.base.get_arg("pv_power", default=None, indirect=False): + if not self.base.get_arg("fox_pv_ignore", default=False): self.set_arg("pv_power", [f"sensor.{self.prefix}_fox_{device}_pvpower" for device in pvs]) self.set_arg("load_power", [f"sensor.{self.prefix}_fox_{device}_loadspower" for device in batteries]) self.set_arg("soc_percent", [f"sensor.{self.prefix}_fox_{device}_soc" for device in batteries]) From 33891798793a90451db77fd2f5c3a3ffdf74f843 Mon Sep 17 00:00:00 2001 From: manoj125485 Date: Sat, 11 Apr 2026 03:07:46 +0100 Subject: [PATCH 4/4] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- apps/predbat/fox.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/predbat/fox.py b/apps/predbat/fox.py index 01c768847..1c025f17c 100644 --- a/apps/predbat/fox.py +++ b/apps/predbat/fox.py @@ -29,6 +29,11 @@ # Define TIME_FORMAT_HA locally to avoid dependency issues TIME_FORMAT_HA = "%Y-%m-%dT%H:%M:%S%z" +# Fox integration config options +# When enabled, Predbat will not wire Fox PV energy/power entities into the +# standard pv_today/pv_power config arguments. +FOX_PV_IGNORE_CONFIG_KEY = "fox_pv_ignore" + BASE_TIME = datetime.strptime("00:00", "%H:%M") OPTIONS_TIME = [((BASE_TIME + timedelta(seconds=minute * 60)).strftime("%H:%M")) for minute in range(0, 24 * 60, 1)] OPTIONS_TIME_FULL = [((BASE_TIME + timedelta(seconds=minute * 60)).strftime("%H:%M") + ":00") for minute in range(0, 24 * 60, 1)] @@ -1674,13 +1679,14 @@ async def automatic_config(self): self.set_arg("load_today", [f"sensor.{self.prefix}_fox_{device}_loads" for device in batteries]) self.set_arg("import_today", [f"sensor.{self.prefix}_fox_{device}_gridconsumption" for device in batteries]) self.set_arg("export_today", [f"sensor.{self.prefix}_fox_{device}_feedin" for device in batteries]) - if not self.base.get_arg("fox_pv_ignore", default=False): + fox_pv_ignore = self.base.get_arg(FOX_PV_IGNORE_CONFIG_KEY, default=False) + if not fox_pv_ignore: self.set_arg("pv_today", [f"sensor.{self.prefix}_fox_{device}_pvenergytotal_today" for device in pvs]) self.set_arg("battery_rate_max", [f"sensor.{self.prefix}_fox_{device}_battery_rate_max" for device in batteries]) self.set_arg("battery_power", [f"sensor.{self.prefix}_fox_{device}_invbatpower" for device in batteries]) self.set_arg("grid_power", [f"sensor.{self.prefix}_fox_{device}_meterpower" for device in batteries]) self.set_arg("grid_power_invert", [True for device in batteries]) - if not self.base.get_arg("fox_pv_ignore", default=False): + if not fox_pv_ignore: self.set_arg("pv_power", [f"sensor.{self.prefix}_fox_{device}_pvpower" for device in pvs]) self.set_arg("load_power", [f"sensor.{self.prefix}_fox_{device}_loadspower" for device in batteries]) self.set_arg("soc_percent", [f"sensor.{self.prefix}_fox_{device}_soc" for device in batteries])