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.bin ou 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 .wav associados às medições.
  • Converte para .mp3 usando 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.txt
    • LogRestUpload.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]