from time import sleep
import network
import utelegram
# Importar Credenciales Wifi y Token Telegram
from config import utelegram_config, wifi_config
# Importar clases de sensores
from sensors import (
LightSensor,
PHSensor,
TDSSensor,
HumiditySoilSensor,
AtmosphereSensor,
)
from actuators import (
WaterPump,
UVLight,
)
# Importar funciones
from utilitys import (
print_table,
send_msg
)
# Importar LCD Display
from display import LCDDisplay
# Importar manejador
import usmartpot
# Controlar si se debe enviar el mensaje
should_send_msg = False
if __name__ == "__main__":
# Instancia de cada sensor digital
dht_sensor = AtmosphereSensor(15)
# Instancia de cada sensor ADC
light_sensor = LightSensor(34)
ph_sensor = PHSensor(35)
tds_sensor = TDSSensor(32)
humidity_soil_sensor = HumiditySoilSensor(33)
# Instancia de actuadores
water_pump = WaterPump(19)
uv_light = UVLight(18)
# Instancia de LCDDisplay con pines scl y sda
lcd_display = LCDDisplay(scl_pin=16, sda_pin=17) # Pines I2C para scl y sda
# Mostrar mensaje de conexión WiFi
lcd_display.show_wifi_connecting()
# Configuración inicial de WiFi y pines
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(wifi_config['ssid'], wifi_config['password'])
# Definir Bot
bot = None
# Espera activa hasta 20 segundos para conectar
for _ in range(80):
if sta_if.isconnected():
print('WiFi Conectado')
lcd_display.show_online_status()
try:
bot = utelegram.ubot(utelegram_config['token'])
should_send_msg = True # Cambia el estado de envío de mensajes
print('Bot inicializado correctamente')
except Exception as e:
print(f"Error al inicializar el bot: {e}")
break
print('Conectando a WiFi...')
lcd_display.show_wifi_spinner()
sleep(0.25)
else:
print('No conectado - abortando')
api = usmartpot.SmartPotAPI()
api.login("[email protected]","Contraseña1")
api.get_all_users()
'''
# Definir comandos del Bot
def turn_on_water_pump(message):
water_pump.turn_on()
bot.send(message['message']['chat']['id'], "El motor de agua ha sido activado.")
def turn_off_water_pump(message):
water_pump.turn_off()
bot.send(message['message']['chat']['id'], "El motor de agua ha sido desactivado.")
def turn_on_uv_light(message):
uv_light.turn_on()
bot.send(message['message']['chat']['id'], "La luz ultravioleta ha sido activada.")
def turn_off_uv_light(message):
uv_light.turn_off()
bot.send(message['message']['chat']['id'], "La luz ultravioleta ha sido desactivada.")
if bot:
bot.register('/water_pump_on', turn_on_water_pump)
bot.register('/water_pump_off', turn_off_water_pump)
bot.register('/uv_light_on', turn_on_uv_light)
bot.register('/uv_light_off', turn_off_uv_light)
bot.set_default_handler(lambda message: bot.send(message['message']['chat']['id'], "Command not recognized."))
# Mostrar en Display LCD
lcd_display.show_welcome_message()
sleep(5)
# Enviar datos de los sensores cada 60 segundos
while True:
# Leer valores de los sensores
dht_data = dht_sensor.read_value()
temp = dht_data["temperature"]
humidity_air = dht_data["humidity"]
light = light_sensor.read_light()
ph = ph_sensor.read_ph()
tds = tds_sensor.read_tds()
humidity_soil = humidity_soil_sensor.read_soil_humidity()
# Imprimir los valores en formato tabla
print_table(temp, humidity_air, light, ph, tds, humidity_soil)
# Mostrar los datos en el display LCD
lcd_display.display_sensor_data(temp, humidity_air, light, ph, tds, humidity_soil)
# Enviar mensaje si el bot está conectado y la variable `should_send_msg` es True
if should_send_msg and bot:
send_msg(bot, utelegram_config['chat'], temp, humidity_air, light, ph, tds, humidity_soil)
bot.listen(60) # Listar por 60 segundos
else:
sleep(60) # Esperar 60 segundos si el bot no fue iniciado
'''