#! /usr/bin/env python
# Read TempTrax Thermometer

import getopt, sys
import urllib2
from time import *
from mx.DateTime import *
from daemon import *
from string import *

# variables and constants
sys.tracebacklimit = 0

my_URL = "http://therm-1.febo.com/temp"

Outside = -99.9
Basement = -99.9
Bunker = -99.9
First_Floor = -99.9
daemonize = False
interval = 60
timetype = "I"
filename = ""


# functions
def get_temp():
	errmess = ""
	try: 
		fd = urllib2.urlopen(my_URL)
	except urllib2.URLError, err:
            	errmess = "Error: " + err.reason[1]
		return

	try:
		temp_array = fd.read(80).split("|")
	except urllib2.HTTPError, herr:
	        errmess = "Error: " + str(herr)
		return

	Outside = lstrip(temp_array[1])
	Basement = lstrip(temp_array[3])
	Bunker = lstrip(temp_array[5])
	First_Floor = lstrip(temp_array[7])

	d = gmtime(now())
	ISOtimestamp = ISO.str(d)[:-5]
	ISOtimestamp = ISOtimestamp.replace(' ','T')
	MJDtimestamp = '%5.6f'%(d.mjd)

	if timetype == "I":
		timestamp = ISOtimestamp
	else:
		timestamp = str(MJDtimestamp)

	logstring = timestamp + " " + Outside + " " + Basement + " " + \
		Bunker + " " + First_Floor + " " + errmess
	if filename == "-":
		print logstring
	else:	
		f.writelines(logstring + "\n")

def usage():
	print ""
	print "     Usage: therm.py [-d] [-i] [-m] -f <filename>"
	print "     Default interval is 60 seconds."
	print "     For stdout, use '-' as filename."
	print ""

def get_options():
	global daemonize, interval, timetype, filename
	try:
		opts, args = getopt.getopt(sys.argv[1:], \
		"hdmi:f:", ["help", " daemonize", "mjd", \
		"interval=","filename="])
	except getopt.GetoptError:
		# print help information and exit:
		usage()
		sys.exit(2)


	for o, a in opts:
		if o in ("-h", "--help"):
			usage()
			sys.exit()
		if o in ("-d","--daemonize"):
			daemonize = True
		if o in ("-m","--mjd"):
			timetype = "M"
		if o in ("-i", "--interval"):
			interval = int(a)
		if o in ("-f", "--filename"):
			filename = a

	if filename == "":
		usage()
		sys.exit(2)

# main program
get_options()

if daemonize:
	createDaemon()

start = gmtime(now())
ISOstart = ISO.str(start)[:-5]
ISOstart = ISOstart.replace(' ','T')
MJDstart = '%5.6f'%(start.mjd)
startstring =  "# therm.py run started at ",ISOstart," (MJD ",MJDstart,")\n"

if filename != "-":
	f = open(filename,"a",0)
	f.writelines(startstring)
	f.writelines("# Fields: UTC, Outside, Basement, Bunker, 1st_Floor\n")

while 1:
	func_start = gmtime(now())
	get_temp()
	elapsed = gmtime(now())
	sleep(interval - (elapsed.abstime - func_start.abstime))

