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
from rede import Rede
from ntptime import settime
led = Pin(23,Pin.OUT, value = 0)
with open ('config.json','r') as arq:
cfg = load(arq)
r = Rede(cfg['rede'], cfg['senha'])
'''
topico = b"v2/t"
clientID = "manuela11050514"
broker = "thingsboard.cloud"
token = "kqn08676j850kxgnb62o"
'''
def midnightsun(t,p):
global mqtt
if 'v2/r/req' in t.decode():
number = t.decode().replace('v2/r/req/', '')
print(number)
action = loads(p.decode())
if action['method'] == 'setLed':
if action['params'] == True:
led.on()
else:
led.off()
elif action['method'] == 'getLed':
topres = 'v2/r/res/'+number
mqtt.publish(topres.encode(), str(led.value().encode()))
else:
pass
else:
print('Não sei')
#print(f'Tópico: {t}')
#print(f'Conteúdo:{p}')
if r.conectado:
settime()
mqtt = MQTTClient(
cfg['clientId'],
cfg['broker'],
user = cfg['token'],
password = cfg['pass']
)
mqtt.set_callback(midnightsun)
mqtt.connect()
mqtt.subscribe(b'v2/r/req/+')
else:
print("Sem conexão")
mqtt = None
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:
mqtt.check_msg()
agora = ticks_ms()
if ticks_diff(agora, antes) >= cfg['medicao']:#intervalo:
dados["ts"] = (time() + 946_684_800) * 1000
sensor.measure()
dados["values"]["temperatura"] = sensor.temperature()
dados["values"]["umidade"] = sensor.humidity()
conteudo = dumps(dados).encode()
if r.conectado and mqtt is not None:
mqtt.publish(cfg['topicotele'], conteudo)
print(dados)
dados["values"]["contador"] += 1
antes = agora