Skip to content

Commit da02736

Browse files
Fox fixes, minor bug fixes (#2659)
* Fox fixes * Fox fixes * Auto config + fixes * Fix issue with scaling of charge rate * [pre-commit.ci lite] apply automatic fixes * HA Interface alive issue when not using HA * Update custom-dictionary-workspace.txt * [pre-commit.ci lite] apply automatic fixes * GEneration PV sensor * Update custom-dictionary-workspace.txt --------- Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
1 parent dc476c1 commit da02736

8 files changed

Lines changed: 367 additions & 188 deletions

File tree

‎.cspell/custom-dictionary-workspace.txt‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ autopep
1919
autoupdate
2020
Basepath
2121
Batpred
22+
battemperature
2223
batteri
2324
batteryb
2425
bierner
@@ -79,6 +80,7 @@ energydataservice
7980
epod
8081
euids
8182
evse
83+
exportlimit
8284
fdpwr
8385
fdsoc
8486
feedin
@@ -92,11 +94,14 @@ foxess
9294
futurerate
9395
gecloud
9496
gekey
97+
generationpower
9598
geserial
9699
geseriale
97100
Ginlong
98101
GivEnergy
99102
givtcp
103+
gridconsumption
104+
gridconsumptionpower
100105
growatt
101106
HACS
102107
hadashboard
@@ -135,6 +140,7 @@ kvar
135140
kvarh
136141
kwhb
137142
linebreak
143+
loadspower
138144
localfolder
139145
lockstep
140146
logdata
@@ -203,6 +209,7 @@ predbatt
203209
Predheat
204210
psum
205211
pvbat
212+
pvpower
206213
pwindow
207214
pylint
208215
pyproject

‎apps/predbat/components.py‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,11 @@
9898
"required": True,
9999
"config": "fox_key",
100100
},
101+
"automatic": {
102+
"required": False,
103+
"default": False,
104+
"config": "fox_automatic",
105+
},
101106
},
102107
},
103108
}

‎apps/predbat/config.py‎

Lines changed: 5 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1278,7 +1278,7 @@
12781278
"min": -20,
12791279
"max": 40,
12801280
"step": 0.1,
1281-
"unit": "c",
1281+
"unit": "°C",
12821282
"default": 20,
12831283
"enable": "predheat_enable",
12841284
},
@@ -1421,33 +1421,6 @@
14211421
"charge_discharge_with_rate": False,
14221422
"target_soc_used_for_discharge": True,
14231423
},
1424-
"GSC": {
1425-
"name": "Ginlong Solis Cloud",
1426-
"has_rest_api": False,
1427-
"has_mqtt_api": False,
1428-
"output_charge_control": "current",
1429-
"charge_control_immediate": False,
1430-
"has_charge_enable_time": True,
1431-
"has_discharge_enable_time": True,
1432-
"has_target_soc": False,
1433-
"has_reserve_soc": False,
1434-
"has_timed_pause": False,
1435-
"charge_time_format": "H:M-H:M",
1436-
"charge_time_entity_is_option": False,
1437-
"soc_units": "%",
1438-
"num_load_entities": 2,
1439-
"has_ge_inverter_mode": False,
1440-
"time_button_press": True,
1441-
"clock_time_format": "%Y-%m-%d %H:%M:%S",
1442-
"write_and_poll_sleep": 4,
1443-
"has_time_window": True,
1444-
"support_charge_freeze": False,
1445-
"support_discharge_freeze": False,
1446-
"has_idle_time": False,
1447-
"can_span_midnight": False,
1448-
"charge_discharge_with_rate": False,
1449-
"target_soc_used_for_discharge": True,
1450-
},
14511424
"SE": {
14521425
"name": "SolarEdge",
14531426
"has_rest_api": False,
@@ -1709,12 +1682,13 @@
17091682
"soc_units": "%",
17101683
"num_load_entities": 1,
17111684
"has_ge_inverter_mode": False,
1685+
"has_fox_inverter_mode": True,
17121686
"time_button_press": False,
17131687
"clock_time_format": "%Y-%m-%d %H:%M:%S",
17141688
"write_and_poll_sleep": 2,
17151689
"has_time_window": False,
17161690
"support_charge_freeze": True,
1717-
"support_discharge_freeze": True,
1691+
"support_discharge_freeze": False,
17181692
"has_idle_time": False,
17191693
"can_span_midnight": False,
17201694
"charge_discharge_with_rate": False,
@@ -1815,9 +1789,9 @@
18151789
"pause_mode": {"type": "sensor_list", "sensor_type": "string", "modify": True, "entries": "num_inverters"},
18161790
"pause_start_time": {"type": "sensor_list", "sensor_type": "none|string", "modify": True, "entries": "num_inverters"},
18171791
"pause_end_time": {"type": "sensor_list", "sensor_type": "none|string", "modify": True, "entries": "num_inverters"},
1818-
"inverter_limit": {"type": "sensor_list", "sensor_type": "integer", "modify": False, "zero": False, "entries": "num_inverters"},
1792+
"inverter_limit": {"type": "sensor_list", "sensor_type": "float", "modify": False, "zero": False, "entries": "num_inverters"},
18191793
"inverter_limit_charge": {"type": "sensor_list", "sensor_type": "integer", "modify": False, "zero": False, "entries": "num_inverters"},
1820-
"export_limit": {"type": "integer_list", "entries": "num_inverters"},
1794+
"export_limit": {"type": "sensor_list", "sensor_type": "float", "entries": "num_inverters"},
18211795
"inverter_battery_rate_min": {"type": "integer", "zero": False, "entries": "num_inverters"},
18221796
"inverter_reserve_max": {"type": "integer", "zero": False, "entries": "num_inverters"},
18231797
"battery_charge_power_curve: ": {"type": "int_float_dict"},

‎apps/predbat/execute.py‎

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def execute_plan(self):
349349
self.log("Export Hold (Demand mode) as export is now at/below target or freeze only is set - current SoC {} and target {}".format(self.soc_kw, discharge_soc))
350350
else:
351351
if (self.minutes_now < minutes_end) and ((minutes_start - self.minutes_now) <= self.set_window_minutes) and (self.export_limits_best[0] < 100):
352-
inverter.adjust_force_export(False, discharge_start_time, discharge_end_time)
352+
inverter.adjust_force_export(inverter.inv_has_discharge_enable_time, discharge_start_time, discharge_end_time)
353353
else:
354354
self.log("Not setting export as we are not yet within the export window - next time is {} - {}".format(self.time_abs_str(minutes_start), self.time_abs_str(minutes_end)))
355355
inverter.adjust_force_export(False)
@@ -378,6 +378,9 @@ def execute_plan(self):
378378
if resetDischarge:
379379
inverter.adjust_discharge_rate(0)
380380
resetDischarge = False
381+
if self.set_reserve_enable:
382+
inverter.adjust_reserve(min(inverter.soc_percent + 1, 100))
383+
resetReserve = False
381384
carHolding = True
382385
self.log("Disabling battery discharge while the car {} is charging".format(car_n))
383386
if "Hold for car" not in status:
@@ -391,11 +394,16 @@ def execute_plan(self):
391394
boostHolding = False
392395
if self.set_charge_window and self.iboost_enable and self.iboost_prevent_discharge and self.iboost_running_full and status not in ["Exporting", "Charging"]:
393396
if inverter.inv_has_timed_pause:
394-
inverter.adjust_pause_mode(pause_discharge=True)
395-
resetPause = False
397+
if resetPause:
398+
inverter.adjust_pause_mode(pause_discharge=True)
399+
resetPause = False
396400
else:
397-
inverter.adjust_discharge_rate(0)
398-
resetDischarge = False
401+
if resetDischarge:
402+
inverter.adjust_discharge_rate(0)
403+
resetDischarge = False
404+
if self.set_reserve_enable:
405+
inverter.adjust_reserve(min(inverter.soc_percent + 1, 100))
406+
resetReserve = False
399407
boostHolding = True
400408
self.log("Disabling battery discharge while iBoost is running")
401409
if "Hold for iBoost" not in status:
@@ -724,11 +732,11 @@ def fetch_inverter_data(self, create=True):
724732
self.reserve_current,
725733
self.soc_max,
726734
self.soc_kw,
727-
self.charge_rate_now * 60,
728-
self.discharge_rate_now * 60,
735+
self.charge_rate_now * MINUTE_WATT,
736+
self.discharge_rate_now * MINUTE_WATT,
729737
self.battery_rate_min * MINUTE_WATT,
730-
dp3(self.inverter_limit * 60),
731-
dp3(self.export_limit * 60),
738+
dp3(self.inverter_limit * MINUTE_WATT),
739+
dp3(self.export_limit * MINUTE_WATT),
732740
100 - int(self.battery_loss * 100),
733741
100 - int(self.battery_loss_discharge * 100),
734742
100 - int(self.inverter_loss * 100),

0 commit comments

Comments
 (0)