# Este proyecto es la base para la actividad Practica del modulo 2

# Importar librerias
import urequests
import network
import time
import ujson

# Conexion al servicio Wi-Fi Virtual de Wokwi para tener acceso a Internet
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
  print(".", end="")
  time.sleep(0.1)
print(" Connected!")

# Sincronizar hora Argentina
import ntptime
import time
import utime
ntptime.host = "2.ar.pool.ntp.org"
ntptime.settime()

# Clase para usar con Gateway SingleDevice.SingleSensor https://www.ubeac.io/docs/GatewayList.html#_2-software-gateways
class SensorUbeac:
  BASE_HEADER = {
    "Content-Type": "application/json"
  }

  def __init__(self, url, uid, tipo, prefijo, unidad):
    self.url = url
    self.uid = uid
    self.tipo = tipo
    self.prefijo = prefijo
    self.unidad = unidad

  def tiempo_actual(self):
    local_time = time.localtime()
    year, month, day, hour, minute, second = local_time[:6]
    unix_timestamp = utime.mktime((year, month, day, hour, minute, second, 0, 0))
    return unix_timestamp

  def enviar_valor(self, valor, log=True):
    header = self.BASE_HEADER.copy()
    data = {
      "mac": self.uid,
      "type": self.tipo,
      "ts": self.tiempo_actual(),
      "unit": self.unidad,
      "prefix": self.prefijo,
      "data": valor
    }
    response = urequests.post(
      self.url, 
      json=data,
      headers=header
    )

    if log:
      if response.status_code == 200:
        print(f'{self.uid} subio {valor}')
      else:
        print(f'ERROR: {response.status_code}')
    response.close()



# Variables para la conexion con Ubeac
# Completar con sus datos:

#Direccion HTTP del Gateway uBeac Single Sensor
URL_HTTP_GATEWAY = 'http://cursoiot.hub.ubeac.io/sensoresRene/'
#Van a ser los nombres con los que van a aparecer los dispositivos en Ubeac
NOMBRE_SENSOR_TEMPERATURA = 'Temperatura:Rene'
NOMBRE_SENSOR_HUMEDAD = 'Humedad:Rene'

# Ejemplo de como enviar datos a un gateway Ubeac con la url anterior
ubeac_temperatura = SensorUbeac(URL_HTTP_GATEWAY,
                                NOMBRE_SENSOR_TEMPERATURA,
                                4,  # Tipo Temperature https://www.ubeac.io/docs/SensorTypes.html
                                0,  # Sin prefijo de unidad https://www.ubeac.io/docs/UnitPrefixes.html
                                2)  # Grados centigrados como unidad https://www.ubeac.io/docs/SensorUnits.html

ubeac_humedad = SensorUbeac(URL_HTTP_GATEWAY,
                            NOMBRE_SENSOR_HUMEDAD,
                            5,  # Tipo Humidity https://www.ubeac.io/docs/SensorTypes.html
                            0,  # Sin prefijo de unidad https://www.ubeac.io/docs/UnitPrefixes.html
                            20) # % Porcentaje como unidad https://www.ubeac.io/docs/SensorUnits.html


import dht
from machine import Pin

from time import sleep
led = Pin(26, Pin.OUT)

sensor = dht.DHT22(Pin(15))

while True:
  sensor.measure()

  ubeac_temperatura.enviar_valor(sensor.temperature())
  ubeac_humedad.enviar_valor(sensor.humidity())

  if sensor.temperature()>50:
    print("PELIGRO alta temperatura")
    led.value(1)
    sleep(1)
  
    led.value(0)
    sleep(1)