Este gerador de dados pretende simular os dados enviados por um carro inteligente enquanto este faz a sua viagem. São gerados dados como a velocidade a que o veículo se encontra, a sua localização atual, a mudança em que se encontra, as RPMs atuais, as quantidades de combustivel, óleo e água que o veículo tem, pressão dos pneus, temperatura dos pneus e temperatura do motor, estado das luzes. Também são gerados acontecimentos aleatórios, como avarias do motor, falta de combustivel, paragem para abastecimento, mudança do estado das luzes, etc.
Pré-requisitos:
- rabbitmq
- python
- pip
- venv
- Instalar o rabbitmq:
Para que a geração de dados seja feito com sucesso é necessária a instalação do rabbitmq, para isso basta seguir as instruções no site oficial: https://www.rabbitmq.com/download.html .
A nossa recomendação é correr a aplicação num container do docker, para isso basta correr o seguinte comando:
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11-managementEm outro terminal:
- Criar o virtual enviroment:
$ python3 -m venv venv- Ativar o virtual enviroment:
$ source venv/bin/activate- Instalar as *dependências:
$ pip install -r requirements.txtAs dependências que estão no ficheiro
requirements.txtsão o pika, que serve para realizar a conexão com o RabbitMQ e o numpy que serve para gerar probabilidades aleatórias.
Antes de correr a aplicação é necessário verificar que os pré-requisitos estão a correr e que a porta do RabbitMQ é a correta.
De forma a conseguirmos visualizar que os dados estão realmente a ser enviados para o RabbitMQ, podemos utilizar o RabbitMQ Management que é uma interface web que nos permite visualizar as filas e os dados que estão a ser enviados para elas, ou então utilizar o data_receiver.py que foi personalizado para receber os dados das filas específicas do gerador.
Existem 2 maneiras de correr a aplicação:
- Correr o ficheiro
sensor_data_generator.py:
$ python3 sensor_data_generator.py- Correr o ficheiro
run.sh:
$ ./run.shAntes de correr o ficheiro
run.shé necessário dar permissões de execução ao ficheiro:
$ chmod +x run.shPara configurar o gerador de dados é possível passar diversos parametros para o ficheiro sensor_data_generator.py:
-ho,--host: Host do RabbitMQ-id,--id: ID do carro que está a enviar os dados-f,--fuel: Nível de combustível inicial do carro-w,--water: Nível de água inicial do carro-o,--oil: Nível de óleo inicial do carro-tt,--time_trips: Tempo entre cada viagem-ts,--time_speed: Velocidade das paragens do carro (Quanto maior o valor, o carro ficará parado durante menos tempo)
-ho:str-id:int- sendo que o valor tem de ser maior ou igual a 0-f:float- sendo que o valor tem de ser maior ou igual a 0 e menor ou igual a 100-w:float- sendo que o valor tem de ser maior ou igual a 0 e menor ou igual a 100-o:float- sendo que o valor tem de ser maior ou igual a 0 e menor ou igual a 100-tt:float- sendo que o valor tem de ser maior ou igual a 0 e menor ou igual a 100-ts:float- sendo que o valor tem de ser maior ou igual a 0 e menor ou igual a 100
-ho:localhost-id:0-f:100-w:100-o:100-tt:30*60-ts:1
Exemplo:
$ python3 sensor_data_generator.py -ho localhost -id 1 -f 100 -w 100 -o 100 -tt 10 -ts 10Ao executar o script python através do ficheiro run.sh também é possível passar os mesmos argumentos que são passados para o ficheiro sensor_data_generator.py, apesar de os parametros serem ligeiramente diferente:
-h: Host do RabbitMQ-i: ID do carro que está a enviar os dados-f: Nível de combustível inicial do carro-w: Nível de água inicial do carro-o: Nível de óleo inicial do carro-t: Tempo entre cada viagem-s: Velocidade das paragens do carro (Quanto maior o valor, o carro ficará parado durante menos tempo)
Exemplo:
$ ./run.sh -w 20 -f 46 -o 85 -s 10000 -t 1 -h localhost -i 0As viagens são algo que teve de ser pré-definido e encontram-se nos ficheiros do diretório csv_trips. As viagens são sempre escolhidas aleatóriamente.
O gerador de dados conta com um sistema de logs que nos permite visualizar o que está a acontecer durante a execução do programa, ou seja, permite visualizar as tentativas de conexão com o RabbitMQ, todas as mensagens que são enviadas, e o dia e a hora de cada acontecimento.
Os logs são guardados no diretório logs que é criado, caso não exista, e esses ficheiros de logs são guardados com o nome no formato logfile_YYYY-MM-DD.log e são gerados a cada dia que o gerador é utilizado.