from machine import reset, Timer
from rede import Rede
from time import sleep_ms, time
from json import load, dumps, loads
from ntptime import settime
from umqtt.robust import MQTTClient
from processo import Volume
topico = b'v1/devices/me/telemetry'
topRPCGeral = 'v1/devices/me/rpc/request/'
topRPCResp = 'v1/devices/me/rpc/response/'
#parte RPC
def procRPC(t,p):
global cliente
print (t)
nroReq = t.decode().replace(topRPCGeral, '')
print (nroReq)
acao = loads(p.decode())
print(acao)
if acao['method'] == 'getBomba':
cliente.publish((topRPCResp+nroReq).encode(), str(bool( processo.getBomba())).lower().encode())
elif acao['method'] == 'setBomba':
processo.setBomba(acao['params'])
elif acao['method'] == 'getSaida':
cliente.publish((topRPCResp+nroReq).encode(), str(bool( processo.getSaida())).lower().encode())
elif acao['method'] == 'setSaida':
processo.setSaida(acao['params'])
elif acao['method'] == 'getVazao': #numérico
cliente.publish((topRPCResp+nroReq).encode(), str(int(processo.getVazao())).lower().encode())
elif acao['method'] == 'setVazao':
processo.setVazao(int(acao['params']))
with open('config.json', 'r') as arq:
cfg = load(arq)
def cbTimer(t):
global taNaHora
taNaHora = True
def debug(arg):
print(arg)
with open('config.json') as arq:
cfg = load(arq)
r = Rede(cfg['rede'], cfg['senha'],
cb=debug)
if r.conectado:
settime()
cliente = MQTTClient(cfg["clientId"],
cfg["broker"],
user=cfg["userbroker"],
password='')
cliente.set_callback(procRPC)
cliente.connect()
cliente.subscribe(b'v1/devices/me/rpc/request/+')
else:
print ('Deu ruim...Reiniciando')
sleep_ms(2000)
reset()
taNaHora = False
timm = Timer(0)
timm.init(mode = Timer.PERIODIC,
period = 500,
callback = cbTimer)
processo = Volume()
dados = {'ts':0,
'values' :{}}
while True:
processo.update()
cliente.check_msg()
if taNaHora:
dados['ts'] = (time()+946684800)*1000
dados['values']['vazaoMedia'] = processo.getVazao()
dados['values']['volume'] = processo.getVolume()
cliente.publish(topico, dumps(dados).encode())
taNaHora = False
Loading
aitewinrobot-esp32c3-supermini
aitewinrobot-esp32c3-supermini