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

net = 'Wokwi-GUEST'
pas = ''

clientId = 'crrifrsrg'
broker = 'demo.thingsboard.io'
usuario= 'prox3kd13767txillxco'

topico = b'v1/devices/me/telemetry'
topRPCGeral = 'v1/devices/me/rpc/request/'
topRPCResp = 'v1/devices/me/rpc/response/'

chave = Pin(23, Pin.IN, Pin.PULL_DOWN)

def ativaWifi(rede, senha):
    # Retorna True se consegue conectar à rede, ou False do contrário
    # Faz 10 tentativas, separadas por 1s de tempo
    wifi = WLAN(STA_IF)
    wifi.active(True)
    if not wifi.isconnected():
        wifi.connect(rede, senha)
        tentativas = 0
        while not wifi.isconnected() and tentativas < 10:
            sleep_ms(1000)
            tentativas += 1
    if wifi.isconnected():
        return (wifi, True)
    else:
        return (wifi, False)


conexao, conectado = ativaWifi(net,pas)

print (conectado)

if conectado:
    settime()
    mqtt = MQTTClient(clientId, broker, user = usuario, password='')
    mqtt.connect()

dados = {'ts': time()*1000, 
         'values':{'conta':0, 'key': False}}

while True:
    print (dados)
    dados['ts'] = (time() + 31557600)*1000
    dados['values']['conta'] += 1
    dados['values']['key'] = bool(chave.value())
    
    payload = dumps(dados).encode()
    
    mqtt.publish(topico, payload)
    sleep_ms(1000)