IoTTU Γ© um sistema integrado de gerenciamento de motocicletas em pΓ‘tios, desenvolvido para a FIAP. O projeto combina tecnologias de IoT (Internet das Coisas) com uma aplicaΓ§Γ£o web robusta e uma API REST para dispositivos mΓ³veis. O sistema permite o rastreamento em tempo real de motocicletas atravΓ©s de tags RFID e Wi-Fi, utilizando comunicaΓ§Γ£o MQTT para receber dados de dispositivos IoT.
- Conta Oracle Fiap: Declarar variaveis de ambiente: ORACLE_USER e ORACLE_PASSWORD
- /yards/vagas/{id}: Vagas disponΓveis
- /yards/json/{id}}: Json das motos de um pΓ‘tio
- /yards/relatorio: Relatorio em JSON dos status das motos de todos os patios cadastrados
- Allan Brito Moreira - RM558948
- Caio Liang - RM558868
- Levi Magni - RM98276
- Dashboard Principal: VisualizaΓ§Γ£o geral do sistema
- Gerenciamento de UsuΓ‘rios: CRUD completo com controle de permissΓ΅es (ADMIN/USER)
- Gerenciamento de PΓ‘tios: Cadastro e controle de pΓ‘tios com capacidade e localizaΓ§Γ£o
- Gerenciamento de Motocicletas: Registro de motos com placa, chassi, modelo e nΓΊmero do motor
- Gerenciamento de Tags: Controle de tags RFID/Wi-Fi associadas Γ s motocicletas
- Gerenciamento de Antenas: Cadastro de antenas com coordenadas GPS
- Mapa do PΓ‘tio: VisualizaΓ§Γ£o geogrΓ‘fica das motos e antenas em tempo real
- AutenticaΓ§Γ£o OAuth2: Login com GitHub e Google
- InternacionalizaΓ§Γ£o: Suporte para portuguΓͺs (pt_BR) e inglΓͺs (en_US)
Endpoints disponΓveis para integraΓ§Γ£o mobile:
POST /api/v1/auth/login- Login de usuΓ‘rios
GET /api/v1/users- Listar usuΓ‘riosGET /api/v1/users/{id}- Buscar usuΓ‘rio por IDPOST /api/v1/users- Criar usuΓ‘rioPUT /api/v1/users/{id}- Atualizar usuΓ‘rioDELETE /api/v1/users/{id}- Deletar usuΓ‘rio
GET /api/v1/yards- Listar pΓ‘tios (suporta filtro por userId)GET /api/v1/yards/{id}- Buscar pΓ‘tio por IDGET /api/v1/yards/{id}/map- Obter dados do mapa do pΓ‘tioPOST /api/v1/yards- Criar pΓ‘tioPUT /api/v1/yards/{id}- Atualizar pΓ‘tioDELETE /api/v1/yards/{id}- Deletar pΓ‘tio
GET /api/v1/motorcycles- Listar motocicletas (suporta filtro por userId)GET /api/v1/motorcycles/{id}- Buscar motocicleta por IDPOST /api/v1/motorcycles- Criar motocicletaPUT /api/v1/motorcycles/{id}- Atualizar motocicletaDELETE /api/v1/motorcycles/{id}- Deletar motocicleta
GET /api/v1/tags- Listar tagsGET /api/v1/tags/available- Listar tags disponΓveisGET /api/v1/tags/{id}- Buscar tag por IDPOST /api/v1/tags- Criar tagPUT /api/v1/tags/{id}- Atualizar tagDELETE /api/v1/tags/{id}- Deletar tag
GET /api/v1/antennas- Listar antenas (suporta filtro por yardId)GET /api/v1/antennas/{id}- Buscar antena por IDPOST /api/v1/antennas- Criar antenaPUT /api/v1/antennas/{id}- Atualizar antenaDELETE /api/v1/antennas/{id}- Deletar antena
DocumentaΓ§Γ£o Swagger: DisponΓvel em /swagger-ui.html quando o servidor estiver rodando.
O sistema utiliza o protocolo MQTT para comunicaΓ§Γ£o em tempo real com dispositivos IoT instalados nos pΓ‘tios. A arquitetura Γ© composta por:
- Broker MQTT: Servidor de mensageria que recebe dados dos dispositivos
- Dispositivos IoT:
- Tags RFID/Wi-Fi nas motocicletas
- Antenas receptoras nos pΓ‘tios
- Backend Java: Processa mensagens MQTT e atualiza o banco de dados
No arquivo application.properties:
mqtt.broker.url=tcp://${SEU_IP:127.0.0.1}:1883
mqtt.client.id=iottu-backend-client
mqtt.enabled=false- mqtt.broker.url: EndereΓ§o do broker MQTT (padrΓ£o: localhost:1883)
- mqtt.client.id: Identificador ΓΊnico do cliente
- mqtt.enabled: Habilita/desabilita a funcionalidade MQTT (padrΓ£o: false)
β οΈ IMPORTANTE: Para utilizar a funcionalidade IoT/MQTT, Γ© obrigatΓ³rio alterarmqtt.enabled=falseparamqtt.enabled=trueno arquivoapplication.properties. Sem essa alteraΓ§Γ£o, o sistema nΓ£o irΓ‘ conectar ao broker MQTT nem processar mensagens dos dispositivos IoT.
- TΓ³pico:
fiap/iot/moto - QoS: 1 (Garantia de entrega mΓnima de uma vez)
{
"motos": [
{
"status": "Ativa",
"alerta": "Movimento nΓ£o autorizado",
"id_status": 1,
"id_patio": 1,
"placa_moto": "ABC1234",
"chassi_moto": "9BWZZZ377VT004251",
"nr_motor_moto": "MT123456",
"modelo_moto": "Honda CG 160",
"codigo_rfid_tag": "RFID123",
"ssid_wifi_tag": "WIFI_TAG_001",
"x": 100.5,
"y": 200.3,
"latitude": -23.550520,
"longitude": -46.633308
}
]
}{
"antenas": [
{
"id_antena": 1,
"id_patio": 1,
"codigo_antena": "ANT001",
"latitude_antena": -23.550520,
"longitude_antena": -46.633308,
"x": 50.0,
"y": 100.0
}
]
}O sistema processa automaticamente os dados recebidos via MQTT:
- MqttListener escuta o tΓ³pico
fiap/iot/moto - Identifica o tipo de payload (motocicletas ou antenas)
- Valida e deserializa os dados JSON
- Atualiza/cria registros no banco de dados
- Registra logs de todas as operaΓ§Γ΅es
Para ativar a funcionalidade MQTT:
- Configure um broker MQTT (ex: Mosquitto, HiveMQ)
- No
application.properties, altere obrigatoriamente:mqtt.enabled=true mqtt.broker.url=tcp://SEU_BROKER_IP:1883
π΄ ATENΓΓO: A configuraΓ§Γ£o
mqtt.enabled=trueΓ© essencial! Por padrΓ£o, o valor Γ©falsee o sistema MQTT nΓ£o serΓ‘ iniciado. - Reinicie a aplicaΓ§Γ£o
VocΓͺ pode testar enviando mensagens usando um cliente MQTT:
# Exemplo com mosquitto_pub
mosquitto_pub -h localhost -t "fiap/iot/moto" -m '{"motos":[{"placa_moto":"ABC1234","modelo_moto":"Honda CG"}]}'- Java 17 - Linguagem de programaΓ§Γ£o
- Spring Boot 3.5.6 - Framework principal
- Spring Data JPA - PersistΓͺncia de dados
- Spring Security - SeguranΓ§a e autenticaΓ§Γ£o
- Spring OAuth2 Client - AutenticaΓ§Γ£o com GitHub e Google
- Spring Web - API REST
- Spring Cache - Cache de dados
- Thymeleaf - Template engine
- Thymeleaf Layout Dialect - Layout management
- HTML/CSS/JavaScript - Interface web
- Bootstrap (via CSS customizado) - EstilizaΓ§Γ£o
- PostgreSQL - Banco de dados relacional
- Flyway - Versionamento de banco de dados
- Eclipse Paho MQTT Client 1.2.5 - Cliente MQTT para comunicaΓ§Γ£o IoT
- Protocol MQTT - ComunicaΓ§Γ£o com dispositivos IoT
- SpringDoc OpenAPI 2.6.0 - DocumentaΓ§Γ£o automΓ‘tica da API (Swagger)
- Lombok - ReduΓ§Γ£o de cΓ³digo boilerplate
- Spring Boot DevTools - Hot reload durante desenvolvimento
- Docker Compose - ContainerizaΓ§Γ£o do PostgreSQL
- Gradle - Gerenciamento de dependΓͺncias e build
- Jakarta Validation - ValidaΓ§Γ£o de dados
FIAP--IoTTU--Java-ChallengeProject/
β
βββ src/
β βββ main/
β β βββ java/br/com/fiap/iottu/
β β β βββ antenna/ # Gerenciamento de antenas
β β β β βββ Antenna.java
β β β β βββ AntennaController.java
β β β β βββ AntennaRepository.java
β β β β βββ AntennaService.java
β β β β
β β β βββ api/ # Controllers REST para mobile
β β β β βββ AntennaRestController.java
β β β β βββ AuthRestController.java
β β β β βββ MotorcycleRestController.java
β β β β βββ TagRestController.java
β β β β βββ UserRestController.java
β β β β βββ YardRestController.java
β β β β
β β β βββ auth/ # AutenticaΓ§Γ£o web
β β β β βββ AuthController.java
β β β β
β β β βββ config/ # ConfiguraΓ§Γ΅es
β β β β βββ CorsConfig.java
β β β β βββ I18nConfiguration.java
β β β β βββ MqttConfig.java
β β β β βββ SecurityConfiguration.java
β β β β
β β β βββ dto/ # Data Transfer Objects
β β β β βββ AntenaDataDTO.java
β β β β βββ AntenasPayloadDTO.java
β β β β βββ AntennaRequestDTO.java
β β β β βββ MotorcycleDataDTO.java
β β β β βββ MotorcycleRequestDTO.java
β β β β βββ MotorcyclesPayloadDTO.java
β β β β βββ TagRequestDTO.java
β β β β βββ UserRequestDTO.java
β β β β βββ YardRequestDTO.java
β β β β
β β β βββ helper/ # Classes auxiliares
β β β β βββ MessageHelper.java
β β β β
β β β βββ home/ # Controller da home
β β β β βββ HomeController.java
β β β β
β β β βββ motorcycle/ # Gerenciamento de motocicletas
β β β β βββ Motorcycle.java
β β β β βββ MotorcycleController.java
β β β β βββ MotorcycleRepository.java
β β β β βββ MotorcycleService.java
β β β β
β β β βββ motorcyclestatus/ # Status das motocicletas
β β β β βββ MotorcycleStatus.java
β β β β βββ MotorcycleStatusRepository.java
β β β β βββ MotorcycleStatusService.java
β β β β
β β β βββ mqtt/ # ComunicaΓ§Γ£o MQTT/IoT
β β β β βββ MqttConfiguration.java
β β β β βββ MqttListener.java
β β β β
β β β βββ tag/ # Gerenciamento de tags
β β β β βββ Tag.java
β β β β βββ TagController.java
β β β β βββ TagRepository.java
β β β β βββ TagService.java
β β β β
β β β βββ user/ # Gerenciamento de usuΓ‘rios
β β β β βββ User.java
β β β β βββ UserController.java
β β β β βββ UserRepository.java
β β β β βββ UserService.java
β β β β
β β β βββ validation/ # ValidaΓ§Γ΅es customizadas
β β β β βββ OnCreate.java
β β β β βββ OnUpdate.java
β β β β
β β β βββ yard/ # Gerenciamento de pΓ‘tios
β β β β βββ Yard.java
β β β β βββ YardController.java
β β β β βββ YardMapDTO.java
β β β β βββ YardMapService.java
β β β β βββ YardRepository.java
β β β β βββ YardService.java
β β β β
β β β βββ IoTtuApplication.java # Classe principal
β β β
β β βββ resources/
β β βββ application.properties
β β βββ messages_en_US.properties
β β βββ messages_pt_BR.properties
β β β
β β βββ db/migration/ # Scripts Flyway
β β β βββ V1__create_initial_tables.sql
β β β βββ V2__Add_foreign_keys.sql
β β β βββ V3__Necessary_inserts.sql
β β β βββ V4__Insert_admin_user.sql
β β β
β β βββ static/
β β β βββ css/
β β β β βββ style.css
β β β βββ js/
β β β
β β βββ templates/ # Templates Thymeleaf
β β βββ home.html
β β βββ layout.html
β β βββ login.html
β β βββ antenna/
β β β βββ form.html
β β β βββ list.html
β β βββ auth/
β β β βββ register.html
β β βββ motorcycle/
β β β βββ form.html
β β β βββ list.html
β β βββ tag/
β β β βββ form.html
β β β βββ list.html
β β βββ user/
β β β βββ form.html
β β β βββ list.html
β β β βββ profile.html
β β βββ yard/
β β βββ form.html
β β βββ list.html
β β βββ map.html
β β
β βββ test/
β βββ java/br/com/fiap/iottu/
β βββ IoTtuApplicationTests.java
β
βββ build.gradle # ConfiguraΓ§Γ£o Gradle
βββ compose.yaml # Docker Compose (PostgreSQL)
βββ gradlew # Gradle Wrapper (Unix)
βββ gradlew.bat # Gradle Wrapper (Windows)
βββ settings.gradle # ConfiguraΓ§Γ΅es do Gradle
βββ README.md # Este arquivo
- Java 17 ou superior
- Docker e Docker Compose (para o PostgreSQL)
- Gradle (ou use o wrapper incluΓdo)
- (Opcional) Broker MQTT se quiser testar a funcionalidade IoT
git clone <url-do-repositorio>
cd FIAP--IoTTU--Java-ChallengeProjectdocker-compose up -dIsso iniciarΓ‘ um container PostgreSQL com as seguintes configuraΓ§Γ΅es:
- Host: localhost
- Porta: 5432
- Database: iottu
- UsuΓ‘rio: iottu
- Senha: iottu
Para OAuth2 (GitHub e Google), configure as variΓ‘veis:
Windows (CMD):
set GITHUB_CLIENT_ID=seu_client_id
set GITHUB_CLIENT_SECRET=seu_client_secret
set GOOGLE_CLIENT_ID=seu_client_id
set GOOGLE_CLIENT_SECRET=seu_client_secretWindows (PowerShell):
$env:GITHUB_CLIENT_ID="seu_client_id"
$env:GITHUB_CLIENT_SECRET="seu_client_secret"
$env:GOOGLE_CLIENT_ID="seu_client_id"
$env:GOOGLE_CLIENT_SECRET="seu_client_secret"Para MQTT (se desejar habilitar):
set SEU_IP=192.168.1.100# Windows
gradlew.bat build
# Linux/Mac
./gradlew build# Windows
gradlew.bat bootRun
# Linux/Mac
./gradlew bootRunOu execute diretamente o JAR gerado:
java -jar build/libs/IoTTU-0.0.1-SNAPSHOT.jar- Interface Web: http://localhost:8080
- API REST: http://localhost:8080/api/v1
- Swagger UI: http://localhost:8080/swagger-ui.html
ApΓ³s a primeira execuΓ§Γ£o, um usuΓ‘rio administrador Γ© criado automaticamente:
- Email: admin@iottu.com
- Senha: admin123
- Role: ADMIN