Skip to content

Commit bc3cc8d

Browse files
authored
reimplemented FAST_LIMIT_DECREASE, removed %
## V1.94 ### script * add script functionality for a super high priority limit change if your powermeter falls below POWERMETER_MIN_POINT (#200) ### config * add `[CONTROL]`: `POWERMETER_MIN_POINT` * add `[COMMON]`: `ON_GRID_FEED_FAST_LIMIT_DECREASE`
1 parent 4678ad8 commit bc3cc8d

4 files changed

Lines changed: 18 additions & 24 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
## V1.94
44
### script
5-
* add script functionality for a super high priority limit change if your powermeter falls below POWERMETER_MIN_POINT (https://github.com/reserve85/HoymilesZeroExport/issues/197)
5+
* add script functionality for a super high priority limit change if your powermeter falls below POWERMETER_MIN_POINT (https://github.com/reserve85/HoymilesZeroExport/issues/200)
66
### config
77
* add `[CONTROL]`: `POWERMETER_MIN_POINT`
8-
* add `[COMMON]`: `ON_GRID_FEED_JUMP_TO_LIMIT_PERCENT`
8+
* add `[COMMON]`: `ON_GRID_FEED_FAST_LIMIT_DECREASE`
99

1010
## V1.93
1111
### script

HoymilesZeroExport.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,7 @@ def CreateDTU() -> DTU:
14351435
while True:
14361436
CONFIG_PROVIDER.update()
14371437
on_grid_usage_jump_to_limit_percent = CONFIG_PROVIDER.on_grid_usage_jump_to_limit_percent()
1438-
on_grid_feed_jump_to_limit_percent = CONFIG_PROVIDER.on_grid_feed_jump_to_limit_percent()
1438+
on_grid_feed_fast_limit_decrease = CONFIG_PROVIDER.on_grid_feed_fast_limit_decrease()
14391439
powermeter_target_point = CONFIG_PROVIDER.get_powermeter_target_point()
14401440
powermeter_max_point = CONFIG_PROVIDER.get_powermeter_max_point()
14411441
powermeter_min_point = CONFIG_PROVIDER.get_powermeter_min_point()
@@ -1466,13 +1466,8 @@ def CreateDTU() -> DTU:
14661466
if RemainingDelay > 0:
14671467
time.sleep(RemainingDelay)
14681468
break
1469-
elif powermeterWatts < powermeter_min_point:
1470-
if on_grid_feed_jump_to_limit_percent > 0:
1471-
newLimitSetpoint = CastToInt(GetMaxInverterWattFromAllInverters() * on_grid_feed_jump_to_limit_percent / 100)
1472-
if (newLimitSetpoint >= PreviousLimitSetpoint) and (on_grid_feed_jump_to_limit_percent != 100):
1473-
newLimitSetpoint = PreviousLimitSetpoint + powermeterWatts - powermeter_target_point
1474-
else:
1475-
newLimitSetpoint = PreviousLimitSetpoint + powermeterWatts - powermeter_target_point
1469+
elif (powermeterWatts < powermeter_min_point) and on_grid_feed_fast_limit_decrease:
1470+
newLimitSetpoint = PreviousLimitSetpoint + powermeterWatts - powermeter_target_point
14761471
newLimitSetpoint = ApplyLimitsToSetpoint(newLimitSetpoint)
14771472
SetLimit(newLimitSetpoint)
14781473
RemainingDelay = CastToInt((LOOP_INTERVAL_IN_SECONDS / POLL_INTERVAL_IN_SECONDS - x) * POLL_INTERVAL_IN_SECONDS)

HoymilesZeroExport_Config.ini

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,8 @@ POLL_INTERVAL_IN_SECONDS = 1
267267
# if your powermeter exceeds POWERMETER_MAX_POINT: immediatelly set the limit to predefined percent of HOY_MAX_WATT (if you have more than one inverter it´s the sum of all HOY_MAX_WATT)
268268
# value = 0 disables the feature. Values are possible from [0 to 100]
269269
ON_GRID_USAGE_JUMP_TO_LIMIT_PERCENT = 100
270-
# if your powermeter falls below POWERMETER_MIN_POINT: immediatelly set the limit to predefined percent of HOY_MAX_WATT (if you have more than one inverter it´s the sum of all HOY_MAX_WATT)
271-
# value = 0 disables the feature. Values are possible from [0 to 100]
272-
ON_GRID_FEED_JUMP_TO_LIMIT_PERCENT = 0
270+
# if your powermeter falls below POWERMETER_MIN_POINT: immediatelly decrease the limit
271+
ON_GRID_FEED_FAST_LIMIT_DECREASE = false
273272
# max difference between Limit and real output power in % of HOY_MAX_WATT (100 = disabled)
274273
MAX_DIFFERENCE_BETWEEN_LIMIT_AND_OUTPUTPOWER = 100
275274
# enable logging to file
@@ -303,7 +302,6 @@ POWERMETER_TOLERANCE = 25
303302
POWERMETER_MAX_POINT = 0
304303
# POWERMETER_MIN_POINT is the minimum power of your powermeter for the normal "regulation loop".
305304
# if your powermeter jumps under this point, the limit will be reduced instantly. it is like a "super high priority limit change".
306-
# if you defined ON_GRID_FEED_JUMP_TO_LIMIT_PERCENT > 0, then the limit will jump to the defined percent when it is lower than this point.
307305
POWERMETER_MIN_POINT = -600
308306

309307
# List of INVERTERS, based on COMMON/COUNT

config_provider.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ def get_powermeter_max_point(self):
2929
def get_powermeter_min_point(self):
3030
"""
3131
The minimum power of your powermeter for the normal "regulation loop".
32-
if your powermeter jumps under this point, the limit will be reduced instantly. it is like a "super high priority limit change".
33-
if you defined ON_GRID_FEED_JUMP_TO_LIMIT_PERCENT > 0, then the limit will jump to the defined percent when it is lower than this point.
32+
if your powermeter jumps under this point and ON_GRID_FEED_FAST_LIMIT_DECREASE = true, the limit will be reduced instantly. it is like a "super high priority limit change".
3433
"""
3534
pass
3635

@@ -40,9 +39,9 @@ def on_grid_usage_jump_to_limit_percent(self):
4039
"""
4140
pass
4241

43-
def on_grid_feed_jump_to_limit_percent(self):
42+
def on_grid_feed_fast_limit_decrease(self):
4443
"""
45-
If the powermeter falls below the min point, the limit will be increased to this percent of the powermeter value.
44+
If the powermeter falls below the min point, the limit will be immediatelly decreased.
4645
"""
4746
pass
4847

@@ -109,8 +108,8 @@ def get_powermeter_tolerance(self):
109108
def on_grid_usage_jump_to_limit_percent(self):
110109
return self.config.getint('COMMON', 'ON_GRID_USAGE_JUMP_TO_LIMIT_PERCENT')
111110

112-
def on_grid_feed_jump_to_limit_percent(self):
113-
return self.config.getint('COMMON', 'ON_GRID_FEED_JUMP_TO_LIMIT_PERCENT')
111+
def on_grid_feed_fast_limit_decrease(self):
112+
return self.config.getboolean('COMMON', 'ON_GRID_FEED_FAST_LIMIT_DECREASE')
114113

115114
def get_min_wattage_in_percent(self, inverter_idx):
116115
return self.config.getint('INVERTER_' + str(inverter_idx + 1), 'HOY_MIN_WATT_IN_PERCENT')
@@ -172,8 +171,10 @@ def cast_value(is_inverter_value, key, value):
172171
else:
173172
logger.error(f"Unknown inverter key {key}")
174173
else:
175-
if key in ['powermeter_target_point', 'powermeter_max_point', 'powermeter_min_point', 'powermeter_tolerance', 'on_grid_usage_jump_to_limit_percent', 'on_grid_feed_jump_to_limit_percent']:
174+
if key in ['powermeter_target_point', 'powermeter_max_point', 'powermeter_min_point', 'powermeter_tolerance', 'on_grid_usage_jump_to_limit_percent']:
176175
return int(value)
176+
elif key in ['on_grid_feed_fast_limit_decrease']:
177+
return bool(value)
177178
else:
178179
logger.error(f"Unknown common key {key}")
179180

@@ -214,8 +215,8 @@ def get_powermeter_tolerance(self):
214215
def on_grid_usage_jump_to_limit_percent(self):
215216
return self.common_config.get('on_grid_usage_jump_to_limit_percent')
216217

217-
def on_grid_feed_jump_to_limit_percent(self):
218-
return self.common_config.get('on_grid_feed_jump_to_limit_percent')
218+
def on_grid_feed_fast_limit_decrease(self):
219+
return self.common_config.get('on_grid_feed_fast_limit_decrease')
219220

220221
def get_min_wattage_in_percent(self, inverter_idx):
221222
if inverter_idx >= len(self.inverter_config):
@@ -255,7 +256,7 @@ def __init__(self, mqtt_broker, mqtt_port, client_id, mqtt_username, mqtt_passwo
255256
self.min_point = None
256257
self.tolerance = None
257258
self.on_grid_usage_jump_to_limit_percent = None
258-
self.on_grid_feed_jump_to_limit_percent = None
259+
self.on_grid_feed_fast_limit_decrease = None
259260
self.min_wattage_in_percent = []
260261
self.normal_wattage = []
261262
self.reduce_wattage = []

0 commit comments

Comments
 (0)