-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpump_control.py
More file actions
executable file
·116 lines (81 loc) · 2.39 KB
/
pump_control.py
File metadata and controls
executable file
·116 lines (81 loc) · 2.39 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
import os.path
# from datetime import datetime, date, time
import logging
import datetime
import shelve
from time import sleep
import sys
import gmail
import fetcher
import pump
import triggers
import web_server
import BaseHTTPServer
import threading
logger = ''
def load_config():
config = shelve.open('config')
klist = list(config.keys())
copy = {};
for key in klist:
copy[key] = config[key]
config.close()
return copy
def setup_logger():
global logger
logger = logging.getLogger('pump_control')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('/var/log/pump.log')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
config={}
try:
setup_logger()
server_address = ('', 8888)
serv = BaseHTTPServer.HTTPServer(server_address, web_server.httpServHandler)
t=threading.Thread(target=serv.serve_forever)
t.daemon=True
t.start()
sleeptime = 1
running = False
config = load_config()
logger.info("Config loaded")
fetcher = fetcher.Fetcher(config['bomurl'])
w=triggers.WindTrigger(fetcher)
s=triggers.ScheduledTrigger()
m=triggers.ManualTrigger()
triggers=[m,s,w]
while (True):
now = datetime.datetime.now()
config = load_config()
logger.info("Config loaded")
trigger=False
for t in triggers:
if t.shouldBeOn(config,now):
trigger=True
break
if running:
if not trigger:
#turn off
logger.info("Turning pump off")
pump.turn_off()
gmail.send_mail("Pump off","",config)
running = False
else:
if trigger:
#turn on
logger.info("Turning pump on")
pump.turn_on()
gmail.send_mail("Pump on","",config)
running = True
logger.info("Sleeping for %u seconds" % ( (sleeptime * 60) ))
sleep((sleeptime * 60) )
except Exception as ex: #push errors via pushbullet, then sleep for a while in the hope they'll get fixed.
e = str(ex)
logger.exception(ex)
gmail.send_mail("Poolpump: fatal error, check logs",e,config)
sys.exit(0)