diff --git a/README.md b/README.md index 07cfb247..1728f792 100644 --- a/README.md +++ b/README.md @@ -292,6 +292,26 @@ shell_command: ``` And you should be careful that the list of dictionaries has the correct length, which is the number of defined deferrable loads. +### Computed variables and published data + +Below you can find a list of the variables resulting from EMHASS computation, showed in the charts, and then published to Home Assistant through the ```publish_data``` command: + +| EMHASS varibale | Definition | Home Assistant published sensor | +| --------------- | ---------- | --------------------------------| +| P_PV | Forecasted power generation from your solar panels (Watts). This helps you predict how much solar energy you will produce during the forecast period. | sensor.p_pv_forecast | +| P_Load | Forecasted household power consumption (Watts). This gives you an idea of how much energy your appliances are expected to use. | sensor.p_load_forecast | +| P_deferrableX [X = 0, 1, 2, ...] | Forecasted power consumption of deferrable loads (Watts). Deferable loads are appliances that can be managed by EMHASS. EMHASS helps you optimise energy usage by prioritising solar self-consumption and minimizing reliance on the grid or by taking advantage or supply and feed-in tariff volatility. You can have multiple deferable loads and you use this sensor in HA to control these loads via smart switch or other IoT means at your disposal. | sensor.p_deferrableX | +| P_grid_pos | Forecasted power imported from the grid (Watts). This indicates the amount of energy you are expected to draw from the grid when your solar production is insufficient to meet your needs or it is advantagous to consume from the grid. | - | +| P_grid_neg | Forecasted power exported to the grid (Watts). This indicates the amount of excess solar energy you are expected to send back to the grid during the forecast period. | - | +| P_batt | Forecasted (dis)charge power load (Watt) for the battery (if installed). If negative it indicates the battery is charging, if positive that the battery is discharging. | sensor.p_batt_forecast | +| P_grid | Forecasted net power flow between your home and the grid (Watts). This is calculated as P_grid_pos - P_grid_neg. A positive value indicates net export, while a negative value indicates net import. | sensor.p_grid_forecast | +| SOC_opt | Forecasted battery optimized Status Of Charge (SOC) percentage level | sensor.soc_batt_forecast | +| unit_load_cost | Forecasted cost per unit of energy you pay to the grid (typically "Currency"/kWh). This helps you understand the expected energy cost during the forecast period. | sensor.unit_load_cost | +| unit_prod_price | Forecasted price you receive for selling excess solar energy back to the grid (typically "Currency"/kWh). This helps you understand the potential income from your solar production. | sensor.unit_prod_price | +| cost_profit | Forecasted profit or loss from your energy usage for the forecast period. This is calculated as unit_load_cost * P_Load - unit_prod_price * P_grid_pos. A positive value indicates a profit, while a negative value indicates a loss. | sensor.total_cost_profit_value | +| cost_fun_cost | Forecasted cost associated with deferring loads to maximize solar self-consumption. This helps you evaluate the trade-off between managing the load and not managing and potential cost savings. | sensor.total_cost_fun_value | + + ## Passing your own data In EMHASS we have basically 4 forecasts to deal with: diff --git a/src/emhass/command_line.py b/src/emhass/command_line.py index ba50c6ff..5fdf58a7 100644 --- a/src/emhass/command_line.py +++ b/src/emhass/command_line.py @@ -488,7 +488,7 @@ def publish_data(input_data_dict: dict, logger: logging.Logger, custom_deferrable_forecast_id = params['passed_data']['custom_deferrable_forecast_id'] for k in range(input_data_dict['opt'].optim_conf['num_def_loads']): if "P_deferrable{}".format(k) not in opt_res_latest.columns: - logger.error("P_deferrable{}".format(k)+" was not found in results DataFrame. Optimization task may need to be relaunched or it did not converged to a solution.") + logger.error("P_deferrable{}".format(k)+" was not found in results DataFrame. Optimization task may need to be relaunched or it did not converge to a solution.") else: input_data_dict['rh'].post_data(opt_res_latest["P_deferrable{}".format(k)], idx_closest, custom_deferrable_forecast_id[k]["entity_id"], @@ -500,7 +500,7 @@ def publish_data(input_data_dict: dict, logger: logging.Logger, # Publish battery power if input_data_dict['opt'].optim_conf['set_use_battery']: if 'P_batt' not in opt_res_latest.columns: - logger.error("P_batt was not found in results DataFrame. Optimization task may need to be relaunched or it did not converged to a solution.") + logger.error("P_batt was not found in results DataFrame. Optimization task may need to be relaunched or it did not converge to a solution.") else: custom_batt_forecast_id = params['passed_data']['custom_batt_forecast_id'] input_data_dict['rh'].post_data(opt_res_latest['P_batt'], idx_closest,