{"id":48542055,"url":"https://github.com/andersonsrocha/hackathon-sensors","last_synced_at":"2026-04-08T05:02:05.380Z","repository":{"id":341086372,"uuid":"1164078345","full_name":"andersonsrocha/hackathon-sensors","owner":"andersonsrocha","description":null,"archived":false,"fork":false,"pushed_at":"2026-02-27T22:07:40.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-28T02:22:45.643Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andersonsrocha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-22T15:57:25.000Z","updated_at":"2026-02-27T22:07:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/andersonsrocha/hackathon-sensors","commit_stats":null,"previous_names":["andersonsrocha/hackathon-sensors"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/andersonsrocha/hackathon-sensors","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersonsrocha%2Fhackathon-sensors","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersonsrocha%2Fhackathon-sensors/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersonsrocha%2Fhackathon-sensors/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersonsrocha%2Fhackathon-sensors/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andersonsrocha","download_url":"https://codeload.github.com/andersonsrocha/hackathon-sensors/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andersonsrocha%2Fhackathon-sensors/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31540826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"online","status_checked_at":"2026-04-08T02:00:06.127Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-08T05:02:04.773Z","updated_at":"2026-04-08T05:02:05.375Z","avatar_url":"https://github.com/andersonsrocha.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003ch1\u003e\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n  \u003cdiv\u003e�\u003c/div\u003e\n  \u003cb\u003eHackathon Sensors\u003c/b\u003e\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n\u003c/h1\u003e\n\nSistema de coleta de dados de sensores IoT para monitoramento agrícola da **AgroSolutions**,\numa cooperativa que busca se modernizar através da Internet das Coisas (IoT). O sistema\ncoleta automaticamente dados de sensores como umidade do solo, temperatura ambiente\ne precipitação, enviando essas informações via mensageria RabbitMQ para análise\nem tempo real. A aplicação é um Worker Service desenvolvido em .NET 8 com\ncontainerização Docker e orquestração Kubernetes para escalabilidade.\n\n\u003c/div\u003e\n\n\u003e \\[!NOTE]\n\u003e\n\u003e Este projeto visa oferecer uma aplicação robusta, escalável e segura. O desenvolvimento deste projeto é baseado exclusivamente nas suas necessidades guiadas pelo curso de pós graduação Fiap.\n\n\u003cdiv align=\"center\"\u003e\n\n![.NET Core](https://img.shields.io/badge/.NET%20Core-8.0-512BD4?style=flat\u0026logo=dotnet\u0026logoColor=white)\n![RabbitMQ](https://img.shields.io/badge/RabbitMQ-FF6600?style=flat\u0026logo=rabbitmq\u0026logoColor=white)\n![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat\u0026logo=docker\u0026logoColor=white)\n![Kubernetes](https://img.shields.io/badge/Kubernetes-326ce5?style=flat\u0026logo=kubernetes\u0026logoColor=white)\n![IoT](https://img.shields.io/badge/IoT-Sensors-00D4AA?style=flat\u0026logo=internetofthings\u0026logoColor=white)\n![Worker Service](https://img.shields.io/badge/Worker%20Service-Background-512BD4?style=flat\u0026logo=.net\u0026logoColor=white)\n\n\u003c/div\u003e\n\n\u003cdetails\u003e\n\n\u003csummary\u003e\n  \u003cb\u003eTable of contents\u003c/b\u003e\n\u003c/summary\u003e\n\n#### TOC\n\n- [📦 Começando](#-começando)\n- [� Monitoramento](#-monitoramento)\n- [🚧 Construindo e publicando a aplicação](#-construindo-e-publicando-a-aplicação)\n- [✨ Características](#-características)\n- [🚀 Recursos](#-recursos)\n\n####\n\n\u003c/details\u003e\n\n## 📦 Começando\n\n### Pré-requisitos\n\n- [**.NET 8 SDK**](https://dotnet.microsoft.com/download/dotnet/8.0) - Framework de desenvolvimento\n- **RabbitMQ** - Sistema de mensageria (pode ser Docker ou instalação local)\n- **Docker** (opcional) - Para containerização e RabbitMQ\n\n### Instalação\n\nComece clonando o repositório `hackathon-sensors`, executando o comando:\n\n```bash\ngit clone https://github.com/andersonsrocha/hackathon-sensors.git\n```\n\nAgora acesse o projeto usando:\n\n```bash\ncd hackathon-sensors\n```\n\nRealize a restauração dos pacotes:\n\n```bash\ndotnet restore\n```\n\nConfigure o RabbitMQ localmente (necessário para o funcionamento):\n\n```bash\ndocker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 \\\n  -e RABBITMQ_DEFAULT_USER=admin \\\n  -e RABBITMQ_DEFAULT_PASS=admin123 \\\n  rabbitmq:3-management\n```\n\nAgora execute o comando abaixo para iniciar o Worker Service:\n\n```bash\ndotnet run --project src/HackathonSensors.WorkerService\n```\n\nO serviço começará a coletar dados de sensores simulados e enviá-los para a fila RabbitMQ a cada 60 segundos.\n\n\u003cbr/\u003e\n\n## 📊 Monitoramento\n\n### Interface Web RabbitMQ\n\nPara monitorar a fila RabbitMQ e os dados sendo coletados:\n\n**URL:** http://localhost:15672\n\n**Credenciais:**\n\n```bash\nUsuário: admin\nSenha: admin123\n```\n\n### Configuração do Sensor\n\nOs sensores podem ser configurados no `appsettings.json`:\n\n```json\n{\n  \"PlotId\": \"73df2149-4b7a-482f-aede-b928aac66842\",\n  \"DelayInSeconds\": 60,\n  \"RabbitMQ\": {\n    \"HostName\": \"localhost\",\n    \"UserName\": \"admin\",\n    \"Password\": \"admin123\",\n    \"QueueName\": \"sensor.readings\"\n  }\n}\n```\n\n### Dados Coletados\n\n**Parâmetros monitorados:**\n\n- 🌡️ **Temperatura**: 15-35°C (simulado)\n- 💧 **Umidade do Solo**: 0-100% (simulado)\n- ☔ **Precipitação**: 0-10mm (simulado)\n- 📅 **Data/Hora**: Timestamp de cada leitura\n- 🗺️ **Plot ID**: Identificador do talhão monitorado\n\n**Intervalo de coleta:** Configurável (padrão: 60 segundos)\n**Fila RabbitMQ:** `sensor.readings`\n\n## 🚧 Construindo e publicando a aplicação\n\nPara construir a aplicação, execute o comando abaixo no diretório raiz do projeto:\n\n```bash\ndotnet build\n```\n\nPara publicar o Worker Service:\n\n\u003e \\[!TIP]\n\u003e\n\u003e É possível trocar a pasta de destino substituindo `./publish` pelo diretório desejado.\n\n```bash\ndotnet publish -c Release -o ./publish --project src/HackathonSensors.WorkerService\n```\n\n### 🐳 Docker\n\nPara criar a imagem Docker:\n\n```bash\ndocker build -t hackathon-sensors .\n```\n\nPara executar via Docker:\n\n```bash\ndocker run -d --name sensor-worker \\\n  -e PlotId=\"73df2149-4b7a-482f-aede-b928aac66842\" \\\n  -e DelayInSeconds=\"60\" \\\n  -e RabbitMQ__HostName=\"host.docker.internal\" \\\n  hackathon-sensors\n```\n\n### ☸️ Kubernetes\n\nPara fazer deploy no Kubernetes:\n\n```bash\nkubectl apply -f manifests/\n```\n\n## ✨ Características\n\n- [x] ~~Coleta automatizada de dados de sensores IoT~~\n- [x] ~~Worker Service para processamento em background~~\n- [x] ~~Integração com RabbitMQ para mensageria~~\n- [x] ~~Simulação de sensores agrícolas realista~~\n- [x] ~~Monitoramento de umidade do solo~~\n- [x] ~~Monitoramento de temperatura ambiente~~\n- [x] ~~Monitoramento de precipitação~~\n- [x] ~~Configuração flexível por talhão (PlotId)~~\n- [x] ~~Intervalos de coleta configuráveis~~\n- [x] ~~Containerização com Docker~~\n- [x] ~~Deploy em Kubernetes com manifests~~\n- [x] ~~Auto-scaling via HPA (Horizontal Pod Autoscaler)~~\n- [x] ~~Logs estruturados para monitoramento~~\n- [x] ~~Arquitetura de microserviços preparada~~\n\n\u003cbr/\u003e\n\n## 🚀 Recursos\n\n- 🎨 **.NET 8 SDK**: Framework moderno e multiplataforma otimizado para Worker Services e processamento em background. Oferece alta performance para coleta contínua de dados IoT com garbage collection otimizado.\n- 🐰 **RabbitMQ**: Sistema de mensageria robusto e confiável para comunicação assíncrona entre microserviços. Garante entrega confiável dos dados coletados pelos sensores mesmo em cenários de alta disponibilidade.\n- ⚙️ **Worker Service**: Serviço de background .NET especializado para coleta contínua de dados de sensores, executando de forma independente e resiliente com logging estruturado.\n- 🌾 **IoT Sensor Simulation**: Simulador avançado de sensores agrícolas que gera dados realistas de umidade do solo, temperatura e precipitação, permitindo testes sem hardware físico.\n- 🐳 **Docker**: Containerização completa da aplicação para garantir consistência entre ambientes e facilitar deploy de sensores distribuídos em diferentes localidades.\n- ☸️ **Kubernetes**: Orquestração de contêineres com manifests completos incluindo Deployment, Service, ConfigMap e HPA para auto-scaling baseado na carga de trabalho dos sensores.\n- 📊 **Structured Logging**: Sistema de logs estruturados com diferentes níveis para monitoramento eficaz da coleta de dados e troubleshooting de sensores em campo.\n- 🔧 **Configuration Management**: Sistema flexível de configuração permitindo ajustes de PlotId, intervalos de coleta e conexões RabbitMQ sem necessidade de redeployment.\n\n## 🌱 Como Funciona o Sistema\n\n### Arquitetura IoT\n\nO sistema é composto por um **Worker Service** que simula sensores IoT distribuídos em talhões agrícolas. Cada sensor coleta dados ambientais críticos e os transmite via mensageria para processamento.\n\n```mermaid\ngraph LR\n    A[Sensores IoT] --\u003e B[Worker Service]\n    B --\u003e C[RabbitMQ Queue]\n    C --\u003e D[Processamento]\n    D --\u003e E[Análise de Dados]\n```\n\n### Fluxo de Dados\n\n1. **Coleta Automática**: Worker Service executa em loop contínuo\n2. **Simulação Realista**: Gera dados baseados em padrões agrícolas reais\n3. **Transmissão Segura**: Envia dados via RabbitMQ com garantia de entrega\n4. **Identificação**: Cada leitura vinculada a um PlotId específico\n5. **Timestamping**: Registro preciso de data/hora para análise temporal\n\n### Dados de Sensor (JSON)\n\n```json\n{\n  \"plotId\": \"73df2149-4b7a-482f-aede-b928aac66842\",\n  \"date\": \"2026-02-27T10:30:00Z\",\n  \"soilMoisture\": 65.4,\n  \"temperature\": 24.8,\n  \"precipitation\": 2.1\n}\n```\n\n### Escalabilidade\n\n- **Múltiplos Sensores**: Deploy independente por talhão\n- **Kubernetes HPA**: Auto-scaling baseado em carga\n- **Configuração Flexível**: Ajuste de intervalos por ambiente\n- **Tolerância a Falhas**: Recuperação automática de conexão\n\n\u003cbr/\u003e\n\nCopyright © 2026.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandersonsrocha%2Fhackathon-sensors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandersonsrocha%2Fhackathon-sensors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandersonsrocha%2Fhackathon-sensors/lists"}