/
main.py
70 lines (57 loc) · 2.17 KB
/
main.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
import time
import logging
import logging.handlers
from datetime import datetime
from Weather import Weather
from Sun import Sun
from Lamp import Lamp
from Sensor import Sensor
from Config import Config
from Log import Log
from Upgrade import Upgrade
def main():
#---------------------------------------------------------------------------#
# Logging - Rotate log file at midnight and keep for 7 days
#---------------------------------------------------------------------------#
handler = logging.handlers.TimedRotatingFileHandler(Config.Log_Filename, when="midnight", interval=1, backupCount=7)
handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger = logging.getLogger('cr-smart-home')
logger.addHandler(handler)
logger.setLevel(Config.Log_Level)
log = Log()
log.info('Server', 'Starting CR Smart Home %s...' % Config.Version)
#---------------------------------------------------------------------------#
# Upgrade
#---------------------------------------------------------------------------#
upgrade = Upgrade()
upgrade.Upgrade()
#---------------------------------------------------------------------------#
# Startup
#---------------------------------------------------------------------------#
weather = Weather()
sun = Sun()
lamp = Lamp()
sensor = Sensor()
log.info('Server', 'System is running in %s (Lat=%f, Long=%f)' % (weather.city, sun.latitude, sun.longitude))
bStartUp = True
#---------------------------------------------------------------------------#
# Run program
#---------------------------------------------------------------------------#
while True:
# Update current weather on startup or every 30 minutes
if (datetime.now().minute == 0 or datetime.now().minute == 30 or bStartUp == True):
weather.UpdateCurrentWeather();
# Update sun to database every hour
if (datetime.now().minute == 0 or bStartUp == True):
sun.UpdateDb()
# Lamp schedule
lamp.Schedule()
# Sensors
if (datetime.now().minute % 10 == 0 or bStartUp):
sensor.readAll()
#Reset startup bool
bStartUp = False
#Sleep one minute
time.sleep(60 - datetime.now().second)
if __name__ == '__main__':
main()