Introdução
O seguinte projeto tem como objetivo criar um sistema de acompanhamento meteorológico com comunicação direta a satélites existentes com essa finalidade e APIs de fontes confiáveis. Seu objetivo principal é permitir a independência do Agrocity quanto ao monitoramento climático.
Confira abaixo nosso mapa interativo em tempo real com dados meteorológicos de todos os municípios do Rio Grande do Sul! 🌦️
🌦️ Monitoramento Meteorológico em Tempo Real
Dados meteorológicos atualizados de todos os municípios do Rio Grande do Sul
🎯 Visualização Inteligente: Este mapa apresenta dados meteorológicos em tempo real de todos os 497 municípios do Rio Grande do Sul, integrando informações de temperatura, precipitação e vento através da API Open-Meteo.
📊 Dados Exibidos: 🌡️ Temperatura (°C) | 🌧️ Precipitação (mm) | 💨 Velocidade do Vento (km/h) | 🧭 Direção do Vento (°)
🎨 Indicadores Visuais: As cores dos marcadores variam conforme a temperatura - do azul (frio) ao vermelho (quente).
💡 Como usar: Clique nos indicadores circulares para ver detalhes completos. Os dados são atualizados automaticamente e armazenados em cache por 30 minutos para otimizar a performance.
Objetivo
Criar plataforma centralizada de dados meteorológicos, sendo capaz de receber dados oriundos de APIs e satélites de monitoramento. Sendo a entrega proposta uma plataforma web com recepção de dados via satélite por meio de antena APT e comunicação com outras plataformas via internet. Espera-se que a plataforma permita visualização histórica dos dados por região e independência nas análises.
Colaboração no Projeto
Este projeto é colaborativo e aberto à contribuição de desenvolvedores e pesquisadores interessados. Todas as alterações podem ser feitas via push no repositório GitHub do projeto e serão revisadas antes de serem integradas à versão final.
Além disso, utilizamos o Trello para organização de tarefas, backlog e progresso do projeto.
- GitHub do Projeto: https://github.com/pedroanhaia/monimete
- Trello: https://trello.com/invite/b/670f5d357789eb16b37381d1/ATTI7dff1f21b9adc9c15bf1b4865dc87ab104F119AE/tarefas-sistema-metereologico
Sinta-se à vontade para contribuir com melhorias, correções de bugs e novas funcionalidades! 🚀
Esforços Necessários
- ✅ Levantamento de requisitos;
- ✅ Prototipação do sistema;
- ✅ Modelagem do banco de dados utilizando LucidChart;
- ✅ Criação de ambiente colaborativo de desenvolvimento no GitHub;
- ✅ Configuração de ambiente de desenvolvimento (XAMPP, VS Code);
- ✅ Criação de server-side e backoffice com o framework CakePHP;
- 🟡 Desenvolvimento de integração com API de dados meteorológicos (CPTEC) - 70% concluído;
- ❌ Desenvolvimento de integração do sistema com a Raspberry Pi;
- 🟡 Desenvolvimento de interfaces para visualização dos dados (recomenda-se o uso de JavaScript com comunicação via AJAX) - 30% concluído;
- ❌ Aquisição de materiais necessários;
- ❌ Desenvolvimento de antena de acordo com o manual (Tutorial);
- ❌ Configuração da Raspberry Pi de acordo com o manual;
- ❌ Posicionamento da antena;
- ❌ Testes de verificação de integridade.
✅ Concluído (58% dos esforços)
Base sólida do sistema estabelecida com back-office funcional, modelo de dados robusto e integração básica com APIs.
🟡 Em Progresso (14% dos esforços)
Integração com CPTEC e interfaces de visualização em desenvolvimento ativo.
❌ Pendente (28% dos esforços)
Sistema de hardware (antena e Raspberry Pi) e testes de integração aguardando implementação.
Materiais Necessários
- Trena;
- Paquímetro;
- Raspberry Pi 4 ou superior;
- Furadeira;
- Brocas de 8 mm e XX mm;
- Receptor USB SDR (Modelo);
- Gabinete Raspberry Pi;
- 5 metros de tubo de cobre 8mm (Modelo);
- Adaptador rabo de porco MCX para BNC (Modelo);
- Cabo coaxial BNC macho para BNC fêmea (Modelo);
- Tubo de resíduo de plástico branco 40mm, 1,5 metros de comprimento (Modelo);
- Lixa;
- Estanho;
- Parafusos auto-roscantes de 4 x 2 mm por 8 mm;
- Computador para uso;
- Impressora 3D para criação de peças componentes da antena;
- Rede de internet;
- Serra de cortar cano;
- Cola para plástico e madeira;
- Chave Phillips de tamanho médio;
- Lápis.
Ferramentas de Software Utilizadas
- XAMPP V5.2 (PHP VXX, MySQL VXX);
- Composer VXX;
- LucidChart;
- GitHub;
- Visual Studio Code;
- CakePHP Framework.
Cronograma Previsto
| Data | Tarefa | Status |
|---|---|---|
| 24/10/2024 | Levantamento de requisitos, arquitetar infraestrutura. | ✅ Concluído |
| 31/10/2024 | Modelar banco de dados. | ✅ Concluído |
| 07/11/2024 | Criação de ambiente de desenvolvimento. | ✅ Concluído |
| 14/11/2024 | Geração de banco de dados e esqueleto do backoffice. | ✅ Concluído |
| 21/11/2024 | Ajustes server-side e desenvolvimento de API. | ✅ Concluído |
| 25/11/2024 | Implementação de mapa interativo com dados meteorológicos em tempo real (Open-Meteo API) | ✅ Concluído |
| 28/11/2024 | Desenvolvimento de antena. | 🟡 Em andamento |
| 05/12/2024 | Continuação do desenvolvimento de antena. | ❌ Pendente |
| 12/12/2024 | Posicionamento de antena. | ❌ Pendente |
| 19/12/2024 | Teste do sistema e ajustes. | ❌ Pendente |
| 26/12/2024 | Teste do sistema e ajustes finais. | ❌ Pendente |
🎉 Última Implementação Concluída (25/11/2024)
Mapa Meteorológico Interativo: Sistema completo implementado com:
- ✅ Integração em tempo real com API Open-Meteo
- ✅ Visualização de 497 municípios do Rio Grande do Sul
- ✅ Dados de temperatura, precipitação, vento e direção
- ✅ Sistema inteligente de cache (30 minutos)
- ✅ Gerenciamento de limites de API (10.000 calls/dia)
- ✅ Interface responsiva com indicadores visuais por temperatura
- ✅ Popups informativos com dados detalhados
Stakeholders
Produtores Rurais
Objetivo: Garantir que os produtores rurais tenham acesso a dados meteorológicos precisos e históricos para facilitar a tomada de decisões sobre plantio e colheita.
Métrica: Aumento na produtividade agrícola devido à previsibilidade climática mais acurada.
Equipe de Pesquisa Agrocity
Objetivo: Independência do Agrocity em relação a fontes externas de dados climáticos, utilizando dados próprios e APIs integradas.
Métrica: Redução de dependência de serviços externos de monitoramento meteorológico.
Requisitos do Sistema
- Receber dados via satélite;
- Integrar com API de dados meteorológicos;
- Integrar com sistema de mapas;
- Permitir acesso não autenticado aos dashboards;
- Armazenar dados históricos;
- Saídas dos dados com dashboards e mapas de calor.
Coleta Visual de Requisitos
| Floresta | Árvore | Galhos | Folhas |
|---|---|---|---|
| MoniMete | Receber dados via satélite | Criação de sistema de recepção via satélite | Montar antena |
| Configurar Raspberry Pi | |||
| Armazenar dados históricos | Criação de CRUD | Modelagem do banco de dados | |
| Desenvolvimento backoffice | |||
| Ajustes de navegação | |||
| Integrar com sistema de mapas | Desenvolver chamadas do serviço | Desenvolver chamadas do serviço | |
| Permitir acesso não autenticado aos dashboards | Realizar liberações | Mapear riscos | |
| Executar ajustes de sistema | |||
| Integrar com API de dados meteorológicos | Desenvolver chamadas do serviço | Desenvolver chamadas do serviço | |
| Saídas dos dados com dashboards e mapas de calor | Saídas dos dados com dashboards e mapas de calor | Definição de gráficos a serem utilizados | |
| Desenvolvimento de templates das views | |||
| Desenvolvimento de código para alimentação dos gráficos |
Status Atual do Projeto 📊
Progresso Geral
| Componente | Status | % Completo | Observações |
|---|---|---|---|
| Back-office CRUD | ✅ Concluído | 100% | Sistema completo de gerenciamento |
| Modelo de Dados | ✅ Concluído | 100% | Entidades e relacionamentos definidos |
| API Endpoints | 🟡 Parcial | 60% | Funcionalidades básicas, lógica real pendente |
| Integração CPTEC/INPE | 🟡 Parcial | 70% | Importação funcional, relacionamentos pendentes |
| Dashboard/Visualização | 🟡 Básico | 30% | Interface criada com dados simulados |
| Sistema Satélite/Antena | ❌ Pendente | 0% | Não iniciado |
| Testes Unitários | ❌ Pendente | 0% | Marcados como incompletos |
| Mapas Interativos | ✅ Concluído | 95% | Sistema completo com dados em tempo real da API Open-Meteo |
🎯 Próximos Passos Prioritários:
- Implementar lógica real na API de devices - Substituir dados simulados
- Conectar dados reais aos dashboards - Integrar com banco de dados
- Finalizar relacionamentos CPTEC - Conectar services, devices e locations
- Desenvolver testes unitários - Garantir qualidade do código
- Implementar sistema de antena - Hardware e integração Raspberry Pi
🎉 Últimas Conquistas:
- ✅ Sistema de Mapas Meteorológicos Completo - Implementado com sucesso
- ✅ Integração Open-Meteo API - Dados em tempo real de 497 municípios
- ✅ Interface Responsiva - Design otimizado e user-friendly
- ✅ Sistema de Cache Inteligente - Performance otimizada
- ✅ Gerenciamento de Limites de API - Controle automático de uso
⚠️ Questões Identificadas:
- Dados simulados em dashboards precisam ser substituídos por dados reais
- Relacionamentos de entidades não estão completamente conectados
- API endpoints retornam placeholders em vez de dados reais
- Sistema de recepção via satélite ainda não implementado
Histórias de Usuário
Cadastro e Integração de APIs
Título: Integração de APIs Meteorológicas
Descrição: O sistema deve ser capaz de integrar e realizar requisições a APIs confiáveis de dados meteorológicos, como o CPTEC.
Critérios de Aceitação: As requisições são realizadas com sucesso, e os dados meteorológicos são armazenados na plataforma.
Desenvolvimento de Antena
Título: Montagem e Configuração de Antena
Descrição: O sistema deve permitir a configuração de uma antena meteorológica baseada em Raspberry Pi, que se comunica com satélites para receber dados meteorológicos.
Critérios de Aceitação: A antena deve estar corretamente posicionada, capturando dados e enviando-os para o sistema.
Visualização de Dados Meteorológicos
Título: Exibição de Dados Meteorológicos
Descrição: O usuário pode visualizar dados climáticos em tempo real e históricos por região, exibidos através de gráficos e mapas interativos.
Critérios de Aceitação: Os dados são exibidos de forma clara e filtrável, permitindo análises por data e região.
Criação de Ambiente Colaborativo
Título: Criação de Ambiente Colaborativo de Desenvolvimento
Descrição: Criação e configuração de um ambiente colaborativo utilizando GitHub para gerenciar o código e progresso do projeto.
Critérios de Aceitação: O ambiente está funcionando corretamente se todos os desenvolvedores têm acesso ao repositório.
Esquema de Infraestrutura feito por gabriela
Modelo ER do Sistema MoniMete
Comandos MySQL
CREATE TABLE `platforms` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`type` int(2),
`url` varchar(255),
`last_update` datetime,
`created` datetime,
`modified` datetime,
`role` int(2),
`powered` varchar(255),
PRIMARY KEY (`id`)
);
CREATE TABLE `cities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`obs` text,
`cod_ibge` varchar(255),
`description` text,
`created` datetime,
`modified` datetime,
`role` int(2),
PRIMARY KEY (`id`)
);
CREATE TABLE `locations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`latitude` float,
`longitude` float,
`description` text,
`created` datetime,
`modified` datetime,
`role` int(2),
`city_id` int(11),
PRIMARY KEY (`id`),
FOREIGN KEY (`city_id`) REFERENCES `cities`(`id`)
);
CREATE TABLE `devices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`type` int(2),
`model` varchar(100),
`producer` varchar(100),
`description` text,
`created` datetime,
`modified` datetime,
`role` int(2),
`location_id` int(11),
`img` varchar(255),
PRIMARY KEY (`id`),
FOREIGN KEY (`location_id`) REFERENCES `locations`(`id`)
);
CREATE TABLE `settings` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`device_id` int(11),
`name` varchar(100),
`value` varchar(200),
`description` text,
`created` datetime,
`modified` datetime,
`type` int(2),
`role` int(2),
PRIMARY KEY (`id`),
FOREIGN KEY (`device_id`) REFERENCES `devices`(`id`)
);
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`email` varchar(200),
`password` varchar(255),
`type` int(2),
`created` datetime,
`modified` datetime,
`role` int(2),
`city_id` int(11),
PRIMARY KEY (`id`),
FOREIGN KEY (`city_id`) REFERENCES `cities`(`id`)
);
CREATE TABLE `logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_time` datetime,
`message` text,
`status` varchar(50),
`type` int(2),
`device_id` int(11),
`created` datetime,
`modified` datetime,
`role` int(2),
`platform_id` int(11),
PRIMARY KEY (`id`),
FOREIGN KEY (`device_id`) REFERENCES `devices`(`id`),
FOREIGN KEY (`platform_id`) REFERENCES `platforms`(`id`)
);
CREATE TABLE `services` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`type` int(2),
`endpoint` varchar(255),
`platform_id` int(11),
`created` datetime,
`modified` datetime,
`role` int(2),
PRIMARY KEY (`id`),
FOREIGN KEY (`platform_id`) REFERENCES `platforms`(`id`)
);
CREATE TABLE `data_metereological` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_time` datetime,
`temperature` float,
`humidity` float,
`precipitation` float,
`wind_direction` varchar(50),
`wind_speed` float,
`latitude` float,
`longitude` float,
`location_id` int(11),
`service_id` int(11),
`device_id` int(11),
`created` datetime,
`modified` datetime,
`role` int(2),
`type` int(2),
PRIMARY KEY (`id`),
FOREIGN KEY (`service_id`) REFERENCES `services`(`id`),
FOREIGN KEY (`device_id`) REFERENCES `devices`(`id`),
FOREIGN KEY (`location_id`) REFERENCES `locations`(`id`)
);
CREATE TABLE `data_satellite` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date_time` datetime,
`quality_signal` float,
`latitude` float,
`longitude` float,
`type` int(2),
`device_id` int(11),
`created` datetime,
`modified` datetime,
`role` int(2),
PRIMARY KEY (`id`),
FOREIGN KEY (`device_id`) REFERENCES `devices`(`id`)
);