from machine import reset, Pin, Timer
from rede import Rede
from time import sleep_ms, localtime
from json import load, dumps, loads
from ntptime import settime
from umqtt.robust import MQTTClient
from dht import DHT22
leitor = Pin(0, Pin.IN, Pin.PULL_UP)
sensor = DHT22(Pin(10))
porta = Pin(5, Pin.IN, Pin.PULL_UP)
def cbTimer(t):
global taNaHora
taNaHora = True
def debug(arg):
print(arg)
def processaMsg(t, p):
global topResposta
print(t,p)
if t == topResposta:
try:
resposta = loads(p.decode())
print (resposta)
except:
print("Erro ao decodificar resposta")
else:
print ("Deu ruim. Não assinei isso.")
with open('config.json') as arq:
cfg = load(arq)
topTele = b'ifrsrg/auto/info/902/telemetria'
topEventos = b'ifrsrg/auto/info/902/evento'
topChave = b'ifrsrg/auto/info/902/enviaChave'
topResposta = b'ifrsrg/auto/info/902/resp'
r = Rede(cfg['rede'], cfg['senha'],
cb=debug)
if r.conectado:
settime()
cliente = MQTTClient(cfg["clientId"],
cfg["broker"])
cliente.set_callback(processaMsg)
cliente.connect()
cliente.subscribe(topResposta)
else:
print ('Deu ruim...Reiniciando')
sleep_ms(2000)
reset()
taNaHora = False
timm = Timer(0)
timm.init(mode = Timer.PERIODIC,
period = 2000,
callback = cbTimer)
ePorta = aPorta = porta.value()
eLeitor = aLeitor = leitor.value()
dados={}
while True:
cliente.check_msg()
# Sensor da Porta
ePorta = porta.value()
if ePorta != aPorta:
if ePorta == 0:
evento={'ts':localtime(),
'porta':'Aberta'}
else:
evento={'ts':localtime(),
'porta':'Fechada'}
cliente.publish(topEventos,
dumps(evento).encode())
aPorta = ePorta
sleep_ms(150)
# sensor Umidade e temperatura
if taNaHora:
sensor.measure()
dados['ts'] = localtime()
dados['temp'] = sensor.temperature()
dados['umid'] = sensor.humidity()
payload = dumps(dados).encode()
cliente.publish(topTele, payload)
taNaHora = False
# Leitor de cartao
eLeitor = leitor.value()
if eLeitor != aLeitor:
if eLeitor == 0:
chave = '1A 2B 3C'
evento={'ts':localtime(),
'chave':chave}
cliente.publish(topChave,
dumps(evento).encode())
aLeitor = eLeitor
sleep_ms(150)
Loading
aitewinrobot-esp32c3-supermini
aitewinrobot-esp32c3-supermini