foxesscloud 2.9.6__tar.gz → 2.9.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foxesscloud
3
- Version: 2.9.6
3
+ Version: 2.9.7
4
4
  Summary: library for accessing Fox ESS cloud data using Open API
5
5
  Author-email: Tony Matthews <tony@quasair.co.uk>
6
6
  Project-URL: Homepage, https://github.com/TonyM1958/FoxESS-Cloud
@@ -182,8 +182,9 @@ set_period() returns a period structure that can be used to build a list for set
182
182
  + max_soc: optional, default is 100
183
183
  + fdsoc: optional, default is 10. Used when setting a period with ForceDischarge mode
184
184
  + fdpwr: optional, default is 0. Used when setting a period with ForceDischarge mode
185
- + import_limit: optional, default is None (not set). Used when setting a period with ForceCharge mode
186
- + export_limit: optional, default is None (not set). Used when setting a period with ForceDischarge mode
185
+ + import_limit: optional, default is None (not set) but set to 0 if the mode is force discharge
186
+ + export_limit: optional, default is None (not set).
187
+ + pv_limit: optional, default is 1.5 x inverter rating.
187
188
  + price: optional, default None. Used to display plunge pricing for time period.
188
189
  + enable: sets whether this time segment is enable (1) or disabled (0). The default is enabled.
189
190
  + segment: optional, allows the parameters for the period to be passed as a dictionary instead of individual values.
@@ -832,13 +833,16 @@ This setting can be:
832
833
 
833
834
  # Version Info
834
835
 
836
+ 2.9.7 - 2026/03/18<br>
837
+ Add pv_limit to set_period().
838
+ Default import_linit to 0 for force discharge in set_period()
839
+
835
840
  2.9.6 - 2026/03/10<br>
836
841
  Fix problem setting fdsoc and fdpwr from segment for set_period().
837
842
  Correctly identify H1-G2 model inverter.
838
843
  Add maxChargeCurrent and maxDischargeCurrent to f.battery.
839
844
  Update battery charge derating with temperature so charge current is not 0.
840
845
 
841
-
842
846
  2.9.5 - 2026/02/27<br>
843
847
  Add step parameter to date_list().
844
848
  Get maxGroupCount from v3 scheduler and update f.max_periods with maximum number of time periods supported.
@@ -168,8 +168,9 @@ set_period() returns a period structure that can be used to build a list for set
168
168
  + max_soc: optional, default is 100
169
169
  + fdsoc: optional, default is 10. Used when setting a period with ForceDischarge mode
170
170
  + fdpwr: optional, default is 0. Used when setting a period with ForceDischarge mode
171
- + import_limit: optional, default is None (not set). Used when setting a period with ForceCharge mode
172
- + export_limit: optional, default is None (not set). Used when setting a period with ForceDischarge mode
171
+ + import_limit: optional, default is None (not set) but set to 0 if the mode is force discharge
172
+ + export_limit: optional, default is None (not set).
173
+ + pv_limit: optional, default is 1.5 x inverter rating.
173
174
  + price: optional, default None. Used to display plunge pricing for time period.
174
175
  + enable: sets whether this time segment is enable (1) or disabled (0). The default is enabled.
175
176
  + segment: optional, allows the parameters for the period to be passed as a dictionary instead of individual values.
@@ -818,13 +819,16 @@ This setting can be:
818
819
 
819
820
  # Version Info
820
821
 
822
+ 2.9.7 - 2026/03/18<br>
823
+ Add pv_limit to set_period().
824
+ Default import_linit to 0 for force discharge in set_period()
825
+
821
826
  2.9.6 - 2026/03/10<br>
822
827
  Fix problem setting fdsoc and fdpwr from segment for set_period().
823
828
  Correctly identify H1-G2 model inverter.
824
829
  Add maxChargeCurrent and maxDischargeCurrent to f.battery.
825
830
  Update battery charge derating with temperature so charge current is not 0.
826
831
 
827
-
828
832
  2.9.5 - 2026/02/27<br>
829
833
  Add step parameter to date_list().
830
834
  Get maxGroupCount from v3 scheduler and update f.max_periods with maximum number of time periods supported.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "foxesscloud"
7
- version = "2.9.6"
7
+ version = "2.9.7"
8
8
  authors = [
9
9
  {name="Tony Matthews", email="tony@quasair.co.uk"},
10
10
  ]
@@ -1,7 +1,7 @@
1
1
  ##################################################################################################
2
2
  """
3
3
  Module: Fox ESS Cloud
4
- Updated: 05 March 2026
4
+ Updated: 18 March 2026
5
5
  By: Tony Matthews
6
6
  """
7
7
  ##################################################################################################
@@ -10,7 +10,7 @@ By: Tony Matthews
10
10
  # ALL RIGHTS ARE RESERVED © Tony Matthews 2023
11
11
  ##################################################################################################
12
12
 
13
- version = "1.11.2"
13
+ version = "1.11.3"
14
14
  print(f"FoxESS-Cloud version {version}")
15
15
 
16
16
  debug_setting = 1
@@ -1478,7 +1478,7 @@ def set_period(start=None, end=None, mode=None, min_soc=None, max_soc=None, fdso
1478
1478
  if quiet == 0:
1479
1479
  s = f" {hours_time(start)}-{hours_time(end)} {mode}, minsoc {min_soc}%"
1480
1480
  s += f", maxsoc {max_soc}%" if max_soc is not None and 'ForceCharge' in mode else ""
1481
- s += f", fdPwr {fdpwr}W, fdSoC {fdsoc}%" if ('ForceCharge' in mod or 'ForceDischarge' in mode) else ""
1481
+ s += f", fdPwr {fdpwr}W, fdSoC {fdsoc}%" if ('ForceCharge' in mode or 'ForceDischarge' in mode) else ""
1482
1482
  s += f", {price:.2f}p/kWh" if price is not None else ""
1483
1483
  output(s, 1)
1484
1484
  start_h, start_m = split_hours(start)
@@ -1,7 +1,7 @@
1
1
  ##################################################################################################
2
2
  """
3
3
  Module: Fox ESS Cloud using Open API
4
- Updated: 10 March 2026
4
+ Updated: 18 March 2026
5
5
  By: Tony Matthews
6
6
  """
7
7
  ##################################################################################################
@@ -10,7 +10,7 @@ By: Tony Matthews
10
10
  # ALL RIGHTS ARE RESERVED © Tony Matthews 2024
11
11
  ##################################################################################################
12
12
 
13
- version = "2.9.6"
13
+ version = "2.9.7"
14
14
  print(f"FoxESS-Cloud Open API version {version}")
15
15
 
16
16
  debug_setting = 1
@@ -1246,7 +1246,7 @@ def build_strategy_from_schedule():
1246
1246
  ##################################################################################################
1247
1247
 
1248
1248
  # create time segment structure. Note: end time is exclusive.
1249
- def set_period(start=None, end=None, mode=None, min_soc=None, max_soc=None, fdsoc=None, fdpwr=None, import_limit=None, export_limit=None, price=None, segment=None, enable=1, quiet=1):
1249
+ def set_period(start=None, end=None, mode=None, min_soc=None, max_soc=None, fdsoc=None, fdpwr=None, import_limit=None, export_limit=None, pv_limit=None, price=None, segment=None, enable=1, quiet=1):
1250
1250
  global schedule, device
1251
1251
  if schedule is None or schedule.get('maxsoc') is None:
1252
1252
  get_schedule()
@@ -1260,6 +1260,7 @@ def set_period(start=None, end=None, mode=None, min_soc=None, max_soc=None, fdso
1260
1260
  fdpwr = segment.get('fdpwr')
1261
1261
  import_limit = segment.get('import_limit')
1262
1262
  export_limit = segment.get('export_limit')
1263
+ pv_limit = segment.get('pv_limit')
1263
1264
  price = segment.get('price')
1264
1265
  start = time_hours(start)
1265
1266
  # adjust exclusive time to inclusive
@@ -1279,6 +1280,8 @@ def set_period(start=None, end=None, mode=None, min_soc=None, max_soc=None, fdso
1279
1280
  fdsoc = min_soc if fdsoc is None else fdsoc
1280
1281
  power = (device['power'] * 1000) if device.get('power') is not None else None
1281
1282
  fdpwr = power if fdpwr is None and device.get('power') is not None and ('ForceCharge' in mode or 'ForceDischarge' in mode) else fdpwr
1283
+ pv_limit = int(1.5 * power) if pv_limit is None and device.get('power') is not None and ('ForceCharge' in mode or 'ForceDischarge' in mode) else pv_limit
1284
+ import_limit = 0 if import_limit is None and 'ForceDischarge' in mode else import_limit
1282
1285
  fdpwr = 0 if fdpwr is None else fdpwr
1283
1286
  if min_soc < 0 or min_soc > 100:
1284
1287
  output(f"set_period(): ** min_soc must be between 0 and 100")
@@ -1295,14 +1298,17 @@ def set_period(start=None, end=None, mode=None, min_soc=None, max_soc=None, fdso
1295
1298
  if quiet == 0:
1296
1299
  s = f" {hours_time(start)}-{hours_time(end)} {mode}, minsoc {min_soc}%"
1297
1300
  s += f", maxsoc {max_soc}%" if max_soc is not None and 'ForceCharge' in mode else ""
1298
- s += f", fdPwr {fdpwr}W, fdSoC {fdsoc}%" if ('ForceCharge' in mode or 'ForceDischarge' in mode) else ""
1301
+ s += f", fdPwr {int(fdpwr)}W, fdSoC {fdsoc}%" if ('ForceCharge' in mode or 'ForceDischarge' in mode) else ""
1302
+ s += f", exportLimit {int(export_limit)}W" if export_limit is not None else ""
1303
+ s += f", importLimit {int(import_limit)}W" if import_limit is not None else ""
1304
+ s += f", pvLimit {int(pv_limit)}W" if pv_limit is not None else ""
1299
1305
  s += f", {price:.2f}p/kWh" if price is not None else ""
1300
1306
  output(s, 1)
1301
1307
  start_hour, start_minute = split_hours(start)
1302
1308
  end_hour, end_minute = split_hours(end)
1303
1309
  period = {'enable': enable, 'startHour': start_hour, 'startMinute': start_minute, 'endHour': end_hour, 'endMinute': end_minute, 'workMode': mode,
1304
1310
  'extraParam': {'minSocOnGrid': int(min_soc), 'fdSoc': int(fdsoc), 'fdPwr': int(fdpwr), 'maxSoc': max_soc, 'importLimit': import_limit,
1305
- 'exportLimit': export_limit }}
1311
+ 'exportLimit': export_limit, 'pvLimit': pv_limit}}
1306
1312
  return period
1307
1313
 
1308
1314
  # set a schedule from a period or list of time segment periods
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foxesscloud
3
- Version: 2.9.6
3
+ Version: 2.9.7
4
4
  Summary: library for accessing Fox ESS cloud data using Open API
5
5
  Author-email: Tony Matthews <tony@quasair.co.uk>
6
6
  Project-URL: Homepage, https://github.com/TonyM1958/FoxESS-Cloud
@@ -182,8 +182,9 @@ set_period() returns a period structure that can be used to build a list for set
182
182
  + max_soc: optional, default is 100
183
183
  + fdsoc: optional, default is 10. Used when setting a period with ForceDischarge mode
184
184
  + fdpwr: optional, default is 0. Used when setting a period with ForceDischarge mode
185
- + import_limit: optional, default is None (not set). Used when setting a period with ForceCharge mode
186
- + export_limit: optional, default is None (not set). Used when setting a period with ForceDischarge mode
185
+ + import_limit: optional, default is None (not set) but set to 0 if the mode is force discharge
186
+ + export_limit: optional, default is None (not set).
187
+ + pv_limit: optional, default is 1.5 x inverter rating.
187
188
  + price: optional, default None. Used to display plunge pricing for time period.
188
189
  + enable: sets whether this time segment is enable (1) or disabled (0). The default is enabled.
189
190
  + segment: optional, allows the parameters for the period to be passed as a dictionary instead of individual values.
@@ -832,13 +833,16 @@ This setting can be:
832
833
 
833
834
  # Version Info
834
835
 
836
+ 2.9.7 - 2026/03/18<br>
837
+ Add pv_limit to set_period().
838
+ Default import_linit to 0 for force discharge in set_period()
839
+
835
840
  2.9.6 - 2026/03/10<br>
836
841
  Fix problem setting fdsoc and fdpwr from segment for set_period().
837
842
  Correctly identify H1-G2 model inverter.
838
843
  Add maxChargeCurrent and maxDischargeCurrent to f.battery.
839
844
  Update battery charge derating with temperature so charge current is not 0.
840
845
 
841
-
842
846
  2.9.5 - 2026/02/27<br>
843
847
  Add step parameter to date_list().
844
848
  Get maxGroupCount from v3 scheduler and update f.max_periods with maximum number of time periods supported.
File without changes
File without changes