__author__ = 'asc' DEBUG = True if DEBUG: from instruments import Barometer_Debug as Barometer from instruments import Camera_Debug as Camera from datahandling import Datalogger_Debug as Datalogger from datahandling import Datareporter_Debug2 as Datareporter from system import System_Debug as System import threading import datetime # else: # from instruments import Barometer, Camera # from datahandling import Datalogger, Datareporter # from system import System # import threading #start-up #log denotes write to local, report denotes sending to server #TODO startup message logger = Datalogger () logger.log ("System Startup") logger.log("Log Intiated") #system check system = System() system_status = system.status logger.log (system_status[1]) #todo test cell connection, log, report reporter = Datareporter() reporter_status = reporter.status logger.log (reporter_status[1]) reporter.send(reporter_status[1]) reporter.send(system_status[1]) #TODO test camera, log, report camera = Camera () camera_status = camera.status logger.log (camera_status[1]) reporter.send(camera_status[1]) #todo test barometer, log, report barometer = Barometer() barometer_status = barometer.status logger.log (barometer_status[1]) reporter.send(barometer_status[1]) #todo test GPS, log, report #check for errors, throw exception if error if(system_status[0] or reporter_status[0] or camera_status[0]): raise Exception ('Error') if DEBUG: #rate refresh hi-res camera images, saved locally, in seconds refresh_camera_local = 2 refresh_camera_transmit = 5 refresh_barometer_local = 1 refresh_barometer_transmit = 5 refresh_gps_local = 2 refresh_gps_transmit = 5 else: refresh_camera_local = 10 refresh_camera_transmit= 60 refresh_barometer_local = 10 refresh_barometer_transmit= 60 refresh_gps_local = 10 refresh_gps_transmit= 60 def update_barometer(): #refresh each instrument alt = barometer.altitude press = barometer.pressure temp = barometer.temperature #log instrument info logger.log({"altitude":alt, "temperature":temp, "pressure":press, "sent":datetime.datetime.now() }) #report instrument info reporter.send({"altitude":alt, "temperature": temp, "pressure":press, "sent":datetime.datetime.now() },type="data") def update_camera(): image = camera.capture() #log image logger.log(image.get('file'), type="image") #report image reporter.send(image.get('file'), type="image") pass def scheduler (interval, worker_func, iterations = 0): if iterations != 1: threading.Timer ( interval, scheduler, [interval, worker_func, 0 if iterations == 0 else iterations-1] ).start () worker_func () #while 1: update_camera() #todo break apart log and report refresh scheduler(refresh_barometer_local, update_barometer, 20) scheduler(refresh_camera_local, update_camera, 1) pass