from machine import Pin, ADC
from time import sleep_ms, localtime
from network import WLAN, STA_IF
from ntptime import settime
from umqtt.robust import MQTTClient
from json import loads, dumps
import dht

topTele = b'ifrsrgauto/infoindustrial/telemetria/0377'

def conectarWiFi(nomerede, senharede):
    r = WLAN(STA_IF)
    r.active(True) # Ativa rede
    if not r.isconnected():
        r.connect(nomerede, senharede)
        tentativas = 0
        while not r.isconnected() and tentativas < 20:
            sleep_ms(500)
            tentativas += 1
    return r, r.isconnected()


rede, conectado = conectarWiFi(nomerede='Wokwi-GUEST', senharede='')

if conectado:
    print(localtime())
    settime()
    mqtt = MQTTClient('ClientID','broker.hivemq.com')
    mqtt.connect()
    print(localtime())

sensor = dht.DHT22(Pin(2))
ListSensor = 5
temperaturas = [0] * ListSensor
umidades = [0] * ListSensor

while True:
    dicDados = {}
    t = localtime()
    dicDados['timestamp'] = f'{t[0]}-{t[1]}-{t[2]}T{t[3]}:{t[4]}:{t[5]}'
    
    sensor.measure()
    temperatura = sensor.temperature()
    umidade = sensor.humidity()
    
    temperaturas.append(temperatura)
    temperaturas.pop(0)
    umidades.append(umidade)
    umidades.pop(0)

    media_T = sum(temperaturas) / len(temperaturas)
    media_U = sum(umidades) / len(umidades)

    dicDados = {'timestamp': '2000-1-1T0:0:0', 
            'temperatura': temperatura,
            'umidade': umidade ,
            'media_temp': media_T,
            'media_umi': media_U
}
    if conectado:
        msg = dumps(dicDados)
        mqtt.publish(topTele, msg.encode())
    print(dicDados)
    sleep_ms(15000)