from machine import reset, Pin, Timer, RTC
from dht import DHT22
from rede import Rede
from ntptime import settime
from time import ticks_ms, sleep_ms, localtime, time
from umqtt.robust import MQTTClient
from json import dumps, loads
sensor = DHT22(Pin(26))
led = Pin(2, Pin.OUT)
rtc = RTC()
def debug(arg):
print(arg)
#with open('config.json') as arq:
# cfg = load(arq)
#Especifico do Thingsboard
clientId = 'crrifrsrg3'
broker = 'thingsboard.cloud'
usuario= 'ima1981auok3eqab76jk'
topico = b'v1/devices/me/telemetry'
topRPCReq = 'v1/devices/me/rpc/request/'
topRPCRsp = 'v1/devices/me/rpc/response/'
def fofoqueira(t, p):
topico = t.decode()
if topRPCReq in topico:
nroReq = topico.replace(topRPCReq, '')
#print(nroReq)
try:
acao = loads(p.decode())
print(acao)
if acao['method'] == 'iniciaColeta':
led.on()
elif acao['method'] == 'paraColeta':
led.off()
elif acao['method'] == 'estadoFimDeCurso':
t = (topRPCRsp+nroReq).encode()
p = str(bool(fimCurso.value())).lower().encode()
#p = b'true' if fimCurso.value() else b'false'
cliente.publish(t, p)
elif acao['method'] == 'getTemperatura':
t = (topRPCRsp+nroReq).encode()
p = str(sensor.temperature()).encode()
cliente.publish(t, p)
elif acao['method'] == 'setTemperatura':
pass
except:
print ('Ih, deu ruim')
try:
r = Rede('Wokwi-GUEST', '',
cb=debug)
if r.conectado:
#settime()
rtc.datetime((2026,5,13,2,11,57,0,0))
cliente = MQTTClient(clientId,
broker,
user=usuario,
password='')
cliente.set_callback(fofoqueira)
cliente.connect()
cliente.subscribe((topRPCReq+'+').encode())
else:
print ('Deu ruim...Reiniciando')
sleep_ms(2000)
reset()
except:
print ('Deu ruim na rede')
r = None
dados={'ts':0, 'values':{'temp':0, 'umid':0}}
while True:
if r is not None and r.conectado:
cliente.check_msg()
dados['ts'] = (time() + 946684800)*1000
sensor.measure()
dados['values']['temp'] = sensor.temperature()
dados['values']['umid'] = sensor.humidity()
if r is not None and r.conectado:
payload = dumps(dados).encode()
cliente.publish(topico, payload)
else:
print ('salvando em arquivo')
#depois de 50 leituras, tentar conectar de novo
#print('enviado')
sleep_ms(100)