#!/usr/bin/python
import bluetooth
import sys
import time as tm
import datetime as dt
from datetime import datetime, date, time


class Programma:
    def __init__(self, inizio, fine, temperatura):
        self.inizio = inizio
        self.fine = fine
        self.temperatura = temperatura
    def inOrario(self):
        if (type(self.inizio) is datetime and type(self.fine) is datetime):
          if (self.ripeti == False):
              return self.inizio < datetime.now() < self.fine
          if (self.ripeti == True):
              return self.inizio.time() < datetime.now().time() < self.inizio.time()
        else:
            if(type(self.inizio) is time and type(self.fine) is time):
                return self.inizio < datetime.now().time() < self.fine
            else:
                return False
    def inTemperaturaDesiderata(self, temperaturaAmbiente):
        return self.temperatura >= temperaturaAmbiente
    def accediCaldaia(self, temperaturaAmbiente):
        return self.inOrario() and self.inTemperaturaDesiderata(temperaturaAmbiente)





bt_add = "98:D3:31:B2:35:33" #termostato
br_add = "30:14:06:26:04:18" #rele

print datetime.now().time()
t1 = dt.time(7, 0, 0)
t2 = dt.time(9, 0, 0)
mattina = Programma(t1, t2,2000)

t3 = dt.time(18, 0, 0)
t4 = dt.time(20, 0, 0)
sera = Programma(t2, t3,2000)

t5 = dt.time(00, 0, 0)
t6 = dt.time(23, 0, 0)
sempre = Programma(t5, t6,1800)

programmazioni = [mattina, sera, sempre]


print mattina.accediCaldaia(2015)
print sera.accediCaldaia(2015)
print sempre.accediCaldaia(1500)

for ndx, member in enumerate(programmazioni):
    print member.accediCaldaia(2015)

#print datetime.now()
#print t1
#print t2
#p1Inizio = datetime(2015, 11, 21, 16, 30)
#p1Fine = datetime(2015, 11, 22, 16, 30)
#long_rectangle = Programma(p1Inizio, p1Fine,2014)






#connessione ai dispositivi
portRele = 1
portTerm = 1
sockTerm=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sockTerm.connect((bt_add, portTerm))
print 'Connesso al termostato'
sockRele=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
sockRele.connect((br_add, portRele))
print 'Connesso al rele'


sockTerm.settimeout(1.0)
sockRele.settimeout(1.0)

print 'parametro: ' + sys.argv[1]

releValue = "s"

#orario attuale
now = datetime.datetime.now()


while 1:
  try:
    data = ""
    sockTerm.send(sys.argv[1])
    sockRele.send(releValue)
    print 'Sent data: ' + releValue
    time.sleep(5) # delays for 5 seconds
    data = sockTerm.recv(1024)
    if(len(data)==5):
      temp = data.replace("t","")
      temp = int(temp)
      if (temp < 1570):
        releValue = "f"
      else:
        releValue = "n"
      print 'received t [%s]' % data
      data = ""
      time.sleep(5) # delays for 5 seconds
      data += sockRele.recv(1024)
      print 'received r: [%s]' % data
#    data_end = data.find('\n')
#    if data_end != -1:
#       rec = data[:data_end]
#       print data
#       data = data[data_end+1:]
#       break
  except KeyboardInterrupt:
    break
  except bluetooth.btcommon.BluetoothError as error:
    continue

print 'socket chiuso'
sockRele.close()
sockTerm.close()



