# -*- coding: utf-8 -*-
# (c) Sebastian Schneckener
# License: GPL - have fun
#

import os
import time
import datetime
import sys

# http://sourceforge.net/p/raspberry-gpio-python/wiki/BasicUsage/

if (os.uname()[1]=="raspberrypi"):
    import readTemperature
    import RPi.GPIO as GPIO ## Import GPIO library
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(2, GPIO.OUT) ## Setup GPIO Pin 2 to OUT -> this goes to the SSR
    GPIO.setup(3, GPIO.OUT) ## Setup GPIO Pin 3 to OUT
    GPIO.setup(7, GPIO.OUT) ## Setup GPIO Pin 7 to OUT

def pollTemperature():
    if (os.uname()[1]=="raspberrypi"):
        
        temp = readTemperature.read_temp()[1]
    else:
        import random
        temp = random.randint(35, 40)
    return (temp)

def heat_on():
    if (os.uname()[1]=="raspberrypi"): 
        GPIO.output(2,1) ## Turn on GPIO 2
        GPIO.output(3,0) ## green LED off
        GPIO.output(7,0) ## yellow LED off



def heat_off():
    if (os.uname()[1]=="raspberrypi"): 
        GPIO.output(2,0) ## Turn on GPIO 2
        GPIO.output(3,1) ## green LED on
        GPIO.output(7,0) ## yellow LED off




def run(lower, upper):
    f = open("./thermostat.txt", "w")
    while (1):
        time.sleep(10)
        t = pollTemperature()
        if (t< lower):
            # heating needed
            heat_on()
            a = "heat on"
        elif (t> upper):
            # too hot?
            a = heat_off()
            a = "heat off"
        else:
            # ok
            heat_off()
            a = "ok"
                
        # sys.stdout.write("\t".join( [str(datetime.date.today()), str(t), a])+"\n")
        f.write("\t".join( [str(time.asctime( time.localtime(time.time()) )), str(t), a])+"\n")
        f.flush()
        
if __name__ == '__main__':
    
    if (len (sys.argv)==2):
        lower = float(sys.argv[1]) -0.01
        upper = float(sys.argv[1]) +0.01
    elif (len (sys.argv)==3):
        lower = float(sys.argv[1])
        upper = float(sys.argv[2])
    else:
        upper = 38.01
        lower = 37.99
    assert (lower < upper)
    
    run(lower, upper )
    