@@ -310,7 +310,7 @@ def set_tariff_data(tariff_data):
310310
311311
312312@service ("powerwall.set_settings" )
313- def set_settings (reserve_percentage = None , mode = None , allow_grid_charging = None , allow_battery_export = None ):
313+ def set_settings (reserve_percentage = None , mode = None , allow_grid_charging = None , allow_battery_export = None , verify = False ):
314314 """yaml
315315 name: Set Powerwall settings
316316 description: Changes Powerwall settings
@@ -337,12 +337,61 @@ def set_settings(reserve_percentage=None, mode=None, allow_grid_charging=None, a
337337 description: enable battery export else PV only
338338 selector:
339339 boolean:
340+ verify:
341+ description: verify settings have been updated
342+ selector:
343+ boolean:
340344 """
341- api_wrapper .set_powerwall_settings (
345+ updated = False
346+ retry_count = 0
347+ while not updated :
348+ if retry_count == 3 :
349+ raise Exception ("Failed to update Powerwall settings" )
350+
351+ api_wrapper .set_powerwall_settings (
352+ email = pyscript .app_config ["email" ],
353+ refresh_token = pyscript .app_config ["refresh_token" ],
354+ reserve_percentage = reserve_percentage ,
355+ mode = mode ,
356+ allow_grid_charging = allow_grid_charging ,
357+ allow_battery_export = allow_battery_export
358+ )
359+ updated = True
360+ retry_count += 1
361+ if verify :
362+ settings = api_wrapper .get_powerwall_settings (
363+ email = pyscript .app_config ["email" ],
364+ refresh_token = pyscript .app_config ["refresh_token" ]
365+ )
366+ if reserve_percentage is not None :
367+ if settings ["reserve_percentage" ] == reserve_percentage :
368+ reserve_percentage = None
369+ else :
370+ updated = False
371+ if mode is not None :
372+ if settings ["mode" ] == mode :
373+ mode = None
374+ else :
375+ updated = False
376+ if allow_grid_charging is not None :
377+ if settings ["allow_grid_charging" ] == allow_grid_charging :
378+ allow_grid_charging = None
379+ else :
380+ updated = False
381+ if allow_battery_export is not None :
382+ if settings ["allow_battery_export" ] == allow_battery_export :
383+ allow_battery_export = None
384+ else :
385+ updated = False
386+
387+
388+ @service ("powerwall.get_settings" , supports_response = "only" )
389+ def get_settings ():
390+ """yaml
391+ name: Get Powerwall settings
392+ description: Gets Powerwall settings
393+ """
394+ return api_wrapper .get_powerwall_settings (
342395 email = pyscript .app_config ["email" ],
343- refresh_token = pyscript .app_config ["refresh_token" ],
344- reserve_percentage = reserve_percentage ,
345- mode = mode ,
346- allow_grid_charging = allow_grid_charging ,
347- allow_battery_export = allow_battery_export
396+ refresh_token = pyscript .app_config ["refresh_token" ]
348397 )
0 commit comments