from machine import Pin, ADC
from time import localtime, ticks_ms
from dht import DHT22
from math import exp
import json
from ntptime import settime
from rede import Rede
from umqtt.robust import MQTTClient
from json import load
with open("config.json", "r") as arq:
config = load(arq)
sensor = DHT22(Pin(config['pinos']['dht22']))
ldr = ADC(Pin(config['pinos']['ldr']))
ldr.atten(ADC.ATTN_11DB)
ch = Pin(config['pinos']['porta'], Pin.IN, Pin.PULL_UP)
led = Pin(config['pinos']['led'], Pin.OUT)
r = Rede(config["rede"]["nome"], config["rede"]["senha"], conecta=False)
try:
r.conectar(
tentativas = config['rede']['tentativas'],
intervalo = config['rede']["intervalo"]
)
if r.conectado:
settime() #data/hora atualiza, protocolo NTP
except OSError as e:
print ("Deu ruim")
print (e)
try:
if r.conectado:
cliente = MQTTClient(config["mqtt"]["client"], config["mqtt"]["broker"])
cliente.connect()
except:
print('deu ruim 2')
ultimaleitura = ticks_ms()
ultimamedicao = ticks_ms()
dados = {
"container": config["dispositivo"]["container"],
"temperatura":[] ,
"umidade":[],
"luz":[],
"porta":0,
"timestamp":0
}
while True:
agora = ticks_ms()
if agora - ultimaleitura >= 1000:
x = ldr.read_u16()
luz = 103589 * exp(-3.49e-04 * x)
dados["luz"].append(luz)
sensor.measure()
temperatura = sensor.temperature()
dados["temperatura"].append(temperatura)
umidade = sensor.humidity()
dados["umidade"].append(umidade)
porta = ch.value()
dados["porta"] = porta
if porta == 1:
led.on()
else:
led.off()
t = localtime() #data e hora
dados["timestamp"] = f'{t[0]}-{t[1]}-{t[2]}T{t[3]}:{t[4]}:{t[5]}'
print(dados)
ultimaleitura = agora
if agora - ultimamedicao >= 5000:
dadosjson = json.dumps(dados)
try:
if r.conectado:
cliente.publish(config["mqtt"]["topico"], dadosjson.encode())
dados["temperatura"] = []
dados["umidade"] = []
dados["luz"] = []
except:
print('deu ruim 3')
if temperatura > 25: #para a lógica aq, resolver!!!!
avisotemp = 'temperatura alta!'
cliente.publish(config["mqtt"]["topico2"], avisotemp.encode())
elif umidade > 50:
avisoumid = 'umidade alta!'
cliente.publish(config["mqtt"]["topico2"], avisoumid.encode())
elif luz > 4.9028664:
avisoluz = 'luz alta!'
cliente.publish(config["mqtt"]["topico2"], avisoluz.encode())
ultimamedicao = agora