def ativar(self, payload): try: msg = json.loads(payload) except Exception: db.log('mensagem', 'ativacao', msg='Formato de msg nao suportada: ' + str(payload), nivel='alerta') else: db.log('mensagem', 'ativacao', msg=str(msg)) if 'aerador' in msg: if msg['aerador']: ligar_aerador() else: desligar_aerador() if 'refletor' in msg: if msg['refletor']: self.ligar_refletor() else: self.desligar_refletor() if 'tratador' in msg: self.iniciar_tratador(msg['tratador']) if 'teste' in msg: digitalWrite('teste', msg['teste']) self.output_state({'teste': msg['teste']})
def send_update(self, info): msg = self.update_status("estado") if self.wamp_session is None: db.log('conexao', 'envia status', msg='desconectado', nivel='erro') else: self.wamp_session.publish(self.dispositivo + ".componentes", msg) db.log('conexao', 'envia status', msg='enviado {}: {}'.format(info, msg))
def iniciar_tratador(self, freq): try: freq = float(freq) if not 10 <= freq <= 120: raise ValueError( "Frequencia {} fora da faixa permita: 10-120".format(freq)) except Exception as e: db.log("ativar", "ativar tratador", msg=str(e), nivel="alerta") else: # converte a frequencia do motor para a da entrada de freq # entrada: min = 3, max = 120 # saida: min = 500, max = 2500 # o 0.5 serve pora arredondar freq = int((freq - 3) * (2500 - 500) / (120 - 3) + 500 + 0.5) self.mqtt_client.publish("controlador", "cycle:freq{}".format(freq))
def __init__(self, wamp_comp, reactor, teste=False): self.agenda = db.recupera_agenda() # wamp config self.wamp_session = None # "None" while we're disconnected from WAMP router self._wamp = wamp_comp # associate ourselves with WAMP session lifecycle self._wamp.on('join', self._initialize) self._wamp.on('leave', self._uninitialize) self.reactor = reactor # configura pinos do raspberry if teste: modo = 'Rodando em modo de teste, GPIO desbilitados' self.dispositivo = u'teste' else: modo = 'GPIO habilitados' configGPIO() # configura interruptores for key, val in input_pins.items(): if type(val) == int: gpio.add_event_detect(val, gpio.BOTH, callback=self.input_state_thread, bouncetime=300) self.dispositivo = u'raspi' self.dispositivo = u'com.' + self.dispositivo wamp_comp._transports db.log('app', u'inicialização', msg=modo) scheduler.start() # configura cliente mqtt para se comunicar com componentes remotos pela rede self.mqtt_client = mqtt.Client() self.mqtt_client.on_connect = self._initialize_mqtt self.mqtt_client.on_message = self.mqtt_message if not teste: self.mqtt_client.connect("127.0.0.1", 1883, 60) self.mqtt_client.loop_start() # lê sensor dht a cada meia hora: temperatura e umidade if not teste and "dht22" in conf["sensores"]: configDHT()
def atualizar(self, payload): resposta = '' try: nova_agenda = self.loadMsg(payload) except Exception as e: resposta += 'Alerta, mensagem: ' + str(e) db.log('conexao', 'mensagem', msg=str(e), nivel='alerta') else: resposta += 'Atualizado: ' if 'tratador' in nova_agenda: resposta += 'Tratador ' db.log('tratador', 'atualizado', msg=self.stringfyAgenda(nova_agenda['tratador'])) self.attTratador(nova_agenda['tratador']) if 'aerador' in nova_agenda: resposta += 'Aeradores' db.log('aerador', 'atualizado', msg=self.stringfyAgenda(nova_agenda['aerador'])) self.attAerador(nova_agenda['aerador']) # atualiza agenda na memória e no banco de dados for key in nova_agenda: self.agenda[key] = nova_agenda[key] db.salva_agenda(nova_agenda) return resposta
def _initialize(self, session, details): # print("Connected to WAMP router") db.log('conexao', 'conectado') self.wamp_session = session # reseta valores de reconexão # está mal implementado, se houver mais de um transport não saberei # reseta. tenho que encontrar o transporte em uso na conexão print("resetando valores de reconexão") self._wamp._transports[0].reset() try: yield session.register(self.atualizar, self.dispositivo + u'.atualizar') yield session.register(self.update_status, self.dispositivo + u'.status') yield session.register(self.ativar, self.dispositivo + u'.ativar') # print("procedimentos registrados") db.log('conexao', 'registro', msg='procedimentos registrados') except Exception as e: # print("Erro: não for possível registrar os procedimentos: {0}".format(e)) db.log('conexao', 'registro', msg=str(e), nivel='erro')
def ligar_tratador(quantidade): # print('Tratador: ligado', racao) db.log('tratador', 'ligado', msg='quantidade: ' + str(quantidade))
def mqtt_message(self, client, userdata, msg): db.log("mqtt", "mensagem", msg="topico: {}, msg: {}".format(msg.topic, msg.payload))
def _initialize_mqtt(self, client, userdata, flags, rc): db.log("mqtt", "conectado", msg=str(rc)) client.subscribe("tratador")
def _uninitialize(self, session, reason): # print(session, reason) # print("Lost WAMP connection") db.log('conexao', 'desconectado', msg=reason.message, nivel='alerta') self.wamp_session = None
def exit(exception): # print("Desligamento: limpando pinos") db.log('app', 'desligamento', msg=str(exception), nivel='erro') db.log('app', 'desligamento', msg='limpando pinos') if gpio: gpio.cleanup()
def desligar_refletor(): db.log('refletor', 'desligado') digitalWrite(output_pins['refletor'], False)
def ligar_refletor(): db.log('refletor', 'ligado') digitalWrite(output_pins['refletor'], True)
def desligar_aerador(): db.log('aerador', 'desligado') digitalWrite(output_pins['aerador'], False)
def ligar_aerador(): db.log('aerador', 'ligado') digitalWrite(output_pins['aerador'], True)