Requisitos do problema:
- O produto deve ser desenvolvido e depois testado através de contêineres Docker
- As interfaces devem ser projetadase implementadas através de protocolo baseado em uma APl REST, podendo ser testadas na apresentação através de softwares como Insomnia ou Postman;
- Para permitir a avaliago do protótipo, o medidor de energia deve ser simulado por software para geração de dados ficticios sobre o consumo. Para uma emulação realista do cenário proposto, cada dispositivo medidor deve ser executado em um container Docker separado em um computador no laboratório;
- O medidor deve possuir uma interface para controlar a geração dos dados em tempo real. Por exemplo, através da interface deve ser possivel definir, aumentar ou diminuir o consumo de energia em kWh;
- Por questões dos direitos comerciais, NENHUM framework de terceiro deve ser usado para implementar a solução do problema. Neste caso, apenas os mecanismos básicos presentes no sistema operacional e acessiveis pelas bibliotecas nativas da linguagem de programação podem ser usados para implementar a comunicação sobre uma arquitetura de rede baseada no padrão da Internet.
Ambiente de desenvolvimento:
Sistema operacional: Arch Linux
Linguagem de programação: Python 3.10.4
Bibliotecas nativas utilizadas:
- socket
- json
- threading
- uuid
Caso decida testar em ambiente local faça o clone do programa e execute as instruções para instalar:
git clone https://github.com/f3rn4nd0000/pbl_redes_1.git
cd pbl_redes_1
Para rodar o servidor:
python servidor/server.py
Para rodar o dispositivo UDP:
python dispositivo-udp/udp-client.py
Lembre-se de modificar o IP no código, pois o IP do servidor foi definido em código (hardcoded) como o endereço do Larsid 06
No momento da inicialização do dispositivo UDP será gerado um UUID e com base nele serão feitas as requisições para os respectivos dispositivos com aquele UUID
No portainer foram definidos os seguintes ambientes: Larsid 06 (servidor) Larsid 02 e 03 (clientes UDP)
Foram definidas as portas:
20001 para UDP
20004 para TCP
O programa contém dois endpoints que poderão receber requisições HTTP pelo Insomnia, que são as seguintes:
Requisição para endpoint
GET http://172.16.103.6:20004/<uuid>
Exemplo de resposta para requisição acima:
id do dispositivo: 109e68d6-c9d1-11ed-b2b9-d46a6af0c499
consumo instantaneo (KWh): 1 KWh
consumo total (KW): 1
data e horario: dia:03/23/23 horario:20:18:51
Requisição para endpoint /fatura
GET http://172.16.103.6:20004/<uuid>/fatura
Exemplo de resposta para requisição acima:
FATURA CORRESPONDENTE AO PERIODO DE
dia:03/21/23 horario:20:31:58
A
dia:03/21/23 horario:20:32:40
VALOR DA FATURA = R$ 79
Para ambas requisições acima podemos ainda receber uma resposta do tipo:
Esse dispositivo nao esta registrado no momento!!!