# Por RPC
# setBomba() - Liga/Desliga Bomba de entrada (1/0)
# setSaida() - Abra/Fecha válvula solenoide (1/0)
# setVazao() - Define a vazão da bomba (0-750l/h)
# Por telemetria
# medida - Vazão de entrada medida por sensores
# volume - Volume no tanque
from machine import reset
from time import time, sleep_ms, ticks_ms
from json import load, loads, dumps
from umqtt.robust import MQTTClient
import ntptime
from rede import ativaWifi, reconecta
topTelemetria = b'v1/devices/me/telemetry'
topRPCGeral = 'v1/devices/me/rpc/request/'
topRPCResp = 'v1/devices/me/rpc/response/'
topAttGeral = 'v1/devices/me/attributes/request/'
topAttResp = 'v1/devices/me/attributes/response/'
def rpc(t, p):
print (t, p)
#reqid = t.decode().replace(topRPCGeral, '')
#acao = loads(p.decode())
#print(acao)
with open('config.json', 'r') as arq:
cfg = load(arq)
atualizaTelemetria = ticks_ms()
wifi = ativaWifi(cfg['rede'], cfg['senha'])
if not wifi:
print ('Sem rede. Reiniciando')
sleep_ms(1500)
reset()
ntptime.settime()
mqtt = MQTTClient(cfg['clientId'], cfg['broker'], user = cfg['usuario'], password = cfg['password'])
mqtt.set_callback(rpc)
mqtt.connect()
print ('requests')
mqtt.subscribe(b"v1/devices/me/rpc/request/+")
print ('attrs')
mqtt.subscribe(b"v1/devices/me/attributes/response/+")
print ('todos')
mqtt.subscribe(b"v1/devices/me/attributes")
dados = {'ts': 0, 'values': {'nro': 0}}
attr = {'kp': 1.0, 'kd': 0.0, 'ki': 0.001}
n=0
mqtt.publish(b'v1/devices/me/attributes', dumps(attr).encode())
while True:
mqtt.check_msg()
if not wifi.isconnected():
reconecta(wifi, cfg['rede'], cfg['senha'])
if ticks_ms() >= atualizaTelemetria:
dados['ts'] = (time()+946684800)*1000
dados['values']['nro'] = n
mqtt.publish(topTelemetria, dumps(dados).encode())
n += 1
atualizaTelemetria = ticks_ms() + cfg['intervalo']
print("Finalizando simulação")