A especificação do trabalho pode ser encontrada aqui.
São utilizadas apenas módulos builtin de python, logo não é necessário instalar dependências via pip
.
A única configuração necessária a ser feita no Servidor Central é no arquivo src/central/config.json
. Onde é necessário alterar os seguintes campos:
- ip: IP pelo qual esse Servidor Central ficará disponível para receber requisições. (Pode ser deixado como 0.0.0.0)
- port: Porta pelo qual esse Servidor Central ficará disponível para receber requisições.
- log_file: Caminho do arquivo que será utilizado para para escrever os logs dos comandos solicitados pelo usuário. (Opcional)
- rooms: Lista das salas que o Servidor Central se comunicará para enviar os comados.
- name: Nome da sala que será apresentado no Servidor Central. É recomendado colocar um nome único para melhor identificação da sala.
- ip: IP que será usado para se comunicar com o Servidor Distribuído que está instalado nesta sala.
- port: Porta que será usada para se comunicar com o Servidor Distribuído que está instalado nesta sala.
Esse passo é opcional, mas recomendado. Primeiro vamos criar um ambiente virtual para instalar as dependências do projeto.
# Criando um ambiente virtual com nome `venv`
python3 -m venv venv
# Ativando o ambiente virtual
source venv/bin/activate
Agora vamos instalar as bibliotecas necessárias para rodar o projeto.
# Atualizando o pip
pip3 install -U pip
# Instalando bibliotecas
pip3 install -r requirements.txt
Por fim precisamos configurar o arquivo src/distribuido/config.json
. Nesse arquivo precisamos alterar os seguintes campos:
- ip_servidor_central: IP que será usado para se comunicar com o Servidor Central via socket
- porta_servidor_central: Porta que será usada para se comunicar com o Servidor Central via socket
- ip_servidor_distribuido: IP pelo qual esse Servidor Distribuído ficará disponível para receber requisições. (Pode ser deixado como 0.0.0.0)
- porta_servidor_distribuido: Porta pelo qual esse Servidor Distribuído ficará disponível para receber requisições
- inputs: Os campos
gpio
devem ser configurados de acordo com os pinos da GPIO - ouputs: Os campos
gpio
devem ser configurados de acordo com os pinos da GPIO - sensor_temperatura: Os campos
gpio
devem ser configurados de acordo com os pinos da GPIO
IMPORTANTE: O campo tag
dos dispositivos inputs e outputs não deve ser alterado!!
Com o Servidor Distribuído e o Servidor Central configurados, deixe o Servidor Distribuído rodando em um terminal a parte e execute o Servidor Central.
Para o uso adequado do Servidor Central é necessário tomar cuidado com o tamanho do terminal, pois a pesar das "caixinhas" da interface serem responsivas, caso não tenha espaço suficiente para mostrar todos os dados ele irá parar a execução.
Na Figura 1 podemos ver a interface em um terminal com tamanho reduzido e com o menu de dispositivos de saída selecionado. Já na Figura 2 temos um exemplo do terminal em modo tela cheia no menu principal da aplicação.
Como podemos ver nas figuras acima, a interface apresenta algumas informações que são atualizadas a cada segundo, são elas:
- Temperatura: Temperatura atual da sala
- Umidade: Umidade atual da sala
- Número de Pessoas: Quantidade de pessoas que estão na sala no momento (Começa a contar quando o Servidor Distribuído entra em execução)
- Número de Pessoas Total: Somatório do Número de Pessoas de todas as salas
- Modo Alarme: estado do Modo Alarme. Quando o Modo de Alarme está ativado a Sirene do Alarme é acionada sempre que há detecção de presença na sala ou o sensor de janela ou o sensor de porta é acionado.
- Menu: Possíveis ações que o usuário pode realizar.
- Últimos eventos: Últimas 4 ações que o usuário solicitou da forma DATA HORA SALA DISPOSITIVO VALOR. Quando a mensagem está em verde significa que o comando da mensagem foi realizado com sucesso, quando está em vermelho significa que houve um erro na execução do comando.
- Dispositivos de Entrada: Estado de todos os sensores de entrada presentes na GPIO.
- Dispositivos de Saída: Estado de todos os sensores de saída presentes na GPIO.
Para navegar nos menus é possível utilizar as setinhas do teclado, ou as teclas j
e k
para navegar para baixo e para cima respectivamente. Para executar a ação que está selecionada aperte a tecla Enter
. Para voltar para a primeira opção do Menu, seja da aba Dispositivos de Saída ou do próprio Menu aperte Backspace
. A navegação entre salas é realizada através das teclas Tab
e Shift + Tab
para ir para a próxima sala e para a anterior respectivamente. Para sair do programa basta selecionar a opção Sair ou apertar Ctrl + c
.