weatherstation/all.py

83 lines
2.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os.path
import os
import time
from Logger import Logger
from ConnectionSetup import ConnectionSetup
import settings
def check_dirs_and_files():
# log
if not os.path.exists(settings.logs):
os.mkdir(settings.logs, 0000755)
if not os.path.exists(settings.logname):
open(settings.logname, 'w').close()
if not os.path.exists(settings.exceptionlog):
file=open(settings.exceptionlog, 'w')
file.write("<exceptions></exceptions>")
file.close()
# lock
if not os.path.exists(settings.locks):
os.mkdir(settings.locks, 0000755)
# records
if not os.path.exists(settings.records):
os.mkdir(settings.records, 0000755)
def obtainLock(lockfile = settings.lockname):
if not os.path.exists(lockfile):
lock = open(lockfile, 'w')
lock.write( str(time.time()) )
lock.close()
return True
return False
def freeLock(lockfile = settings.lockname):
if os.path.exists(lockfile):
os.remove(lockfile)
def formatHost(host):
return "%s:%d" % (host['name'], host['port'])
if __name__ == "__main__":
check_dirs_and_files()
log=open(settings.logname, 'a')
try:
log.write("setting up all ... @" + time.ctime() + "\n")
while True:
if obtainLock():
logger = Logger(log)
try:
connections = []
connectedSensors = []
for con in settings.SENSORS:
con = settings.SENSORS[con]
conSetup = ConnectionSetup()
connection, sensors = conSetup.setupConnectionAndSensors(con['host'], con['sensors'], settings.TIMES, logger.cb_generic)
connections.append(connection)
connectedSensors.append(sensors)
log.write("started logging at " + formatHost(con['host']) + " ... @ " + time.ctime() + "\n")
log.flush()
raw_input("Press key to restart\n")
log.write("stop logging... @" + time.ctime() + "\n")
conSetup.disconnectAny(connections)
except Exception as inst:
#connection failed, log and exit
logger.printException(inst)
print(inst)
freeLock()
else:
print("lock file active!!")
log.write("lock collision: lock 'all' active @ " + time.ctime() + "\n")
print("wait for retry (" + str(settings.waitDelay) + ")")
time.sleep(settings.waitDelay)
except KeyboardInterrupt:
print(" Interrupted, cleaning up")
conSetup.disconnectAny(connections)
log.write("keyboard-interrupt happened @" + time.ctime() + "\n")
log.close()
freeLock()