Beispiel #1
0
    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']})
Beispiel #2
0
 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))
Beispiel #3
0
 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))
Beispiel #4
0
    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()
Beispiel #5
0
    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
Beispiel #6
0
    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')
Beispiel #7
0
def ligar_tratador(quantidade):
    # print('Tratador: ligado', racao)
    db.log('tratador', 'ligado', msg='quantidade: ' + str(quantidade))
Beispiel #8
0
 def mqtt_message(self, client, userdata, msg):
     db.log("mqtt",
            "mensagem",
            msg="topico: {}, msg: {}".format(msg.topic, msg.payload))
Beispiel #9
0
    def _initialize_mqtt(self, client, userdata, flags, rc):
        db.log("mqtt", "conectado", msg=str(rc))

        client.subscribe("tratador")
Beispiel #10
0
    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
Beispiel #11
0
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()
Beispiel #12
0
def desligar_refletor():
    db.log('refletor', 'desligado')
    digitalWrite(output_pins['refletor'], False)
Beispiel #13
0
def ligar_refletor():
    db.log('refletor', 'ligado')
    digitalWrite(output_pins['refletor'], True)
Beispiel #14
0
def desligar_aerador():
    db.log('aerador', 'desligado')
    digitalWrite(output_pins['aerador'], False)
Beispiel #15
0
def ligar_aerador():
    db.log('aerador', 'ligado')
    digitalWrite(output_pins['aerador'], True)