from machine import Pin, I2C, PWM, ADC
from utime import sleep, sleep_ms
import network, time, urequests
import ujson
from utelegram import Bot
from neopixel import NeoPixel 

TOKEN = '5031163680:AAG45iFduorhunFrZs6GsGGBc7QUaegYGhE'
bot = Bot(TOKEN)
np= NeoPixel(Pin(4), 3)
ldr = ADC(Pin(33))

def map_value(value, in_min, in_max, out_min, out_max):
    return (value - in_min) * (out_max - out_min) / (in_max - in_min) + out_min


def conectaWifi (red, password):
      global miRed
      miRed = network.WLAN(network.STA_IF)     
      if not miRed.isconnected():              #Si no está conectado…
          miRed.active(True)                   #activa la interface
          miRed.connect(red, password)         #Intenta conectar con la red
          print('Conectando a la red', red +"…")
          timeout = time.time ()
          while not miRed.isconnected():           #Mientras no se conecte..
              if (time.ticks_diff (time.time (), timeout) > 10):
                  return False
      return True

if conectaWifi("Wokwi-GUEST", ""):

    print ("Conexión exitosa!")
    print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig())

    @bot.add_message_handler('Hola')
    def help(update):
        update.reply('''Menu BoT: 
                    \n Color Rojo: Rojo   \U0001F601
                    \n Color Verde: Verde  \U0001F643
                    \n Color Azul: Azul   \U0001F609
                    \n Dia o Noche: Estado  \U0001F607
                    ''')

    @bot.add_message_handler('Rojo')
    def help(update):
        np[0]=(255,0,0)
        np[1]=(255,0,0)
        np[2]=(255,0,0)
        np.write()
        update.reply('Encendiendo Rojo')
    
    @bot.add_message_handler('Verde')
    def help(update):
        np[0]=(0,255,0)
        np[1]=(0,255,0)
        np[2]=(0,255,0)
        np.write()
        update.reply('Encendiendo Verde')
    
    @bot.add_message_handler('Azul')
    def help(update):
        np[0]=(255,255,0)
        np[1]=(0,255,255)
        np[2]=(255,0,255)
        np.write()
        update.reply('Encendiendo Todos')

    @bot.add_message_handler('Estado')
    def help(update):
        lux = ldr.read_u16()
        nivel_luz = map_value(lux, 0, 65535, 100, 0)
        if nivel_luz > 60:
            update.reply('Esta de dia')
        else:
            update.reply('Esta de Noche')
    
    bot.start_loop()

else:
       print ("Imposible conectar")
       miRed.active (False)