@@ -916,8 +916,6 @@ def run_prediction(self, charge_limit, charge_window, discharge_window, discharg
916916 self .set_state ("predbat.soc_kw_best_h8" , state = self .dp3 (predict_soc [60 * 8 ]), attributes = {'friendly_name' : 'Predicted SOC kwh best + 8h' , 'state_class' : 'measurement' , 'unit_of_measurement' : 'kwh' , 'icon' : 'mdi:battery' })
917917 self .set_state ("predbat.soc_kw_best_h12" , state = self .dp3 (predict_soc [60 * 12 ]), attributes = {'friendly_name' : 'Predicted SOC kwh best + 12h' , 'state_class' : 'measurement' , 'unit_of_measurement' : 'kwh' , 'icon' : 'mdi:battery' })
918918 self .set_state ("predbat.best_soc_min_kwh" , state = self .dp3 (soc_min ), attributes = {'friendly_name' : 'Predicted minimum SOC best' , 'state_class' : 'measurement' , 'unit_of_measurement' : 'kwh' , 'icon' : 'mdi:battery-arrow-down-outline' })
919- self .publish_charge_limit (charge_limit , charge_window , charge_limit_percent , best = True )
920- self .publish_discharge_limit (discharge_window , discharge_enable , best = True )
921919 self .set_state ("predbat.best_export_energy" , state = self .dp3 (export_kwh ), attributes = {'results' : export_kwh_time , 'friendly_name' : 'Predicted exports best' , 'state_class' : 'measurement' , 'unit_of_measurement' : 'kwh' , 'icon' : 'mdi:transmission-tower-export' })
922920 self .set_state ("predbat.best_load_energy" , state = self .dp3 (load_kwh ), attributes = {'friendly_name' : 'Predicted load best' , 'state_class' : 'measurement' , 'unit_of_measurement' : 'kwh' , 'icon' : 'mdi:home-lightning-bolt' })
923921 self .set_state ("predbat.best_pv_energy" , state = self .dp3 (pv_kwh ), attributes = {'results' : pv_kwh_time , 'friendly_name' : 'Predicted PV best' , 'state_class' : 'measurement' , 'unit_of_measurement' : 'kwh' , 'icon' : 'mdi:solar-power' })
@@ -1926,24 +1924,29 @@ def update_pred(self):
19261924 self .discharge_enable_best [window_n ] = best_discharge
19271925
19281926
1929- # Final simulation of best, do 10% and normal scenario
1930- best_metric10 , self .charge_limit_percent_best10 , import_kwh_battery10 , import_kwh_house10 , export_kwh10 , soc_min10 , soc10 = self .run_prediction (self .charge_limit_best , self .charge_window_best , self .discharge_window_best , self .discharge_enable_best , load_minutes , pv_forecast_minute10 , save = 'best10' )
1931- best_metric , self .charge_limit_percent_best , import_kwh_battery , import_kwh_house , export_kwh , soc_min , soc = self .run_prediction (self .charge_limit_best , self .charge_window_best , self .discharge_window_best , self .discharge_enable_best , load_minutes , pv_forecast_minute , save = 'best' )
1932- self .log ("Best charging limit socs {} export {} gives import battery {} house {} export {} metric {} metric10 {}" .format
1933- (self .charge_limit_best , self .discharge_enable_best , self .dp2 (import_kwh_battery ), self .dp2 (import_kwh_house ), self .dp2 (export_kwh ), self .dp2 (best_metric ), self .dp2 (best_metric10 )))
1934-
1935- # Filter out any unused charge windows
1936- if self .get_arg ('set_charge_window' , False ):
1937- self .charge_limit_best , self .charge_window_best = self .discard_unused_charge_slots (self .charge_limit_best , self .charge_window_best , self .reserve )
1938- self .log ("Filtered charge windows {} {} reserve {}" .format (self .charge_limit_best , self .charge_window_best , self .reserve ))
1939- else :
1940- self .log ("Unfiltered charge windows {} {} reserve {}" .format (self .charge_limit_best , self .charge_window_best , self .reserve ))
1927+ if self .get_arg ('calculate_best' , False ):
1928+ # Final simulation of best, do 10% and normal scenario
1929+ best_metric10 , self .charge_limit_percent_best10 , import_kwh_battery10 , import_kwh_house10 , export_kwh10 , soc_min10 , soc10 = self .run_prediction (self .charge_limit_best , self .charge_window_best , self .discharge_window_best , self .discharge_enable_best , load_minutes , pv_forecast_minute10 , save = 'best10' )
1930+ best_metric , self .charge_limit_percent_best , import_kwh_battery , import_kwh_house , export_kwh , soc_min , soc = self .run_prediction (self .charge_limit_best , self .charge_window_best , self .discharge_window_best , self .discharge_enable_best , load_minutes , pv_forecast_minute , save = 'best' )
1931+ self .log ("Best charging limit socs {} export {} gives import battery {} house {} export {} metric {} metric10 {}" .format
1932+ (self .charge_limit_best , self .discharge_enable_best , self .dp2 (import_kwh_battery ), self .dp2 (import_kwh_house ), self .dp2 (export_kwh ), self .dp2 (best_metric ), self .dp2 (best_metric10 )))
1933+
1934+ # Filter out any unused charge windows
1935+ if self .get_arg ('set_charge_window' , False ):
1936+ self .charge_limit_best , self .charge_window_best = self .discard_unused_charge_slots (self .charge_limit_best , self .charge_window_best , self .reserve )
1937+ self .log ("Filtered charge windows {} {} reserve {}" .format (self .charge_limit_best , self .charge_window_best , self .reserve ))
1938+ else :
1939+ self .log ("Unfiltered charge windows {} {} reserve {}" .format (self .charge_limit_best , self .charge_window_best , self .reserve ))
19411940
1942- # Filter out any unused discharge windows
1943- if self .get_arg ('set_discharge_window' , False ) and self .discharge_window_best :
1944- # Filter out the windows we disabled
1945- self .discharge_enable_best , self .discharge_window_best = self .discard_unused_discharge_slots (self .discharge_enable_best , self .discharge_window_best )
1946- self .log ("Discharge windows now {} {}" .format (self .discharge_enable_best , self .discharge_window_best ))
1941+ # Filter out any unused discharge windows
1942+ if self .get_arg ('set_discharge_window' , False ) and self .discharge_window_best :
1943+ # Filter out the windows we disabled
1944+ self .discharge_enable_best , self .discharge_window_best = self .discard_unused_discharge_slots (self .discharge_enable_best , self .discharge_window_best )
1945+ self .log ("Discharge windows now {} {}" .format (self .discharge_enable_best , self .discharge_window_best ))
1946+
1947+ # Publish charge and discharge window best
1948+ self .publish_charge_limit (self .charge_limit_best , self .charge_window_best , self .charge_limit_percent_best , best = True )
1949+ self .publish_discharge_limit (self .discharge_window_best , self .discharge_enable_best , best = True )
19471950
19481951 status = "Idle"
19491952 for inverter in self .inverters :
0 commit comments