Files
spaceballoon/main.py
2015-11-12 23:14:03 -06:00

157 lines
3.6 KiB
Python

__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