MPC optimization KeyError: 'inverter_is_hybrid'
martinarva opened this issue · 3 comments
martinarva commented
Describe the bug
Error running MPC optimization - KeyError: 'inverter_is_hybrid'
To Reproduce
Steps to reproduce the behavior
Expected behavior
No error
Screenshots
If applicable, add screenshots to help explain your problem.
Home Assistant installation type
- Home Assistant Core
Your hardware
- OS: Linux, Docker Compose
- Architecture: amd64
EMHASS installation type
- Docker Standalone
Additional context
Plant conf:
plant_conf:
P_to_grid_max: 13900
P_from_grid_max: 13900
module_model: # The PV module model
- 'CSUN_Eurasia_Energy_Systems_Industry_and_Trade_CSUN295_60M'
inverter_model: # The PV inverter model
- 'Fronius_International_GmbH__Fronius_Symo_12_0_3_208_240__240V_'
surface_tilt: # The tilt angle of your solar panels
- 30
surface_azimuth: # The azimuth angle of your PV installation
- 205
modules_per_string: # The number of modules per string
- 16
strings_per_inverter: # The number of used strings per inverter
- 2
inverter_is_hybrid: False # Set if it is a hybrid inverter (PV+batteries) or not
Pd_max: 12000 # If your system has a battery (set_use_battery=True), the maximum discharge power in Watts
Pc_max: 12000 # If your system has a battery (set_use_battery=True), the maximum charge power in Watts
eta_disch: 0.95 # If your system has a battery (set_use_battery=True), the discharge efficiency
eta_ch: 0.95 # If your system has a battery (set_use_battery=True), the charge efficiency
Enom: 20000 # If your system has a battery (set_use_battery=True), the total capacity of the battery stack in Wh
SOCmin: 0.1 # If your system has a battery (set_use_battery=True), the minimun allowable battery state of charge
SOCmax: 1 # If your system has a battery (set_use_battery=True), the minimun allowable battery state of charge
SOCtarget: 0.2 # If your system has a battery (set_use_battery=True), the desired battery state of charge at the end of each optimization cycle
Rest command:
naive_mpc_optim:
url: http://192.168.1.35:5001/action/naive-mpc-optim
method: POST
content_type: 'application/json'
payload: >-
{
"load_cost_forecast": {{
((state_attr('sensor.nordpool_import', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_import', 'raw_tomorrow') | map(attribute='value') | list)[now().hour:][:48]) | tojson
}},
"prod_price_forecast": {{
((state_attr('sensor.nordpool_kwh_ee_eur_99_10_0', 'raw_today') | map(attribute='value') | list + state_attr('sensor.nordpool_kwh_ee_eur_99_10_0', 'raw_tomorrow') | map(attribute='value') | list)[now().hour:][:48]) | tojson
}},
"prediction_horizon": {{
(min(48, (((state_attr('sensor.nordpool_kwh_ee_eur_99_10_0', 'raw_today')|map(attribute='value')|list + state_attr('sensor.nordpool_kwh_ee_eur_99_10_0', 'raw_tomorrow') | map(attribute='value')| list)[now().hour:][:48]|list|length)))) | tojson
}},
"pv_power_forecast": {{
(([states('sensor.solcast_pv_forecast_power_now')|int(0)] + state_attr('sensor.solcast_pv_forecast_forecast_today', 'detailedHourly')|selectattr('period_start','gt',utcnow()) | map(attribute='pv_estimate')|map('multiply',1000)|map('int')|list + state_attr('sensor.solcast_pv_forecast_forecast_tomorrow', 'detailedHourly')|selectattr('period_start','gt',utcnow()) | map(attribute='pv_estimate')|map('multiply',1000)|map('int')|list) | tojson)
}}
}
Logs:
2024-06-03 12:05:49,548 - web_server - INFO - Passed runtime parameters: {'load_cost_forecast': [0.2337642, 0.20594820000000003, 0.18140179999999997, 0.1716418, 0.1716784, 0.1772172, 0.2174162, 0.246074, 0.3062444, 0.3400994, 0.28909120000000005, 0.23241], 'prod_price_forecast': [0.12129, 0.09849, 0.07837, 0.07037, 0.07039999999999999, 0.07493999999999999, 0.10789, 0.13138, 0.1807, 0.20845, 0.19054000000000001, 0.14407999999999999], 'prediction_horizon': 12, 'pv_power_forecast': [7491, 7681, 6796, 6038, 5371, 4504, 3567, 2479, 1254, 292, 7, 0, 0, 0, 0, 0, 52, 616, 1548, 2421, 3538, 4744, 6038, 6545, 7145, 7816, 7644, 7137, 6333, 5340, 4176, 2915, 1640, 517, 15, 0]}
2024-06-03 12:05:49,548 - web_server - INFO - >> Setting input data dict
2024-06-03 12:05:49,549 - web_server - INFO - Setting up needed data
2024-06-03 12:05:49,560 - web_server - INFO - Retrieve hass get data method initiated...
2024-06-03 12:05:50,168 - web_server - INFO - Retrieving weather forecast data using method = list
2024-06-03 12:05:50,169 - web_server - INFO - Retrieving data from hass for load forecast using method = mlforecaster
2024-06-03 12:05:50,170 - web_server - INFO - Retrieve hass get data method initiated...
2024-06-03 12:05:51,037 - web_server - INFO - >> Performing naive MPC optimization...
2024-06-03 12:05:51,037 - web_server - INFO - Performing naive MPC optimization
2024-06-03 12:05:51,048 - web_server - INFO - Perform an iteration of a naive MPC controller
2024-06-03 12:05:51,050 - web_server - ERROR - Exception on /action/naive-mpc-optim [POST]
Traceback (most recent call last):
File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/flask/app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/emhass/web_server.py", line 157, in action_call
opt_res = naive_mpc_optim(input_data_dict, app.logger)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/emhass/command_line.py", line 398, in naive_mpc_optim
opt_res_naive_mpc = input_data_dict["opt"].perform_naive_mpc_optim(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/emhass/optimization.py", line 808, in perform_naive_mpc_optim
self.opt_res = self.perform_optimization(df_input_data, P_PV.values.ravel(), P_load.values.ravel(),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/emhass/optimization.py", line 215, in perform_optimization
if self.plant_conf['inverter_is_hybrid']:
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
KeyError: 'inverter_is_hybrid'
davidusb-geek commented
Is your configuration file well indented?
Like this:
plant_conf:
P_from_grid_max: 9000 # The maximum power that can be supplied by the utility grid in Watts
P_to_grid_max: 9000 # The maximum power that can be supplied to the utility grid in Watts
module_model: # The PV module model
- 'CSUN_Eurasia_Energy_Systems_Industry_and_Trade_CSUN295_60M'
inverter_model: # The PV inverter model
- 'Fronius_International_GmbH__Fronius_Primo_5_0_1_208_240__240V_'
surface_tilt: # The tilt angle of your solar panels
- 30
surface_azimuth: # The azimuth angle of your PV installation
- 205
modules_per_string: # The number of modules per string
- 16
strings_per_inverter: # The number of used strings per inverter
- 1
inverter_is_hybrid: False # Set if it is a hybrid inverter (PV+batteries) or not
davidusb-geek commented
And how are you passing your config to the docker run command?
martinarva commented
It was a trivial probem. Command + S did now save in Visual Studio, so changes in config_emhass.yaml were not saved. Feeling stupid but it is what it is.