import network
import urequests as requests
import time
# Conexión a WiFi
ssid = "Wokwi-GUEST"
password = ""
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
print("Conectando a WiFi...")
while not wifi.isconnected():
time.sleep(1)
print("WiFi conectado. Configuración:", wifi.ifconfig())
# Configuración de Adafruit IO
AIO_USERNAME = "benjalvarado" # Tu usuario de Adafruit IO
AIO_KEY = "aio_FrnV33IqjJpmTWuyARkdcb0Dxl8l" # Tu clave AIO
FEED_SETPOINT = "setpoint" # Feed para el Set Point
FEED_ALARMA = "alarma" # Feed para la alarma
# Función para enviar datos a Adafruit IO
def enviar_dato(feed, valor):
print(f"Enviando valor {valor} al feed {feed}...")
url = f"https://io.adafruit.com/api/v2/{AIO_USERNAME}/feeds/{feed}/data"
headers = {"X-AIO-Key": AIO_KEY, "Content-Type": "application/json"}
data = {"value": valor}
response = requests.post(url, json=data, headers=headers)
if response.status_code == 200:
print(f"Valor {valor} enviado con éxito al feed {feed}.")
else:
print(f"Error al enviar valor al feed {feed}: {response.status_code}, {response.text}")
response.close()
# Obtener valor del set point
print("Obteniendo set point...")
setpoint_request = requests.get(
f"https://io.adafruit.com/api/v2/{AIO_USERNAME}/feeds/{FEED_SETPOINT}/data/last",
headers={"X-AIO-Key": AIO_KEY}
)
if setpoint_request.status_code == 200:
setpoint = int(setpoint_request.json()["value"])
print(f"Set point obtenido: {setpoint}")
else:
print(f"Error obteniendo set point: {setpoint_request.status_code}, {setpoint_request.text}")
setpoint = 70 # Valor predeterminado si no se puede obtener
setpoint_request.close()
# Ingreso de la ciudad
ciudad = input("Ingrese una ciudad: ")
# Obtener datos climáticos
print(f"Buscando datos climáticos para {ciudad}...")
datos_request = requests.get("https://api.boostr.cl/weather.json")
if datos_request.status_code == 200:
datos = datos_request.json()["data"]
humedad = None
for i in datos:
if ciudad.lower() == i["city"].lower():
humedad = int(i["humidity"])
print(f"Ciudad: {i['city']}, Humedad: {humedad}%")
break
if humedad is None:
print("Ciudad no encontrada.")
else:
print(f"Error obteniendo datos climáticos: {datos_request.status_code}, {datos_request.text}")
humedad = None
datos_request.close()
# Lógica de control de alarma
if humedad is not None:
if humedad < setpoint:
print("Humedad menor al set point. Activando alarma.")
enviar_dato(FEED_ALARMA, 1)
else:
print("Humedad mayor o igual al set point. Desactivando alarma.")
enviar_dato(FEED_ALARMA, 0)
else:
print("No se pudo obtener la humedad. No se realizaron cambios en la alarma.")
time.sleep(10) # Espera de 10 segundos