Aplicação C# ‐ Subscriber - tecnologiadB/MonitoramentoRuidoWiki GitHub Wiki
🚀 SoftwareEnvio (C#)
Sistema responsável por automatizar o envio das medições ao backend de forma confiável, rastreável e resiliente.
Atua como elo entre o LabVIEW (coleta) e a API REST/MQTT (backend).
🎯 Objetivo
Automatizar o envio das medições para o backend, garantindo confiabilidade, validação e registro de erros.
⚙️ Responsabilidades Principais
1️⃣ Monitoramento
- Observa arquivos de mensagens (
Mensagem.binou equivalentes) e diretórios configurados. - Executa em intervalo configurável (ex.: 20 segundos).
- Ignora arquivos vazios ou incompletos.
2️⃣ Mapeamento e Validação
- Lê o conteúdo dos arquivos binários.
- Converte em objetos de domínio (medição, estação, parâmetros).
- Aplica regras de negócio (faixas válidas, obrigatoriedade de campos).
- Registros inválidos são direcionados para log/erro.
3️⃣ Tratamento de Áudio
- Localiza arquivos
.wavassociados às medições. - Converte para
.mp3usando LAME/NAudio. - Gera Base64 para envio embutido quando necessário.
4️⃣ Envio REST
- Constrói JSON de medição conforme o contrato da API.
- Executa
POST /medicoes. - Implementa tratamento de resposta e retentativas automáticas.
5️⃣ Envio MQTT
- Publica eventos em tópicos para integração em tempo real:
- Facilita o monitoramento remoto das transmissões.
6️⃣ Limpeza e Logs
- Após sucesso, marca ou remove dados processados.
- Em falha, registra logs:
LogMQTTUpload.txtLogRestUpload.txt
🔄 Fluxo Detalhado — SoftwareEnvio
flowchart TD
A[Inicio do ciclo] --> B{Tamanho maior que 0 bytes?}
B -- Nao --> Z[Fim do ciclo / Aguardar proximo intervalo]
B -- Sim --> D[Ler registros do arquivo]
D --> E{Validacao OK?}
E -- Nao --> E1[Registrar erro de validacao em Log.txt] --> Z
E -- Sim --> F[Localizar arquivos WAV relacionados]
F --> G[Converter WAV para MP3]
G --> H[Gerar Base64 do audio se necessario]
H --> I[Montar JSON da medicao]
I --> J{Tipo de medicao}
J -- Minuto/Segundo --> JM[Publicar no MQTT]
J -- Periodo/Audios --> JP[Enviar POST /medicoes - API REST]
%% Fluxo do MQTT
JM --> JM2{Publicacao MQTT OK?}
JM2 -- Nao --> JM3[Registrar erro MQTT em Log.txt] --> Z
JM2 -- Sim --> L1[Registrar sucesso MQTT em Log.txt]
%% Fluxo do REST
JP --> K{HTTP 200?}
K -- Nao --> K1[Registrar erro REST em Log.txt] --> Z
K -- Sim --> L2[Registrar sucesso REST em Log.txt]
L1 --> M[Limpar ou marcar dados processados]
L2 --> M[Limpar ou marcar dados processados]
M --> Z[Fim do ciclo]