-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathprogram.py
More file actions
119 lines (77 loc) · 3.4 KB
/
program.py
File metadata and controls
119 lines (77 loc) · 3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
from model.website import sparkWebsite
from utils.log import log
from utils.setting import setting as s
from utils.telegram_bot import telegram_bot as tb
import datetime, time, os
currentWebsiteSession = sparkWebsite()
def do_resetprotect(arg):
'''
non verbose to reset protect of single meter serial on current login session,
'''
retries = True
while retries:
try:
br = currentWebsiteSession.METER.resetMeter(arg)
retries = False
return br._states != -1
except Exception as e:
print(e)
return False
def do_findingProtectedMeterAndReset(profile):
#1 flag for current base url from setting
print('\n' + profile['baseurl']+'\t:')
files = os.listdir()
for fl in files:
if fl.endswith(".csv"):
os.remove(fl)
#2 get meter status, failure retry count
retriesCount = s().Data['retry_count_strategy']
while retriesCount > 0:
try:
#3 loging in
currentWebsiteSession = sparkWebsite(profile['baseurl'], profile['username'], profile['password'])
meterStates = currentWebsiteSession.METER.getReadLatestState()['readings']
state = 'state'
sn = 'serial'
addr = 'address'
iii = 0
telegramMessage = []
# finding meter
for meterstate in meterStates:
#filter by protect and totalizer SN
if str(meterstate[state]).lower() == "protect" and str(meterstate['serial']).find('SM100E')<0:
iii += 1
gb = meterstate['ground_name']
print('%s Reset for SN: %-25s ADDR: %-50s on GB: %-50s ' %
(iii, meterstate[sn], meterstate[addr], gb))
# do reset
if do_resetprotect(meterstate[sn]):
currentLog = log(meterstate)
fn = currentLog.saveLogToCSV(gb, datetime.datetime.utcnow())
telegramMessage.append('\n%s\t %s\t %s\t %s' % (meterstate[sn], meterstate['ground_name'], meterstate[addr], meterstate['heartbeat_end'] ))
currentLog.saveCSVtoSQLDB(gb)
currentLog.saveCsvLogToBlob(fn)
if len(telegramMessage) > 0:
messg = '%s (%s meter/s)\n %s' % ( profile['baseurl'], len(telegramMessage), str('\n').join(telegramMessage) )
tb().sendMessageToAllRegisteredChannel(messg)
telegramMessage.clear()
retriesCount = 0
except Exception as e :
print(e)
retriesCount -= 1
if __name__ == "__main__":
# Read setting
sparkCloudCredentials = s().Data['credentials']
start_time = datetime.datetime.now()
runs = True
# while runs:
# delay
# while datetime.datetime.now() < start_time:
# time.sleep(15)
for profile in sparkCloudCredentials:
#0 skip disabled config
if profile.get('disabled', False):
continue
do_findingProtectedMeterAndReset(profile)
# start_time = datetime.datetime.now() + datetime.timedelta( seconds = s().Data['delayed_thread_seconds'] )
# print("Sleep until %s" % (start_time) )