from machine import Pin
from dht import DHT22
from time import ticks_ms, ticks_diff, time
from umqtt.robust import MQTTClient
from json import dumps, loads, load, dump
from rede import Rede
from ntptime import settime
with open('config.json','r') as arq:
cfg = load(arq)
def debug(arq):
print(arq)
def curiosa(t, p):
global mqtt
if 'v2/r/req' in t.decode():
nro = t.decode().replace('v2/r/req/', '')
print(f'enviado por {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
mqtt.publish(topres.encode(), str(led.value()).encode())
else:
pass
else:
print('Não sei lidar com isso')
r = Rede(cfg['rede'], cfg['senha'])
topico = b"v2/t"
if r.conectado:
settime()
mqtt = MQTTClient(
cfg['clientID'],
cfg['broker'],
user = cfg['token'],
password = cfg['password'])
mqtt.set_callback(curiosa)
mqtt.connect()
mqtt.subscribe(b'v2/r/req/+')
else:
print("Sem conexão")
mqtt = None
led = Pin(23, Pin.OUT, value = 0)
sensor = DHT22(Pin(14))
intervalo = 2000
antes = - cfg['medicao']
contador = 0
dados = {
"ts": (time() + 946_684_800) * 1000, #transforma os segundos obtidoa através da função time() e transforma em ms, e adiciona +30anos, já que é a esp pega os segundos desde 2000, porém o time() no PC pega os segundos desde 1970
"values": {
"temperatura": 0,
"umidade": 0,
"contador": 1
}
}
while True:
agora = ticks_ms()
mqtt.check_msg()
if ticks_diff(agora, antes) >= cfg['medicao']:
sensor.measure()
dados["values"]["temperatura"] = sensor.temperature()
dados["values"]["umidade"] = sensor.humidity()
dados["ts"] = (time() + 946_684_800) * 1000
conteudo = dumps(dados).encode()
if r.conectado and mqtt is not None:
mqtt.publish(cfg['toptele'], conteudo)
#print(dados)
dados["values"]["contador"] += 1
antes = agora