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, load
from ntptime import settime
with open('config.json', 'r') as arq:
cfg = load(arq)
r = Rede(cfg['rede'], cfg['senha'])
led = Pin(23, Pin.OUT, value=0)
sensor = DHT22(Pin(26))#pino nem in nem out
def curiosa(t, p):
print(p.decode())
print(t.decode())
if 'v2/r/req' in t.decode():
nro = t.decode().replace('v2/r/req/', '')
print(nro)
acao = loads(p.decode())
if acao['method'] == 'setLed':
if acao['params'] == True:
led.on()
else:
led.off()
elif acao['method'] == 'getLed':
topres = 'v2/r/res/'+nro
cliente.publish(topres, str(led.value()).encode())
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(cfg['clientId'],
cfg['broker'],
user=cfg['token'],
password=cfg['pass'])
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 = -cfg['medicao']
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