__author__ = 'asc' DEBUG = True import logging import logging.handlers,logging.config from instruments import Barometer, Camera from datahandling import Datalogger, Datareporter from system import System as System import threading from datahandling import Record from mission import Mission import random import string logging.config.fileConfig('logging.ini') log = logging.getLogger(__name__) # log = logging.basicConfig() # log1 = logging.getLogger("instruments") # log2 = logging.getLogger("datahandling") # handler = logging.handlers.RotatingFileHandler('spaceballoon.log', backupCount=5) formatter = logging.Formatter('[%(asctime)-25s] %(name)-15s %(levelname)-8s %(message)s') # handler.setFormatter(formatter) # log.addHandler(handler) # log1.addHandler(handler) # log2.addHandler(handler) log.setLevel(logging.DEBUG) # log1.setLevel(logging.DEBUG) # log2.setLevel(logging.INFO) #start-up #log denotes write to local, report denotes sending to server #loadconfig from config import * mission = Mission() #todo test cell connection reporter = Datareporter ( missiontime = mission, use_lan = True, url = "http://home.ascorrea.com", server_port = 5010, data_path = "upload-data", image_path = "missions", ping_path = "ping", com_port_name="/dev/ttyAMA0", baud_rate = 9600 ) t = Record({'zt':mission.timezero}) # mid = reporter.send(t) #reply of first message is the mission number # mission.set_mid(mid) notebook = Datalogger ( missiontime = mission, text_path=None, log_path=log_path, photo_path=photo_path) log.debug ("System started") #system check system = System() log.debug (system.stats) #set mission time log.info("Mission {} started, time zero is {}".format(mission.name, mission.timezero)) #intiate mission # log.info('Sent {} to server'.format(intiate)) #TODO test camera camera = Camera (low_quality_compression_pct=low_quality_compression_pct, low_quality_resolution=low_quality_resolution, high_quality_compression_pct=high_quality_compression_pct, high_quality_resolution=high_quality_resolution, vflip=False, hflip=False, exposure_mode='sports', # debug=True ) #todo test barometer barometer = Barometer() #todo test GPS, log, report #todo check for errors, throw exception if error 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 () def update_barometer_local(): global bar bar = barometer.read() bar.update({'mt':mission.now()}) record = Record(bar.copy(),'b') notebook.log(record) def update_image_local(): global img img = camera.capture(name=mission.now()) record = Record([img.get('hi'), img.get('lo')], 'i') notebook.log(record) def submit_report(): global bar global img global counter global transpondence # reporter.create_transpondence() if not transpondence: transpondence = Record() if (counter % refresh_barometer_transmit) == 0: transpondence.add(bar,'b') if (counter % refresh_camera_transmit) == 0: transpondence.add(img.get('lo'),'i') transpondence = reporter.send(transpondence) #returns none on success, (bad practice?) counter += 1 log.info('Counter = {}'.format(counter)) counter=1 img = None bar = None transpondence = None scheduler(1, update_barometer_local) scheduler(refresh_camera_local, update_image_local) scheduler(2, submit_report) pass