Skip to content

Commit 7d1b031

Browse files
committed
Added selenium options and refactoring
1 parent f457ccb commit 7d1b031

File tree

4 files changed

+53
-48
lines changed

4 files changed

+53
-48
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ local_test.py
55
build
66
dist
77
*.egg-info
8+
.DS_Store

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ try:
5757
current_offset = fat.get_thermostat_offset(device_name)
5858
print('Current offset of ' + device_name + ': ' + str(current_offset))
5959
fat.set_thermostat_offset(device_name, current_offset + 1)
60-
fat.commit(device_name)
60+
fat.commit()
6161

6262
new_offset = fat.get_thermostat_offset(device_name, force_reload=True)
6363
print('New offset of ' + device_name + ': ' + str(new_offset))

fritz_advanced_thermostat/fritz_advanced_thermostat.py

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -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)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
setup(
2222
name="fritz-advanced-thermostat",
23-
version="0.2.1",
23+
version="0.2.2",
2424
description="A library for setting FRITZ!DECT thermostat values (e.g. offset, holidays, timer), that can't be set via AHA requests.",
2525
long_description=long_description,
2626
long_description_content_type='text/markdown',

0 commit comments

Comments
 (0)