/
ledclock.py
executable file
·78 lines (62 loc) · 2.45 KB
/
ledclock.py
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
#!/usr/bin/env python
import argparse
import os
import sys
import logging
from logging.handlers import RotatingFileHandler
from daemonify import Daemon
from weather import Weather
from display import Display
from dimmer import Dimmer
from apscheduler.schedulers.blocking import BlockingScheduler
class LedClockDaemon(Daemon):
def __init__(self, args):
super(LedClockDaemon, self).__init__(pidfile=args["pidfile"])
self._args = args
def setup_logging(self):
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler = RotatingFileHandler(self._args['logfile'], maxBytes=153600, backupCount=3)
handler.setFormatter(formatter)
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(handler)
def run(self):
self.setup_logging()
scheduler = BlockingScheduler()
weather = Weather(scheduler, zip=self._args['zip'], station=self._args['station'])
dimmer = Dimmer(scheduler)
display = Display(weather, dimmer)
display.start()
scheduler.start()
def process_args():
parser = argparse.ArgumentParser()
parser.add_argument("-p", "--pidfile", help="PID file name", type=str, default="/var/run/ledclock.pid")
parser.add_argument("-l", "--logfile", help="Log file name", type=str, default="/var/log/ledclock.log")
parser.add_argument("-d", "--daemon", help="start stop restart", type=str)
parser.add_argument("-s", "--station", help="NOAA station ID for current weather conditions", default="KLOU")
parser.add_argument("-z", "--zip", help="ZIP code for weather forecast", default="40207")
return vars(parser.parse_args())
# Main function
if __name__ == "__main__":
# Process command line arguments
args = process_args()
# Verify running as root. Unfortunately, this is required to access /dev/mem by the rgbmatrix lib
if os.getuid() != 0:
print "Must run as root!"
sys.exit(-1)
daemon = LedClockDaemon(args)
if args['daemon'] is None:
try:
print("Press CTRL-C to exit")
daemon.run()
except KeyboardInterrupt:
print "Exiting\n"
sys.exit(0)
elif args['daemon'] == 'start':
daemon.start()
elif args['daemon'] == 'stop':
daemon.stop()
elif args['daemon'] == 'restart':
daemon.restart()
else:
print "Invalid daemon action"