# Ejemplo Introducción al IoT
# topic1724/actuador1 - Opera a distancia un RELÉ
# topic1724/sensor1 - Envia la temperatura periodicamente
# topic1724/sensor2 - Enviar la humedad periodicamente

import network
from dht import DHT22
from time import sleep_ms
from machine import Pin, Timer
from umqtt.robust import MQTTClient

# ----- Definicion de dispositivos
dht = DHT22(Pin(4))
led = Pin(33, Pin.OUT)

# ----- Lectura de humedad y temperatura
def temperatura(timer):
    dht.measure()
    temp = dht.temperature()
    hum = dht.humidity()
    cliente.publish("topic1724/sensor1", str(temp))
    cliente.publish("topic1724/sensor2", str(hum))
    print(f"Temperatura: {temp} °C")
    print(f"Humedad: {hum} %RH\n")

# ----- Funcion callback MQTT
def callback(topic, msg):
    
    # Recibo y decodifico los datos
    mensaje = msg.decode()
    topico = topic.decode()
    
    # LED
    if (topico == "topic1724/actuador1"):
        if (mensaje == "true"):
            led.value(1)
        elif (mensaje == "false"):
            led.value(0)
    print(mensaje)

# Conexión a Internet
wlan = network.WLAN(network.STA_IF)
if not wlan.active():
    wlan.active(True)

if not wlan.isconnected():
    wlan.connect("Wokwi-GUEST","")
    print("Conectando...")
    while not wlan.isconnected():
        sleep_ms(1000)

config = wlan.ifconfig()
print(f"Conectado con ip {config[0]}")

# Conexión al broker MQTT
cliente = MQTTClient("dom_nr_e33", "test.mosquitto.org", port=1883)
print("Conectando a servidor MQTT...")
cliente.set_callback(callback)
cliente.connect()
cliente.subscribe("topic1724/actuador1")
print("Conectado")

# ----- Inicia el Timer0
tim = Timer(0)
tim.init(period=5000, mode=Timer.PERIODIC, callback=temperatura)

while True:
    cliente.check_msg()

cliente.disconnect()
NOCOMNCVCCGNDINLED1PWRRelay Module