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`.
lon = 3.1234
toleranceSeconds = 3600
stationId = C0FFE123456789
lon = 3.1234
toleranceSeconds = 3600
stationId = C0FFE123456789
+stateFile = /tmp/portalmonitorstate
userName = yourname
password = yourpassword
\ No newline at end of file
userName = yourname
password = yourpassword
\ No newline at end of file
+# 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')
# read configuration file
conf = configparser.ConfigParser()
conf.read('portalmonitor.ini')
print(f"Current Power: {currentPower}")
if currentPower == 0:
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!')
+ else:
+ if stateCheck('OK', conf['config']['stateFile']):
+ print(f"Resolved: Inverter reports {currentPower}W")