diff --git a/temp_log.py b/temp_log.py index 45f2845..e98fa62 100755 --- a/temp_log.py +++ b/temp_log.py @@ -1,21 +1,47 @@ #! /usr/bin/env python import serial, sys, time, io -serialPort = '/dev/ttyACM0' -try: - serialPort = sys.argv[1] -except Exception, e: +defaultSerialPort = '/dev/ttyACM0' +defaultVersion = 0 + +class ParseException(Exception): + """Parser Exceptions""" pass -ser = serial.Serial(port=serialPort, baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS) -sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) -ser.isOpen() -buffer = '' -while True: + + +def parse_line(line, version = defaultVersion): + """Parses a line and returns an array index by name of the data available""" + # @TODO This could be a class based versioning? + data = {} + if (version == 0): + line = line.split(' ') + data['temperature'] = float(line[-2]) + else: + raise ParseException('Unimplemented line version', version) + return data + + +def main(args = sys.argv): + # @TODO switch to parse args or similar + # @TODO parse of temperature logger line version + serialPort = defaultSerialPort + lineVersion = defaultVersion try: - buffer = ser.readline() - buffer_split = buffer.split(' ') - temp = float(buffer_split[-2]) - print unicode(time.time()) + ',' + unicode(temp) - sys.stdout.flush() + serialPort = sys.argv[1] except Exception, e: - sys.stderr.write(str(e) + '\n') - continue + pass + ser = serial.Serial(port=serialPort, baudrate=9600, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS) + sio = io.TextIOWrapper(io.BufferedRWPair(ser, ser)) + ser.isOpen() + buffer = '' + while True: + try: + buffer = ser.readline() + data = parse_line(buffer, lineVersion) + print unicode(time.time()) + ',' + unicode(data['temperature']) + sys.stdout.flush() + except Exception, e: + sys.stderr.write(str(e) + '\n') + continue + +if __name__ == '__main__': + main(sys.argv)