from machine import Pin,PWM
import time
import dht

from wifi_lib import conecta
from umqttsimple import MQTTClient
from variaveis_chumbadas import *

barulhoAtivo = PWM(Pin(13,Pin.OUT))   #inicia o buzzer
barulhoAtivo.init(freq=1047, duty=0)  #seta a frequencia dele

sensor = dht.DHT22(Pin(2))

#Topicos
mqtt_topico_0 = f"v1/{mqtt_user_chumbado}/things/{mqtt_clienid}/data/0"
mqtt_topico_2 = f"v1/{mqtt_user_chumbado}/things/{mqtt_clienid}/data/2"

def mensagens(topico,msg):
  print(msg) # Envia as mensagens pro broker.

print("CONECTANDO COM A INTERNET")
station = conecta(wifi_ssid,wifi_chumbada) #Conecta com a internet
if station.isconnected():
  print("CONEXAO EFETUADA COM SUCESSO")
  #station.connect()
  # Cria a variavel com os dados pra conectar
  cliente = MQTTClient(mqtt_clienid, mqtt_srv, mqtt_port, mqtt_user_chumbado, mqtt_pass_chumbado)
  #Cria a conexao com o Cayenne
  MQTTClient.connect(cliente)
  # Envia as mensagens pro broker
  cliente.set_callback(mensagens)


def Temperatura():
  sensor.measure()
  temperatura=sensor.temperature()
  
  if (temperatura < 15):
      print ("MUITO FRIO")
      barulhoAtivo.duty(512)  #Vai tocar o alarme se ficar frio
      time.sleep(1)
      #cliente.publish(mqtt_topico_0,str(temperatura))
  elif (temperatura > 27):
      print ("MUITO QUENTE")
      barulhoAtivo.duty(512)  #Vai tocar o alarme se ficar quente
      #cliente.publish(mqtt_topico_0,str(temperatura))
      time.sleep(1)
  else:
      #print ("NORMAL")
      barulhoAtivo.duty(0)  #Enquanto normal, sirene desligada
      #cliente.publish(mqtt_topico_0,str(temperatura))
  return temperatura


def Umidade():
  sensor.measure()
  umidade=sensor.humidity()
  if (umidade <= 40):
    print("Umidade BAIXA -> Cuidado com ELETROSTATICA")
    barulhoAtivo.duty(512)  #Vai tocar o alarme se estiver muito seco
    #Envia o topico pro Cayenne
    #cliente.publish(mqtt_topico_2,str(umidade))
    time.sleep(.5)
    
    
  elif (umidade >= 53):
    print("Umidade ALTA -> Cuidado com GOTEJAMENTO")
    barulhoAtivo.duty(512)  #Vai tocar o alarme se estiver muito molhado
    #Envia o topico pro Cayenne
    #cliente.publish(mqtt_topico_2,str(umidade))
    time.sleep(.5)
  
  return umidade

print("Condicoes de Temperatura e Umidade do local")
while True:
  print(f"Temperatura: {Temperatura()}   Umidade= {Umidade()}")
  #Envia os dados pro broker a cada 1 segundo
  cliente.publish(mqtt_topico_0,str(Temperatura()))
  cliente.publish(mqtt_topico_2,str(Umidade()))
  time.sleep(1)