@@ -85,7 +85,10 @@ def __init__(self,
8585 self ._thermostats = []
8686 # Setup selenium options
8787 self ._selenium_options = Options ()
88- self ._selenium_options .headless = True
88+ self ._selenium_options .add_argument ('--headless' )
89+ self ._selenium_options .add_argument ('--no-sandbox' )
90+ self ._selenium_options .add_argument ('--disable-gpu' )
91+ self ._selenium_options .add_argument ('--disable-dev-shm-usage' )
8992 self ._selenium_options .add_argument ("--window-size=1920,1200" )
9093 if not self ._ssl_verify :
9194 self ._selenium_options .add_argument ('ignore-certificate-errors' )
@@ -145,7 +148,7 @@ def _scrape_thermostat_data(self, device_name):
145148 break
146149 else :
147150 err = 'Error: Can\' t find ' + ' or ' .join (self ._valid_device_types ) + \
148- '\ in : ' + ' ' .join (row_text )
151+ ' in : ' + ' ' .join (row_text )
149152 self ._logger .error (err )
150153 FritzAdvancedThermostatKeyError (err )
151154 # Wait until site is fully loaded
@@ -259,56 +262,57 @@ def _generate_data_pkg(self, device_name, dry_run=True):
259262 data_pkg .append (key + '=' + quote (str (value ), safe = '' ))
260263 return '&' .join (data_pkg )
261264
262- def commit (self , device_name ):
263- self ._check_device_name (device_name )
264- dry_run_url = '/' .join (
265- [self ._prefixed_host , 'net' , 'home_auto_hkr_edit.lua' ])
266- set_url = '/' .join ([self ._prefixed_host , 'data.lua' ])
267- dry_run_data = self ._generate_data_pkg (device_name , dry_run = True )
268- set_data = self ._generate_data_pkg (device_name , dry_run = False )
269- dry_run_response = requests .post (
270- dry_run_url ,
271- headers = self ._generate_headers (dry_run_data ),
272- data = dry_run_data ,
273- verify = self ._ssl_verify )
274- if dry_run_response .status_code == 200 :
275- try :
276- dry_run_check = json .loads (dry_run_response .text )
277- if dry_run_check ['ok' ]:
278- response = requests .post (
279- set_url ,
280- headers = self ._generate_headers (set_data ),
281- data = set_data ,
282- verify = self ._ssl_verify )
283- if response .status_code == 200 :
284- check = json .loads (response .text )
285- if check ['pid' ] != 'sh_dev' :
286- err = 'Error: Something went wrong setting the thermostat values'
287- err = '\n ' + response .text
265+ def commit (self ):
266+ for dev in self ._thermostat_data .keys ():
267+ self ._check_device_name (dev )
268+ dry_run_url = '/' .join (
269+ [self ._prefixed_host , 'net' , 'home_auto_hkr_edit.lua' ])
270+ set_url = '/' .join ([self ._prefixed_host , 'data.lua' ])
271+ dry_run_data = self ._generate_data_pkg (dev , dry_run = True )
272+ set_data = self ._generate_data_pkg (dev , dry_run = False )
273+ dry_run_response = requests .post (
274+ dry_run_url ,
275+ headers = self ._generate_headers (dry_run_data ),
276+ data = dry_run_data ,
277+ verify = self ._ssl_verify )
278+ if dry_run_response .status_code == 200 :
279+ try :
280+ dry_run_check = json .loads (dry_run_response .text )
281+ if dry_run_check ['ok' ]:
282+ response = requests .post (
283+ set_url ,
284+ headers = self ._generate_headers (set_data ),
285+ data = set_data ,
286+ verify = self ._ssl_verify )
287+ if response .status_code == 200 :
288+ check = json .loads (response .text )
289+ if check ['pid' ] != 'sh_dev' :
290+ err = 'Error: Something went wrong setting the thermostat values'
291+ err = '\n ' + response .text
292+ self ._logger .error (err )
293+ raise FritzAdvancedThermostatExecutionError (err )
294+ else :
295+ err = 'Error: ' + str (response .status_code )
288296 self ._logger .error (err )
289- raise FritzAdvancedThermostatExecutionError (err )
297+ raise FritzAdvancedThermostatConnectionError (err )
290298 else :
291- err = 'Error: ' + str (response .status_code )
299+ err = 'Error in: ' + ',' .join (dry_run_check ['tomark' ])
300+ err += '\n ' + dry_run_check ['alert' ]
292301 self ._logger .error (err )
293- raise FritzAdvancedThermostatConnectionError (err )
294- else :
295- err = 'Error in: ' + ',' .join (dry_run_check ['tomark' ])
296- err += '\n ' + dry_run_check ['alert' ]
302+ raise FritzAdvancedThermostatExecutionError (err )
303+ except json .decoder .JSONDecodeError :
304+ if response :
305+ err = 'Error: Something went wrong on setting the thermostat values'
306+ err += '\n ' + response .text
307+ else :
308+ err = 'Error: Something went wrong on dry run'
309+ err += '\n ' + dry_run_response .text
297310 self ._logger .error (err )
298311 raise FritzAdvancedThermostatExecutionError (err )
299- except json .decoder .JSONDecodeError :
300- if response :
301- err = 'Error: Something went wrong on setting the thermostat values'
302- err += '\n ' + response .text
303- else :
304- err = 'Error: Something went wrong on dry run'
305- err += '\n ' + dry_run_response .text
312+ else :
313+ err = 'Error: ' + str (dry_run_response .status_code )
306314 self ._logger .error (err )
307- raise FritzAdvancedThermostatExecutionError (err )
308- else :
309- err = 'Error: ' + str (dry_run_response .status_code )
310- self ._logger .error (err )
311- raise FritzAdvancedThermostatConnectionError ()
315+ raise FritzAdvancedThermostatConnectionError ()
312316
313317 def set_thermostat_offset (self , device_name , offset ):
314318 self ._check_device_name (device_name )
0 commit comments