# Imports
from machine import Pin, reset
from time import sleep_ms, localtime
from network import WLAN, STA_IF
from ntptime import settime
from umqtt.robust import MQTTClient
from json import dumps, loads
topico = b"001/lavabo/lumi/estado"
topComando = b"001/lavabo/lumi/comando"
def shazam(top, pacote):
global estado
print (top)
print (pacote)
if top == topComando:
try:
msg = pacote.decode()
if msg == 'on':
estado = True
else:
estado = False
except:
print("Erro")
else:
print("Pacote entregue errado")
# Definição de pinos e recursos
chave = Pin(4, Pin.IN, Pin.PULL_UP)
rele = Pin(5, Pin.OUT, value=0)
# Internet/Wi-Fi
rede = WLAN(STA_IF)
rede.active(True)
if not rede.isconnected():
rede.connect('Wokwi-GUEST','')
tentativas = 0
while not rede.isconnected() and tentativas < 20:
tentativas += 1
sleep_ms(500)
if rede.isconnected():
print (localtime())
settime()
print (localtime())
print(f'Config: {rede.ifconfig()}')
mqtt = MQTTClient('crr690823',
'broker.hivemq.com')
mqtt.set_callback(shazam)
mqtt.connect()
mqtt.subscribe(topComando)
else:
mqtt = None
print ('Não deu, meu quirido!')
reset()
# Inicialização das variáveis e outros
estado = estadoAnt = False
eChave = eChaveAnt = chave()
#https://wokwi.com/projects/411222724670962689
# Loop
while True:
# Primeiro verifica o físico
eChave = chave()
if eChave != eChaveAnt:
estado = not estado
eChaveAnt = eChave
sleep_ms(200)
# Depois verifica as msgs
try:
mqtt.check_msg()
except:
print ('Deu ruim no check_msg')
# Verificar a rede
# Tentar reconectar ao broker
if estado != estadoAnt:
rele.value(estado)
try:
dic = {"timestamp":localtime(),
"estado": estado}
msg = dumps(dic)
mqtt.publish(topico, msg.encode())
except:
print ('Deu ruim no publicar')
estadoAnt = estado