import spidev
import time

from libsoc import gpio
from dweet import Dweet
from gpio_96boards import GPIO


GPIO_CS = GPIO.gpio_id('GPIO_CS')
Toque = GPIO.gpio_id('GPIO_A')
Rele = GPIO.gpio_id('GPIO_C')
Led = GPIO.gpio_id('GPIO_E')
Tilt = GPIO.gpio_id('GPIO_G')



pins = ((GPIO_CS, 'out'), (Toque, 'in'), (Tilt, 'in'), (Led, 'out'), (Rele, 'out'),)

spi = spidev.SpiDev()
spi.open(0,0)
spi.max_speed_hz = 10000
spi.mode = 0b00
spi.bits_per_word = 8

status_botao = 1
status_toque = 1

dweet = Dweet()

def readTemp(gpio):

	gpio.digital_write(GPIO_CS, GPIO.HIGH)
	time.sleep(0.0002)
	gpio.digital_write(GPIO_CS, GPIO.LOW)
	r = spi.xfer2([0x01, 0xA0, 0x00])
	gpio.digital_write(GPIO_CS, GPIO.HIGH)
	adcout = (r[1] << 8) & 0b1100000000
	adcout = adcout | (r[2] & 0xff)		
	adc_temp = (((adcout * 5.0)/1023)-0.5)*100
	return adc_temp


def readLumi(gpio):
		
	gpio.digital_write(GPIO_CS, GPIO.HIGH)
	time.sleep(0.002)
	gpio.digital_write(GPIO_CS, GPIO.LOW)
	r = spi.xfer2([0x01, 0x80, 0x00])
	gpio.digital_write(GPIO_CS, GPIO.HIGH)
	adcout = (r[1] << 8) & 0b1100000000
	adcout = adcout | (r[2] & 0xff)
	if (adcout < 100):
	    gpio.digital_write(Led, GPIO.HIGH)	
            print("Sistema de Iluminacao ativado!")
	else:
	    gpio.digital_write(Led, GPIO.LOW)
	return adcout

	
def ReadToque(gpio):
	global status_toque
	status1 = gpio.digital_read(Toque)
	if status1 == 1:
		if status_toque == 0:
			status_toque = 1
			print "Portao Abrindo... \n"
			gpio.digital_write(Rele, GPIO.HIGH)
		else:
			status_toque = 0
			print "Portao Fechando... \n"
			gpio.digital_write(Rele, GPIO.LOW)
	return status_toque

def envia_dweet():
	dweet.dweet_by_name(name="smarthome", data={"Temperatura":valor_temp, "Luminosidade":valor_lumi, "Luz":luz, "Status Portao": portao})
	resposta = dweet.latest_dweet(name="smarthome")



if __name__=='__main__':

	with GPIO(pins) as gpio:
		while True:
			valor_temp = readTemp(gpio)
			print("Temperatura: %2.1f" %valor_temp)
			valor_lumi = readLumi(gpio)
			print("Luminosidade: %d" %valor_lumi)
			if (gpio.digital_read(Toque) == 1):
			    ReadToque(gpio)
			if (gpio.digital_read(Tilt) == 0):
			    print("Trava de seguranca ativada do portao --- portao fechado")
			    gpio.digital_write(Rele, GPIO.LOW)
			luz = gpio.digital_read(Led)
			portao = gpio.digital_read(Rele)
			envia_dweet()
			time.sleep(5)
			
			




	



