from machine import Pin
from dht import DHT22
from time import ticks_ms, ticks_diff, time
from rede import Rede
from umqtt.robust import MQTTClient
from json import dumps
from ntptime import settime
with open (config.json, 'r') as arq:
cfg = load(arq)
def
r = Rede(cfg[rede], cfd[senha] cb=debug)
def curiosa(t, p):
print(p.decode())
if 'v2/r/req' in t.decode():
nro = t.decode().replace('v2/r/req/', '') #numero do pedido
print(nro)
acao = loads(p.decode())
if acao['method'] == 'setLed':
if acao['params']== True:
led.on()
else:
led.off()
elif acao ['method'] == 'getLed':
pass
else:
print ('não sei lidar!')
print(f'Tópico: {t}')
print(f'Conteúdo: {p}')
'''
if r.conectado:
settime()
cliente = MQTTClient(cfg['clientId'], #clientid NÃO pode repetir, unico
cfg['broker'],
user = cfg['token'], #token
password = cfg['senha']) #obrigatório
cliente.set_callback(curiosa)
cliente.connect()
cliente.subscribe(b'v2/r/req/+')
else:
print('Sem conexão')
cliente = None
sensor = DHT22(Pin(13)) #horas in e horas out
led = Pin(23, Pin.OUT, value=False)
intervalo = 2000
antes = -intervalo
dados = {'ts': (time() + 946_684_800)* 1000,
'values': {"temperatura": [],
'umidade': [],
'contagem': 1}
}
while True:
cliente.check_msg()
agora = ticks_ms()
if ticks_diff(agora,antes) >= intervalo: #agora - antes, cada vez que o cronometro zera, liga um byte e ele analisa novamente
sensor.measure()
dados['values']['temperatura'] = sensor.temperature()
dados['values']['umidade'] = sensor.humidity()
dados['ts'] = (time() + 946_684_800)* 1000
#*1000 pq time é em segundos e precisamos em ms
if r.conectado and cliente is not None: #confere se ta tudo ok
cliente.publish(b'v2/t', dumps(dados).encode()) #(topico, conteudo) v2/t em bites é o tópico no Tb
dados['values']['contagem'] += 1
antes=agora