from machine import reset, Pin
from rede import Rede
from time import ticks_ms, sleep_ms, time
from json import dumps, loads, load
from ntptime import settime
from umqtt.robust import MQTTClient
from dht import DHT22
led = Pin(23, Pin.OUT, value=0)
sensor = DHT22(Pin(26))
with open('config.json','r') as arq:
cfg = load(arq)
def debug(arg):
print(arg)
def curiosa(t, p):
global cliente
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.encode(),
str(led.value()).encode())
else:
print ('Não sei lidar com isso')
#{"method":"setLed","params":false}
r = Rede(cfg['rede'],
cfg['senha'], cb=debug)
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/+')
else:
print ('Deu ruim...Reiniciando')
sleep_ms(2000)
reset()
dados={'ts': 0,
'values':{'temperatura':0.0,
'umidade':0.0}
}
antes = -cfg['medicao']
while True:
cliente.check_msg()
agora = ticks_ms()
# sensor Umidade e temperatura
if agora - antes >= cfg['medicao']:
dados['ts'] = (time() + 946_684_800)*1000
sensor.measure()
dados['values']['temperatura'] = sensor.temperature()
dados['values']['umidade'] = sensor.humidity()
payload = dumps(dados).encode()
cliente.publish(cfg['toptele'], payload)
antes = agora