Projeto de Monitoramento Meteorológico
Agrocity Logo MoniMete - Agrocity

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.

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

75% Concluído
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

Esquema de Infraestrutura do Sistema MoniMete

Modelo ER do Sistema MoniMete

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`)
);
                
© 2024 Projeto MoniMete - Todos os direitos reservados.