X-Git-Url: http://git.sven.stormbind.net/?a=blobdiff_plain;f=home%2Fportalmonitor.py;h=fdae4ba21e67bd9c84458cf3a570cb7e00877d86;hb=3a9925d20c42d5caca9ef636f6891c7632766162;hp=1316b2f6807d50233c13f511c81767d56e040091;hpb=f5b70d2a4161683e3c687f1a70b571241af88308;p=sven%2Fscripts.git diff --git a/home/portalmonitor.py b/home/portalmonitor.py index 1316b2f..fdae4ba 100755 --- a/home/portalmonitor.py +++ b/home/portalmonitor.py @@ -1,26 +1,26 @@ #!/usr/bin/env python3 +import argparse import requests import time import sys import configparser from suntime import Sun -from optparse import OptionParser -parser = OptionParser(usage="usage: %prog [options]") -parser.add_option("-s", +parser = argparse.ArgumentParser() +parser.add_argument("-s", "--status", action="store_true", dest="printStatus", help="Print Status Information", default=False) -parser.add_option("-f", +parser.add_argument("-f", "--force", action="store_true", dest="force", help="Force retrieval of Power value", default=False) -(options, args) = parser.parse_args() +args = parser.parse_args() def isDaylight(lat, lon, toleranceSeconds): @@ -63,20 +63,43 @@ def getCurrentPower(userName, password, stationId): return float(power) +# use our stateFile to determine if we have a state change +# used to decide if we print something - thus generate a mail - later on +def stateCheck(newState, stateFile): + try: + with open(stateFile, "r") as f: + oldState = f.read() + except FileNotFoundError: + oldState = "NULL" + + if newState == oldState: + change = False + else: + change = True + with open(stateFile, "w") as f: + f.write(newState) + + return change + + # read configuration file conf = configparser.ConfigParser() conf.read('portalmonitor.ini') # retrieve current power value as reported by envertecportal if isDaylight(conf['config'].getfloat('lat'), conf['config'].getfloat('lon'), - conf['config'].getint('toleranceSeconds')) or options.force: + conf['config'].getint('toleranceSeconds')) or args.force: currentPower = getCurrentPower(conf['config']['userName'], conf['config']['password'], conf['config']['stationId']) - if options.printStatus: + if args.printStatus: print(f"Current Power: {currentPower}") if currentPower == 0: - print('Error: Power dropped to 0 but we should have daylight!') + if stateCheck('FAILED', conf['config']['stateFile']): + print('Error: Power dropped to 0 but we should have daylight!') sys.exit(1) + else: + if stateCheck('OK', conf['config']['stateFile']): + print(f"Resolved: Inverter reports {currentPower}W")