From a3744e93b3c458726d9eb211a22a52c0fb1c688e Mon Sep 17 00:00:00 2001 From: Sven Hoexter Date: Mon, 31 Jan 2022 11:38:24 +0100 Subject: [PATCH] Add a state tracking to envertech portalmonitor Instead of sending a mail by generating output on every execution we track the state of setup we receive from the portal. Output is only created whenever we have a state change. That also enables us to create "resolve" messages when the state changes back to be ok. Introduces a new configuration option `stateFile`. --- home/portalmonitor.ini | 1 + home/portalmonitor.py | 25 ++++++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/home/portalmonitor.ini b/home/portalmonitor.ini index 93b78ff..984460b 100644 --- a/home/portalmonitor.ini +++ b/home/portalmonitor.ini @@ -3,5 +3,6 @@ lat = 51.1234 lon = 3.1234 toleranceSeconds = 3600 stationId = C0FFE123456789 +stateFile = /tmp/portalmonitorstate userName = yourname password = yourpassword \ No newline at end of file diff --git a/home/portalmonitor.py b/home/portalmonitor.py index 1316b2f..3acd3f1 100755 --- a/home/portalmonitor.py +++ b/home/portalmonitor.py @@ -63,6 +63,25 @@ 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') @@ -78,5 +97,9 @@ if isDaylight(conf['config'].getfloat('lat'), conf['config'].getfloat('lon'), 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") -- 2.39.5