emhass 0.10.6__py3-none-any.whl → 0.11.1__py3-none-any.whl
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.
- emhass/command_line.py +178 -85
- emhass/data/associations.csv +63 -0
- emhass/data/config_defaults.json +117 -0
- emhass/forecast.py +38 -36
- emhass/machine_learning_forecaster.py +2 -1
- emhass/machine_learning_regressor.py +7 -2
- emhass/optimization.py +62 -62
- emhass/retrieve_hass.py +9 -4
- emhass/static/advanced.html +2 -1
- emhass/static/basic.html +4 -2
- emhass/static/configuration_list.html +44 -0
- emhass/static/configuration_script.js +872 -0
- emhass/static/data/param_definitions.json +424 -0
- emhass/static/script.js +345 -322
- emhass/static/style.css +267 -8
- emhass/templates/configuration.html +75 -0
- emhass/templates/index.html +15 -8
- emhass/utils.py +626 -302
- emhass/web_server.py +322 -213
- {emhass-0.10.6.dist-info → emhass-0.11.1.dist-info}/METADATA +207 -169
- emhass-0.11.1.dist-info/RECORD +32 -0
- {emhass-0.10.6.dist-info → emhass-0.11.1.dist-info}/WHEEL +1 -1
- emhass-0.10.6.dist-info/RECORD +0 -26
- {emhass-0.10.6.dist-info → emhass-0.11.1.dist-info}/LICENSE +0 -0
- {emhass-0.10.6.dist-info → emhass-0.11.1.dist-info}/entry_points.txt +0 -0
- {emhass-0.10.6.dist-info → emhass-0.11.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,424 @@
|
|
1
|
+
{
|
2
|
+
"Local": {
|
3
|
+
"costfun": {
|
4
|
+
"friendly_name": "Cost function",
|
5
|
+
"Description": "Define the type of cost function.",
|
6
|
+
"input": "select",
|
7
|
+
"select_options": [
|
8
|
+
"profit",
|
9
|
+
"cost",
|
10
|
+
"self-consumption"
|
11
|
+
],
|
12
|
+
"default_value": "profit"
|
13
|
+
},
|
14
|
+
"sensor_power_photovoltaics": {
|
15
|
+
"friendly_name": "Sensor power sensor",
|
16
|
+
"Description": "This is the name of the photovoltaic power-produced sensor in Watts from Home Assistant. For example: ‘sensor.power_photovoltaics’.",
|
17
|
+
"input": "string",
|
18
|
+
"default_value": "sensor.power_photovoltaics"
|
19
|
+
},
|
20
|
+
"sensor_power_load_no_var_loads": {
|
21
|
+
"friendly_name": "Sensor power loads with no variable loads",
|
22
|
+
"Description": "The name of the household power consumption sensor in Watts from Home Assistant. The deferrable loads that we will want to include in the optimization problem should be subtracted from this sensor in HASS. For example: ‘sensor.power_load_no_var_loads’",
|
23
|
+
"input": "string",
|
24
|
+
"default_value": "sensor.power_load_no_var_loads"
|
25
|
+
},
|
26
|
+
"sensor_replace_zero": {
|
27
|
+
"friendly_name": "Sensor to replace NAN values with 0s",
|
28
|
+
"Description": "The list of retrieved variables that we would want to replace NANs (if they exist) with zeros.",
|
29
|
+
"input": "array.string",
|
30
|
+
"default_value": "sensor.power_photovoltaics"
|
31
|
+
},
|
32
|
+
"sensor_linear_interp": {
|
33
|
+
"friendly_name": "Sensor to replace NAN values with linear interpolation",
|
34
|
+
"Description": "The list of retrieved variables that we would want to interpolate NANs values using linear interpolation",
|
35
|
+
"input": "array.string",
|
36
|
+
"default_value": "sensor.power_photovoltaics"
|
37
|
+
},
|
38
|
+
"continual_publish": {
|
39
|
+
"friendly_name": "Continually publish optimization results",
|
40
|
+
"Description": "set to True to save entities to .json after an optimization run. Then automatically republish the saved entities (with updated current state value) every freq minutes. entity data saved to data_path/entities.",
|
41
|
+
"input": "boolean",
|
42
|
+
"default_value": false
|
43
|
+
},
|
44
|
+
"logging_level": {
|
45
|
+
"friendly_name": "Logging level",
|
46
|
+
"Description": "This is the name of the photovoltaic power-produced sensor in Watts from Home Assistant. For example: ‘sensor.power_photovoltaics’.",
|
47
|
+
"input": "select",
|
48
|
+
"select_options": [
|
49
|
+
"INFO",
|
50
|
+
"DEBUG",
|
51
|
+
"WARNING",
|
52
|
+
"ERROR"
|
53
|
+
],
|
54
|
+
"default_value": "INFO"
|
55
|
+
}
|
56
|
+
},
|
57
|
+
"System": {
|
58
|
+
"optimization_time_step": {
|
59
|
+
"friendly_name": "Optimization steps per minute (timesteps)",
|
60
|
+
"Description": "The time step to resample retrieved data from hass. This parameter is given in minutes. It should not be defined too low or you will run into memory problems when defining the Linear Programming optimization. Defaults to 30",
|
61
|
+
"input": "int",
|
62
|
+
"default_value": 30
|
63
|
+
},
|
64
|
+
"historic_days_to_retrieve": {
|
65
|
+
"friendly_name": "Historic days to retrieve",
|
66
|
+
"Description": "We will retrieve data from now to days_to_retrieve days. Defaults to 2",
|
67
|
+
"input": "int",
|
68
|
+
"default_value": 2
|
69
|
+
},
|
70
|
+
"load_negative": {
|
71
|
+
"friendly_name": "Load negative values",
|
72
|
+
"Description": "Set this parameter to True if the retrieved load variable is negative by convention. Defaults to False",
|
73
|
+
"input": "boolean",
|
74
|
+
"default_value": false
|
75
|
+
},
|
76
|
+
"set_zero_min": {
|
77
|
+
"friendly_name": "Remove Negatives",
|
78
|
+
"Description": "Set this parameter to True to give a special treatment for a minimum value saturation to zero for power consumption data. Values below zero are replaced by nans. Defaults to True.",
|
79
|
+
"input": "boolean",
|
80
|
+
"default_value": true
|
81
|
+
},
|
82
|
+
"method_ts_round": {
|
83
|
+
"friendly_name": "Timestamp rounding method",
|
84
|
+
"Description": "Set the method for timestamp rounding, options are: first, last and nearest.",
|
85
|
+
"input": "select",
|
86
|
+
"select_options": [
|
87
|
+
"nearest",
|
88
|
+
"first",
|
89
|
+
"last"
|
90
|
+
],
|
91
|
+
"default_value": "nearest"
|
92
|
+
},
|
93
|
+
"delta_forecast_daily": {
|
94
|
+
"friendly_name": "Number of forecasted days",
|
95
|
+
"Description": "The number of days for forecasted data. Defaults to 1.",
|
96
|
+
"input": "int",
|
97
|
+
"default_value": 1
|
98
|
+
},
|
99
|
+
"load_forecast_method": {
|
100
|
+
"friendly_name": "Load forecast method",
|
101
|
+
"Description": "The load forecast method that will be used. The options are ‘csv’ to load a CSV file or ‘naive’ for a simple 1-day persistence model.",
|
102
|
+
"input": "select",
|
103
|
+
"select_options": [
|
104
|
+
"naive",
|
105
|
+
"csv"
|
106
|
+
],
|
107
|
+
"default_value": "naive"
|
108
|
+
},
|
109
|
+
"set_total_pv_sell": {
|
110
|
+
"friendly_name": "PV straight to grid",
|
111
|
+
"Description": "Set this parameter to true to consider that all the PV power produced is injected to the grid. No direct self-consumption. The default is false, for a system with direct self-consumption.",
|
112
|
+
"input": "boolean",
|
113
|
+
"default_value": false
|
114
|
+
},
|
115
|
+
"lp_solver": {
|
116
|
+
"friendly_name": "Linear programming solver",
|
117
|
+
"Description": "Set the name of the linear programming solver that will be used. Defaults to ‘COIN_CMD’. The options are ‘PULP_CBC_CMD’, ‘GLPK_CMD’ and ‘COIN_CMD’.",
|
118
|
+
"input": "select",
|
119
|
+
"select_options": [
|
120
|
+
"default",
|
121
|
+
"COIN_CMD",
|
122
|
+
"PULP_CBC_CMD",
|
123
|
+
"GLPK_CMD"
|
124
|
+
],
|
125
|
+
"default_value": "COIN_CMD"
|
126
|
+
},
|
127
|
+
"lp_solver_path": {
|
128
|
+
"friendly_name": "Linear programming solver program path",
|
129
|
+
"Description": "Set the path to the LP solver. Defaults to ‘/usr/bin/cbc’.",
|
130
|
+
"input": "text",
|
131
|
+
"default_value": "/usr/bin/cbc"
|
132
|
+
},
|
133
|
+
"weather_forecast_method": {
|
134
|
+
"friendly_name": "Weather forecast method",
|
135
|
+
"Description": "This will define the weather forecast method that will be used. options are 'scrapper' (ClearOutside), 'Solcast', 'solar.forecast' (forecast.solar) and 'csv' to load a CSV file. When loading a CSV file this will be directly considered as the PV power forecast in Watts.",
|
136
|
+
"input": "select",
|
137
|
+
"select_options": [
|
138
|
+
"scrapper",
|
139
|
+
"solcast",
|
140
|
+
"solar.forecast",
|
141
|
+
"csv"
|
142
|
+
],
|
143
|
+
"default_value": "scrapper"
|
144
|
+
},
|
145
|
+
"maximum_power_from_grid": {
|
146
|
+
"friendly_name": "Max power from grid",
|
147
|
+
"Description": "The maximum power that can be supplied by the utility grid in Watts (consumption). Defaults to 9000.",
|
148
|
+
"input": "int",
|
149
|
+
"default_value": 9000
|
150
|
+
},
|
151
|
+
"maximum_power_to_grid": {
|
152
|
+
"friendly_name": "Max export power to grid",
|
153
|
+
"Description": "The maximum power that can be supplied to the utility grid in Watts (injection). Defaults to 9000.",
|
154
|
+
"input": "int",
|
155
|
+
"default_value": 9000
|
156
|
+
},
|
157
|
+
"inverter_is_hybrid": {
|
158
|
+
"friendly_name": "Inverter is a hybrid",
|
159
|
+
"Description": "Set to True to consider that the installation inverter is hybrid for PV and batteries (Default False)",
|
160
|
+
"input": "boolean",
|
161
|
+
"default_value": false
|
162
|
+
},
|
163
|
+
"compute_curtailment": {
|
164
|
+
"friendly_name": "Set compute curtailment (grid export limit)",
|
165
|
+
"Description": "Set to True to compute a special PV curtailment variable (Default False)",
|
166
|
+
"input": "boolean",
|
167
|
+
"default_value": false
|
168
|
+
}
|
169
|
+
},
|
170
|
+
"Tariff": {
|
171
|
+
"load_cost_forecast_method": {
|
172
|
+
"friendly_name": "Load cost method",
|
173
|
+
"Description": "Define the method that will be used for load cost forecast. The options are ‘hp_hc_periods’ for peak and non-peak hours contracts, and ‘csv’ to load custom cost from CSV file.",
|
174
|
+
"input": "select",
|
175
|
+
"select_options": [
|
176
|
+
"hp_hc_periods",
|
177
|
+
"csv"
|
178
|
+
],
|
179
|
+
"default_value": "hp_hc_periods"
|
180
|
+
},
|
181
|
+
"load_peak_hour_periods": {
|
182
|
+
"friendly_name": "List peak hour periods",
|
183
|
+
"Description": "A list of peak hour periods for load consumption from the grid. This is useful if you have a contract with peak and non-peak hours.",
|
184
|
+
"input": "array.time",
|
185
|
+
"default_value": {
|
186
|
+
"period_hp_template": [{"start": "02:54"},{"end": "15:24"}]
|
187
|
+
},
|
188
|
+
"requires": {
|
189
|
+
"load_cost_forecast_method": "hp_hc_periods"
|
190
|
+
}
|
191
|
+
},
|
192
|
+
"load_peak_hours_cost": {
|
193
|
+
"friendly_name": "Peak hours electrical energy cost",
|
194
|
+
"Description": "The cost of the electrical energy during peak hours",
|
195
|
+
"input": "float",
|
196
|
+
"requires": {
|
197
|
+
"load_cost_forecast_method": "hp_hc_periods"
|
198
|
+
},
|
199
|
+
"default_value": 0.1907
|
200
|
+
},
|
201
|
+
"load_offpeak_hours_cost": {
|
202
|
+
"friendly_name": "Off-peak hours electrical energy cost",
|
203
|
+
"Description": "The cost of the electrical energy during off-peak hours",
|
204
|
+
"input": "float",
|
205
|
+
"requires": {
|
206
|
+
"load_cost_forecast_method": "hp_hc_periods"
|
207
|
+
},
|
208
|
+
"default_value": 0.1419
|
209
|
+
},
|
210
|
+
"production_price_forecast_method": {
|
211
|
+
"friendly_name": "PV power production price forecast method",
|
212
|
+
"Description": "Define the method that will be used for PV power production price forecast. This is the price that is paid by the utility for energy injected into the grid. The options are ‘constant’ for a constant fixed value or ‘csv’ to load custom price forecasts from a CSV file.",
|
213
|
+
"input": "select",
|
214
|
+
"select_options": [
|
215
|
+
"constant",
|
216
|
+
"csv"
|
217
|
+
],
|
218
|
+
"default_value": "constant"
|
219
|
+
},
|
220
|
+
"photovoltaic_production_sell_price": {
|
221
|
+
"friendly_name": "Constant PV power production price",
|
222
|
+
"Description": "The paid price for energy injected to the grid from excess PV production in €/kWh.",
|
223
|
+
"input": "float",
|
224
|
+
"default_value": 0.1419,
|
225
|
+
"requires": {
|
226
|
+
"production_price_forecast_method": "constant"
|
227
|
+
}
|
228
|
+
}
|
229
|
+
},
|
230
|
+
"Solar System (PV)": {
|
231
|
+
"pv_module_model": {
|
232
|
+
"friendly_name": "PV module model name",
|
233
|
+
"Description": "The PV module model. This parameter can be a list of items to enable the simulation of mixed orientation systems.",
|
234
|
+
"input": "array.string",
|
235
|
+
"input_attributes": "_'s",
|
236
|
+
"default_value": "CSUN_Eurasia_Energy_Systems_Industry_and_Trade_CSUN295_60M"
|
237
|
+
},
|
238
|
+
"pv_inverter_model": {
|
239
|
+
"friendly_name": "The PV inverter model name",
|
240
|
+
"Description": "The PV inverter model. This parameter can be a list of items to enable the simulation of mixed orientation systems.",
|
241
|
+
"input": "array.string",
|
242
|
+
"input_attributes": "_'s",
|
243
|
+
"default_value": "Fronius_International_GmbH__Fronius_Primo_5_0_1_208_240__240V_"
|
244
|
+
},
|
245
|
+
"surface_tilt": {
|
246
|
+
"friendly_name": "The PV panel tilt",
|
247
|
+
"Description": "The tilt angle of your solar panels. Defaults to 30. This parameter can be a list of items to enable the simulation of mixed orientation systems.",
|
248
|
+
"input": "array.int",
|
249
|
+
"default_value": 30
|
250
|
+
},
|
251
|
+
"surface_azimuth": {
|
252
|
+
"friendly_name": "The PV azimuth (direction)",
|
253
|
+
"Description": "The azimuth of your PV installation. Defaults to 205. This parameter can be a list of items to enable the simulation of mixed orientation systems.",
|
254
|
+
"input": "array.int",
|
255
|
+
"default_value": 205
|
256
|
+
},
|
257
|
+
"modules_per_string": {
|
258
|
+
"friendly_name": "Number of modules per string",
|
259
|
+
"Description": "The number of modules per string. Defaults to 16. This parameter can be a list of items to enable the simulation of mixed orientation systems.",
|
260
|
+
"input": "array.int",
|
261
|
+
"default_value": 16
|
262
|
+
},
|
263
|
+
"strings_per_inverter": {
|
264
|
+
"friendly_name": "Number of strings per inverter",
|
265
|
+
"Description": "The number of used strings per inverter. Defaults to 1. This parameter can be a list of items to enable the simulation of mixed orientation systems.",
|
266
|
+
"input": "array.int",
|
267
|
+
"default_value": 1
|
268
|
+
}
|
269
|
+
},
|
270
|
+
"Deferrable Loads": {
|
271
|
+
"number_of_deferrable_loads": {
|
272
|
+
"friendly_name": "Number of deferrable loads",
|
273
|
+
"Description": "Define the number of deferrable loads (appliances to shift) to consider. Defaults to 2.",
|
274
|
+
"input": "int",
|
275
|
+
"default_value": 2
|
276
|
+
},
|
277
|
+
"nominal_power_of_deferrable_loads": {
|
278
|
+
"friendly_name": "Deferrable load nominal power",
|
279
|
+
"Description": "The nominal (calculated max) power for each deferrable load in Watts.",
|
280
|
+
"input": "array.float",
|
281
|
+
"default_value": 3000.0
|
282
|
+
},
|
283
|
+
"operating_hours_of_each_deferrable_load": {
|
284
|
+
"friendly_name": "Deferrable load operating hours",
|
285
|
+
"Description": "The total number of hours that each deferrable load should operate",
|
286
|
+
"input": "array.int",
|
287
|
+
"default_value": 0
|
288
|
+
},
|
289
|
+
"treat_deferrable_load_as_semi_cont": {
|
290
|
+
"friendly_name": "Deferrable load as semi-continuous (on/off) variable",
|
291
|
+
"Description": "Semi-continuous variables (True) are variables that must take a value that can be either their maximum or minimum/zero (for example On = Maximum load, Off = 0 W). Non semi-continuous (which means continuous) variables (False) can take any values between their maximum and minimum",
|
292
|
+
"input": "array.boolean",
|
293
|
+
"default_value": true
|
294
|
+
},
|
295
|
+
"set_deferrable_load_single_constant": {
|
296
|
+
"friendly_name": "Deferrable load run single constant per optimization",
|
297
|
+
"Description": "Define if we should set each deferrable load as a constant fixed value variable with just one startup for each optimization task",
|
298
|
+
"input": "array.boolean",
|
299
|
+
"default_value": false
|
300
|
+
},
|
301
|
+
"set_deferrable_startup_penalty": {
|
302
|
+
"friendly_name": "Set deferrable startup penalty",
|
303
|
+
"Description": "For penalty P, each time the deferrable load turns on will incur an additional cost of P * number_of_deferrable_loads * cost_of_electricity at that time",
|
304
|
+
"input": "array.float",
|
305
|
+
"default_value": 0.0
|
306
|
+
},
|
307
|
+
"start_timesteps_of_each_deferrable_load": {
|
308
|
+
"friendly_name": "Deferrable start timestamp",
|
309
|
+
"Description": "The timestep as from which each deferrable load is allowed to operate (if you don’t want the deferrable load to use the whole optimization time window). If you specify a value of 0 (or negative), the deferrable load will be optimized as from the beginning of the complete prediction horizon window.",
|
310
|
+
"input": "array.int",
|
311
|
+
"default_value": 0
|
312
|
+
},
|
313
|
+
"end_timesteps_of_each_deferrable_load": {
|
314
|
+
"friendly_name": "Deferrable end timestamp",
|
315
|
+
"Description": "The timestep before which each deferrable load should operate. The deferrable load is not allowed to operate after the specified time step. If a value of 0 (or negative) is provided, the deferrable load is allowed to operate in the complete optimization window)",
|
316
|
+
"input": "array.int",
|
317
|
+
"default_value": 0
|
318
|
+
}
|
319
|
+
},
|
320
|
+
"Battery": {
|
321
|
+
"set_use_battery": {
|
322
|
+
"friendly_name": "Enable Battery",
|
323
|
+
"Description": "Set to True if we should consider an energy storage device such as a Li-Ion battery. Defaults to False",
|
324
|
+
"input": "boolean",
|
325
|
+
"default_value": false
|
326
|
+
},
|
327
|
+
"set_nocharge_from_grid": {
|
328
|
+
"friendly_name": "Forbid charging battery from grid",
|
329
|
+
"Description": "Set this to true if you want to forbid charging the battery from the grid. The battery will only be charged from excess PV",
|
330
|
+
"input": "boolean",
|
331
|
+
"default_value": false
|
332
|
+
},
|
333
|
+
"set_nodischarge_to_grid": {
|
334
|
+
"friendly_name": "Forbid battery discharge to the grid",
|
335
|
+
"Description": "Set this to true if you want to forbid discharging battery power to the grid.",
|
336
|
+
"input": "boolean",
|
337
|
+
"default_value": true
|
338
|
+
},
|
339
|
+
"set_battery_dynamic": {
|
340
|
+
"friendly_name": "Set Battery dynamic (dis)charge power limiting",
|
341
|
+
"Description": "Set a power dynamic limiting condition to the battery power. This is an additional constraint on the battery dynamic in power per unit of time (timestep), which allows you to set a percentage of the battery’s nominal full power as the maximum power allowed for (dis)charge.",
|
342
|
+
"input": "boolean",
|
343
|
+
"default_value": false
|
344
|
+
},
|
345
|
+
"battery_dynamic_max": {
|
346
|
+
"friendly_name": "Maximum percentage of battery discharge per timestep",
|
347
|
+
"Description": "The maximum positive (for discharge) battery power dynamic. This is the allowed power variation (in percentage) of battery maximum power per unit of timestep",
|
348
|
+
"input": "float",
|
349
|
+
"default_value": 0.9,
|
350
|
+
"requires": {
|
351
|
+
"set_battery_dynamic": true
|
352
|
+
}
|
353
|
+
},
|
354
|
+
"battery_dynamic_min": {
|
355
|
+
"friendly_name": "Maximum percentage of battery charge per timestep",
|
356
|
+
"Description": "The maximum negative (for charge) battery power dynamic. This is the allowed power variation (in percentage) of battery maximum power per timestep.",
|
357
|
+
"input": "float",
|
358
|
+
"default_value": -0.9,
|
359
|
+
"requires": {
|
360
|
+
"set_battery_dynamic": true
|
361
|
+
}
|
362
|
+
},
|
363
|
+
"weight_battery_discharge": {
|
364
|
+
"friendly_name": "Add cost weight for battery discharge",
|
365
|
+
"Description": "An additional weight (currency/ kWh) applied in the cost function to battery usage for discharging",
|
366
|
+
"input": "float",
|
367
|
+
"default_value": 1.0
|
368
|
+
},
|
369
|
+
"weight_battery_charge": {
|
370
|
+
"friendly_name": "Add cost weight for battery charge",
|
371
|
+
"Description": "An additional weight (currency/ kWh) applied in the cost function to battery usage for charging",
|
372
|
+
"input": "float",
|
373
|
+
"default_value": 1.0
|
374
|
+
},
|
375
|
+
"battery_discharge_power_max": {
|
376
|
+
"friendly_name": "Max battery discharge power",
|
377
|
+
"Description": "The maximum discharge power in Watts",
|
378
|
+
"input": "int",
|
379
|
+
"default_value": 1000
|
380
|
+
},
|
381
|
+
"battery_charge_power_max": {
|
382
|
+
"friendly_name": "Max battery charge power",
|
383
|
+
"Description": "The maximum charge power in Watts",
|
384
|
+
"input": "int",
|
385
|
+
"default_value": 1000
|
386
|
+
},
|
387
|
+
"battery_discharge_efficiency": {
|
388
|
+
"friendly_name": "Battery discharge efficiency",
|
389
|
+
"Description": "The discharge efficiency. (percentage/100)",
|
390
|
+
"input": "float",
|
391
|
+
"default_value": 0.95
|
392
|
+
},
|
393
|
+
"battery_charge_efficiency": {
|
394
|
+
"friendly_name": "Battery charge efficiency",
|
395
|
+
"Description": "The charge efficiency. (percentage/100)",
|
396
|
+
"input": "float",
|
397
|
+
"default_value": 0.95
|
398
|
+
},
|
399
|
+
"battery_nominal_energy_capacity": {
|
400
|
+
"friendly_name": "Battery total capacity",
|
401
|
+
"Description": "The total capacity of the battery stack in Wh",
|
402
|
+
"input": "int",
|
403
|
+
"default_value": 5000
|
404
|
+
},
|
405
|
+
"battery_minimum_state_of_charge": {
|
406
|
+
"friendly_name": "Minimum Battery charge percentage",
|
407
|
+
"Description": "The minimum allowable battery state of charge. (percentage/100)",
|
408
|
+
"input": "float",
|
409
|
+
"default_value": 0.3
|
410
|
+
},
|
411
|
+
"battery_maximum_state_of_charge": {
|
412
|
+
"friendly_name": "Maximum Battery charge percentage",
|
413
|
+
"Description": "The maximum allowable battery state of charge. (percentage/100)",
|
414
|
+
"input": "float",
|
415
|
+
"default_value": 0.9
|
416
|
+
},
|
417
|
+
"battery_target_state_of_charge": {
|
418
|
+
"friendly_name": "Battery desired percentage after optimization",
|
419
|
+
"Description": "The desired battery state of charge at the end of each optimization cycle. (percentage/100)",
|
420
|
+
"input": "float",
|
421
|
+
"default_value": 0.6
|
422
|
+
}
|
423
|
+
}
|
424
|
+
}
|