from machine import Pin  
from HC1SR04 import HCSR04  
from time import sleep  
import network
import umqtt.simple as mqtt

# Configuración de WiFi
SSID = "Wee Fibra853"  # Cambia esto por tu SSID
PASSWORD = "43188853"  # Cambia esto por tu contraseña

# Conectar a WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)

while not wlan.isconnected():
    print("Conectando a WiFi...")
    sleep(15)

print("Conectado a WiFi:", wlan.ifconfig())

# Configuración del sensor y el LED
medidor = HCSR04(trigger_pin=4, echo_pin=5)  
led = Pin(2, Pin.OUT)  

# Configuración de MQTT
broker_address = "192.168.1.105"  # Cambia esto por tu broker
client = mqtt.MQTTClient("ESP32Client", broker_address)
client.connect()

# Parámetros
ALTURA_TANQUE = 100   
UMBRAL_NIVEL_AGUA = 30    
TIEMPO_PARPADEO = 0.5  
TIEMPO_MEDICION = 4  

while True:  
    try:  
        # Medir la distancia
        distancia = medidor.distance_cm()  
        print("Distancia medida desde el sensor hasta la superficie del agua: " + str(distancia) + " cm")  
        
        # Calcular el nivel de agua
        nivel_agua = ALTURA_TANQUE - distancia  
        print("Nivel de agua calculado: " + str(nivel_agua) + " cm")  
        
        # Publicar en MQTT
        client.publish("tanque/nivel", str(nivel_agua))

        # Controlar el LED según el nivel de agua
        if nivel_agua < UMBRAL_NIVEL_AGUA:  
            print("Alerta!! El nivel de agua es demasiado bajo!")  
            for i in range(5):   
                led.value(1)    
                sleep(TIEMPO_PARPADEO)  
                led.value(0)  
                sleep(TIEMPO_PARPADEO)  
        else:  
            led.value(0)   
            print("Nivel de agua normal.")  

    except Exception as e:  
        print("Error al medir la distancia: ", str(e))  
        
    sleep(TIEMPO_MEDICION)