]> git.sven.stormbind.net Git - sven/scripts.git/blob - home/portalmonitor.py
13a7b98ba55207ad7861809264eea7857cad400f
[sven/scripts.git] / home / portalmonitor.py
1 #!/usr/bin/env python3
2
3 import requests
4 import time
5 import sys
6 import configparser
7 from suntime import Sun
8 from optparse import OptionParser
9
10 parser = OptionParser(usage="usage: %prog [options]")
11 parser.add_option("-s",
12                   "--status",
13                   action="store_true",
14                   dest="printStatus",
15                   help="Print Status Information",
16                   default=False)
17 parser.add_option("-f",
18                   "--force",
19                   action="store_true",
20                   dest="force",
21                   help="Force retrieval of Power value",
22                   default=False)
23 (options, args) = parser.parse_args()
24
25
26 def isDaylight(lat, lon, toleranceSeconds):
27     daylight = False
28     sun = Sun(lat, lon)
29     sunriseTimestamp = int(sun.get_local_sunrise_time().timestamp())
30     sunsetTimestamp = int(sun.get_local_sunset_time().timestamp())
31     nowTimestamp = int(time.time())
32
33     if ((sunriseTimestamp + toleranceSeconds) < nowTimestamp) and (
34         (sunsetTimestamp - toleranceSeconds) > nowTimestamp):
35         daylight = True
36
37     return daylight
38
39
40 def getCurrentPower(userName, password, stationId):
41     with requests.Session() as s:
42         r = s.post('https://www.envertecportal.com/apiaccount/login',
43                    data={
44                        'userName': userName,
45                        'pwd': password
46                    },
47                    timeout=(10, 30))
48
49         r = s.post('https://www.envertecportal.com/ApiStations/getStationInfo',
50                    data={
51                        'stationId': stationId
52                    },
53                    timeout=(10, 60)).json()
54         power = r['Data']['Power']
55
56         r = s.post('https://www.envertecportal.com/apiAccount/Logout',
57                    timeout=(10, 30))
58
59     return float(power)
60
61
62 # read configuration file
63 conf = configparser.ConfigParser()
64 conf.read('portalmonitor.ini')
65
66 # retrieve current power value as reported by envertecportal
67 if isDaylight(conf['config'].getfloat('lat'), conf['config'].getfloat('lon'),
68               conf['config'].getint('toleranceSeconds')) or options.force:
69     currentPower = getCurrentPower(conf['config']['userName'],
70                                    conf['config']['password'],
71                                    conf['config']['stationId'])
72
73     if options.printStatus:
74         print('Current Power: ' + str(currentPower))
75
76     if currentPower == 0:
77         print('Error: Power dropped to 0 but we should have daylight!')
78         sys.exit(1)