from machine import reset, Pin, 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 dht import DHT22
leitor = Pin(0, Pin.IN, Pin.PULL_UP)
sensor = DHT22(Pin(10))
porta = Pin(5, Pin.IN, Pin.PULL_UP)
luz = Pin(8, Pin.OUT, value=0)
def cbTimer(t):
global taNaHora
taNaHora = True
def debug(arg):
print(arg)
with open('config.json') as arq:
cfg = load(arq)
#Especifico do Thingsboard
clientId = 'crrifrsrg'
broker = 'demo.thingsboard.io'
usuario= '9lAuy5F1WFtAJsWt8sKS'
topico = b'v1/devices/me/telemetry'
topRPCReq = 'v1/devices/me/rpc/request/'
topRPCResp = 'v1/devices/me/rpc/response/'
def procRPC(t, p):
global cliente, vSetpoint
nroReq = t.decode().replace(topRPCReq,'')
acao = loads(p.decode())
if acao['method'] == 'getLuminaria':
cliente.publish((topRPCResp+nroReq).encode(), str(bool(luz.value())).lower().encode())
elif acao['method'] == 'setLuminaria':
luz.value(acao['params'])
elif acao['method'] == 'getSetpoint':
cliente.publish((topRPCResp+nroReq).encode(), str(vSetpoint).encode())
elif acao['method'] == 'setSetpoint':
vSetpoint = int(acao['params'])
print(vSetpoint)
else:
print (p)
r = Rede(cfg['rede'], cfg['senha'],
cb=debug)
if r.conectado:
settime()
cliente = MQTTClient(clientId,
broker,
user=usuario,
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 = 2000,
callback = cbTimer)
ePorta = aPorta = porta.value()
eLeitor = aLeitor = leitor.value()
dados={'ts':0, 'values':{}}
vSetpoint = 75 #Percentual
while True:
cliente.check_msg()
# Sensor da Porta
ePorta = porta.value()
if ePorta != aPorta:
if ePorta == 0:
evento={'ts':(time()+946684800)*1000,
'values':{'porta':'Aberta'}}
else:
evento={'ts':(time()+946684800)*1000,
'values':{'porta':'Fechada'}}
cliente.publish(topico,
dumps(evento).encode())
aPorta = ePorta
sleep_ms(150)
# sensor Umidade e temperatura
if taNaHora:
sensor.measure()
dados['ts'] = (time()+946684800)*1000
dados['values']['temp'] = sensor.temperature()
dados['values']['umid'] = sensor.humidity()
payload = dumps(dados).encode()
cliente.publish(topico, payload)
taNaHora = False
# Leitor de cartao
eLeitor = leitor.value()
if eLeitor != aLeitor:
if eLeitor == 0:
chave = '1A 2B 3C'
evento={'ts':(time()+946684800)*1000,
'values':{'chave':chave}}
cliente.publish(topico,
dumps(evento).encode())
aLeitor = eLeitor
sleep_ms(150)
Loading
aitewinrobot-esp32c3-supermini
aitewinrobot-esp32c3-supermini