from machine import Pin
from dht import DHT22
from time import ticks_diff, ticks_ms, time
from rede import Rede
from umqtt.robust import MQTTClient
from json import dumps, loads
from ntptime import settime
r = Rede("Wokwi-GUEST", "")
def curiosa(t, p):
if 'v2/r/req' in t.decode():
nro = t.decode().replace('v2/r/req/', '')
print(nro)
acao = loads(p.decode())
if acao['metod'] == 'setLed':
if acao['params'] == True:
led.on()
else:
led.off()
elif acao['method'] == 'getLed':
pass
else:
print('Não sei lidar com isso')
#print(f'Tópico:{t}')
#print(f'Conteúdo:{p}')
#v2/r/req/2
#{"method":"setLed","params":false}
if r.conectado:
settime()
cliente = MQTTClient("isa2305",
"thingsboard.cloud",
user="yce67fz5pqiaogiai89e",
password="")
cliente.set_callback(curiosa)
cliente.connect()
cliente.subscribe(b'v2/r/req/+') #v2/r/req/0, v2/r/req/1 v2/r/req/2.... ---> para isso serve o '+'
else:
print("Sem conexão")
cliente = None
led = Pin(23, Pin.OUT, value=0)
sensor = DHT22(Pin(26))#pino nem in nem out
intervalo = 2000
antes = -intervalo
dados ={ "ts" : (time()+946_684_800)*1000,
"values": {"temperatura": 0,
"umidade":0,
"contagem":1}
}
while True:
cliente.check_msg()
agora = ticks_ms() #não pausa, só conta tempo ---> agora - antes
if ticks_diff(agora, antes) >= intervalo:
sensor.measure()
dados["values"]["temperatura"] = sensor.temperature()
dados["values"]["humidity"] = sensor.humidity()
dados["ts"] = (time()+
946_684_800)*1000
#conta += 1
if r.conectado and cliente is not None:
cliente.publish(b"v2/t", dumps(dados).encode() )#pq o 'encode'? ---> pq a biblioteca do mqtt não trabalha com phyton, o encode transforma em bytes
print(dados)
antes = agora
#se cair a conexão ele vai continuar armazenando dados