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
r = Rede("Wokwi-GUEST", "")
token = "e1FLid00HueIKn5k1U3"
Led = Pin(23, Pin.OUT, value = 0)
Led2 = Pin(22, Pin.OUT, value = 0)
Led3 = Pin(21, Pin.OUT, value = 0)
def curiosa(t, p):
global mqtt
if 'v2/r/req' in t.decode():
nro = t.decode().replace('v2/r/req/', '') #o replace tira o primeiro item e troca pelo segudo item
print(nro)
acao = loads(p.decode())
if acao['method'] == 'setLed' or acao['method'] == 'setLed2' or acao['method'] == 'setLed3':
if acao['params'] == True:
Led.on()
Led2.on()
Led3.on()
else:
Led.off()
Led2.off()
Led3.off()
elif acao['method'] == 'getLed' or acao['method'] == 'getLed2' or acao['method'] == 'getLed3':
topores = 'v2/r/res/'+nro
mqtt.publish(topres.encode(),
str(led.value()).encode())
else:
pass
else:
print('NÃO SEI LIDAR COM ISSO')
"""
print(f'Tópico:{t}')
print(f'Conteúdo:{p}')
v2/r/req/10
{"method":"setState","params":true}
"""
with open('config.json', 'r') as arq:
cfg = load(arq)
if r.conectado:
settime() #hora atual
mqtt = MQTTClient(cfg['clientID'],
cfg['broker'],
user = cfg['token'],
password = cfg['senha'])
mqtt.set_callback(curiosa)
mqtt.connect() #conexão do broker #o id é aleatório
mqtt.subscribe(b'v2/r/req/+')
else:
print("Sem conexão")
mqtt = None
sensor = DHT22(Pin(32))
#led = Pin(23, Pin.OUT, value = 0)
intervalo = 2000
antes = -cfg['medicao']
conta = 1
dados = {"ts" : (time() + 946_684_800)*1000,
"values":{"temperatura":
0 ,
"umidade":0,
"contagem": conta}
}
while True:
mqtt.check_msg() #verifica se tem algo q vem do broker
agora = ticks_ms() #conta tempo
if ticks_diff(agora, antes) >= cfg['medicao']: #ticks_diff faz agora - antes
sensor.measure()
dados["values"]["temperatura"] = sensor.temperature()
dados["values"]["humidity"] = sensor.humidity()
dados["ts"] = (time()+946_684_800)*1000
conta += 1 #contador
if r.conectado and mqtt is not None:
mqtt.publish(cfg['toptele'], dumps(dados).encode()) #encode é apenas os bytes
print(dados)
dados['values']['contagem'] += 1
antes = agora