/// Esse método é chamado sempre que o módulo recebe uma mensagem do hub IoT Edge. /// Ele filtra as mensagens que relatam temperaturas abaixo do limite de temperatura /// definido pelo módulo duplo.Ele também adiciona a propriedade MessageType à mensagem /// com o valor definido como Alerta. static async Task <MessageResponse> FilterMessages(Message message, object userContext) { Util.Log.Info($"[FilterMessages] Inicio - {DateTime.Now}"); Util.Log.Info($"[FilterMessages] 1 - Esse metodo eh chamado sempre que o modulo recebe uma mensagem do hub IoT Edge"); try { Util.Log.Info($"[FilterMessages] 2 - Inicializa instancia do ModuleClient"); if (userContext != null) { ModuleClient moduleClient = (ModuleClient)userContext; if (moduleClient == null) { throw new InvalidOperationException("[FilterMessages] - Erro: 2.1 - Modulo cliente não instanciado"); } Util.Log.Info($"[FilterMessages] 2.1 - Modulo cliente instanciado"); Util.Log.Info($"[FilterMessages] 3 - Captura corpo da mensagem [original] em formato de bytes array"); if (message != null) { Util.Log.Info($"[FilterMessages] 4 - Converte corpo da mensagem em string"); MessageBodyModbusOutput messageBodyModbus = Util.Message.ObterMessageBodyModbusOutput(message); Util.Log.Info($"[FilterMessages] 5 - Transforma objeto de msg do Modbus em objeto de msg para o IoT Central"); MessageBodyIoTCentral messageBodyIoTCentral = Util.Message.ObterMessageBodyIoTCentral(messageBodyModbus); //adiciona evento Util.Log.Info($"[FilterMessages] 6 - Cria Evento de Alerta para o hub IoT"); await Util.Message.EnviarMensagemIoTCentral(messageBodyIoTCentral, message, moduleClient); // Indica que o tratamento da mensagem FOI concluído. Util.Log.Info($"[FilterMessages] Fim - {DateTime.Now} OK"); return(MessageResponse.Completed); } } return(MessageResponse.Abandoned); } catch (AggregateException ex) { int cont = 0; foreach (Exception exception in ex.InnerExceptions) { Util.Log.Error($"[FilterMessages] - Erro{cont++}: {exception}"); } // Indica que o tratamento da mensagem NÃO foi concluído. var moduleClient = (ModuleClient)userContext; return(MessageResponse.Abandoned); } catch (Exception ex) { Util.Log.Error($"[FilterMessages] - Erro: {ex}"); // Indica que o tratamento da mensagem NÃO foi concluído. ModuleClient moduleClient = (ModuleClient)userContext; return(MessageResponse.Abandoned); } }
//v2.0 (MVP) // { // "HwId": "1", // "PublicacaoCLP": "2020-04-06 00:52:03", // "PublicacaoModBus": "2020-04-06 00:52:03", // "PublicacaoCentral": "2020-04-06 00:52:03", // "VolumeReservatorioSuperior": 100, //valor inteiro em m³ // "VolumeReservatorioInferior": 100, //valor inteiro em m³ // "VolumeTotalReservatorios": 100, //valor inteiro em m³ // "LeituraMedidorSuperior": 500.100, // três casas decimais após vírgula e variação de pulso 10 em 10. // "LeituraMedidorInferior": 500.100, // três casas decimais após vírgula e variação de pulso 10 em 10. // "NivelReservatorioSuperior": 100%, // Valor percentual sem casas decimais // "NivelReservatorioInferior": 100%, // Valor percentual sem casas decimais // "Autonomia24h": 10, //valor inteiro em hora // "AutonomiaInstantanea": 10, //valor inteiro em hora // "StatusBomba1": false, // booleano // "StatusBomba2”: false, // booleano // "QtAcionamentBomba1": 20, //valor inteiro, quantidade // "QtAcionamentBomba2": 15, //valor inteiro, quantidade // "PercentualAcionamentoBomba1": 100%, // Valor percentual sem casas decimais // "PercentualAcionamentoBomba2": 100%, // Valor percentual sem casas decimais // "TempoAcionamentoBomba1": 20, //valor inteiro em hora ou minuto // "TempoAcionamentoBomba2": 40, //valor inteiro em hora ou minuto // "PercentualTempoAcionamentoBomba1": 10, //valor inteiro em hora ou minuto // "PercentualTempoAcionamentoBomba2":10, //valor inteiro em hora ou minuto // "VazaoHoraReservatorioSuperior": 2, //valor inteiro sem casas decimais m³/h // "VazaoHoraReservatorioInferior": 2, //valor inteiro sem casas decimais m³/h // "ConsumoDiaReservatorioSuperior": 50, //valor inteiro sem casas // “ConsumoDiaReservatorioInferior”: 150, //valor inteiro sem casas // "ConsumoMesReservatorioSuperior": 500, //valor inteiro sem casas // "ConsumoMesReservatorioInferior": 1500, //valor inteiro sem casas // “MetaConsumo”: 1500, //valor inteiro sem casas // “PercentualMetaConsumo”: 100%, // Valor percentual sem casas // “TipoConsumidor”: “A”, // } #endregion public MessageBodyIoTCentral GetMessage(MessageBodyIoTCentral msg) { try { this.message = msg; message.VolumeReservatorioSuperior = ReservatorioSuperiorVolumeTotalAtual(); message.VolumeReservatorioInferior = ReservatorioInferiorVolumeTotalAtual(); message.VolumeTotalReservatorios = ReservatoriosVolumeTotalAtual(); message.Autonomia24h = AutonomiaBaseadaEm24horasDeConsumo(); message.AutonomiaInstantanea = AutonomiaBaseadaEm1HoraDeConsumo(); message.QtAcionamentBomba1 = Bomba1QuantidadeAcionamentoEm24Horas(); message.QtAcionamentBomba2 = Bomba2QuantidadeAcionamentoEm24Horas(); int totalAcionamentosBombas = (message.QtAcionamentBomba1 + message.QtAcionamentBomba2); message.PercentualAcionamentBomba1 = (message.QtAcionamentBomba1 / totalAcionamentosBombas) * 100; message.PercentualAcionamentBomba2 = (message.QtAcionamentBomba2 / totalAcionamentosBombas) * 100; message.TempoAcionamentoBomba1 = Bomba1TempoAcionamentoEm30Dias(); message.TempoAcionamentoBomba2 = Bomba2TempoAcionamentoEm30Dias(); int tempoTotalAcionamentosBombas = (message.TempoAcionamentoBomba1 + message.TempoAcionamentoBomba2); message.PercentualTempoAcionamentoBomba1 = (message.TempoAcionamentoBomba1 / tempoTotalAcionamentosBombas) * 100; message.PercentualTempoAcionamentoBomba2 = (message.TempoAcionamentoBomba2 / tempoTotalAcionamentosBombas) * 100; message.NivelReservatorioSuperior = NivelReservatorioSuperior(); // Valor percentual sem casas decimais message.NivelReservatorioInferior = NivelReservatorioInferior(); // Valor percentual sem casas decimais message.VazaoHoraReservatorioSuperior =; //valor inteiro sem casas decimais m³/h message.VazaoHoraReservatorioInferior =; //valor inteiro sem casas decimais m³/h message.ConsumoDiaReservatorioSuperior =; //valor inteiro sem casas message.ConsumoDiaReservatorioInferior =; //valor inteiro sem casas message.ConsumoMesReservatorioSuperior =; //valor inteiro sem casas message.ConsumoMesReservatorioInferior =; //valor inteiro sem casas message.ConsumoHora = MedidorVazaoConsumo1Hora(); message.ConsumoDia = MedidorVazaoConsumo1Dia(); message.ConsumoMes = MedidorVazaoConsumo30Dias(); //result.MetaConsumo = ; //result.PercentualMetaConsumo = ; //result.TipoConsumidor = ; } catch (Exception ex) { Util.Log.Log($"[Indicator.GetMessage] - Erro: {ex}"); } return(message); }
public void AddMessage(MessageBodyIoTCentral message) { Util.Log.Log("[AddMessage] - Mock - Criando registro"); Util.Log.Log("[AddMessage] - Mock - Criando registro"); }
public void Update(int id, MessageBodyIoTCentral message) { Util.Log.Log("[Update] - Mock - Criando registro"); Util.Log.Log("[Update] - Mock - Criando registro"); }
public void AddMessage(MessageBodyIoTCentral msg) { try { OpenOrCreateDatabase(); //calculando Indicadores secundarios var message = new Indicators().GetMessage(msg); using (var cmd = new SQLiteCommand()) { cmd.CommandText = "INSERT INTO Central" + "(HwId, " + "PublicacaoCLP, " + "PublicacaoModBus, " + "PublicacaoCentral, " + "AcionamentoBomba1, " + "AcionamentoBomba2, " + "LeituraMedidorInferior, " + "LeituraMedidorSuperior, " + "StatusBomba1, " + "StatusBomba2, " + "StatusFalhaBomba1, " + "StatusFalhaBomba2, " + "SondaDeNivelInferior, " + "SondaDeNivelSuperior, " + "VolumeReservatorioSuperior, " + "VolumeReservatorioInferior, " + "VolumeTotalReservatorios, " + "Autonomia24h, " + "AutonomiaInstantanea, " + "QtAcionamentBomba1, " + "QtAcionamentBomba2, " + "PercentualAcionamentBomba1, " + "PercentualAcionamentBomba2, " + "TempoAcionamentoBomba1, " + "TempoAcionamentoBomba2, " + "PercentualTempoAcionamentoBomba1, " + "PercentualTempoAcionamentoBomba2, " + "ConsumoHora, " + "ConsumoDia, " + "ConsumoMes) " + "VALUES (" + "@HwId, " + "@PublicacaoCLP, " + "@PublicacaoModBus, " + "@PublicacaoCentral, " + "@AcionamentoBomba1, " + "@AcionamentoBomba2, " + "@LeituraMedidorInferior, " + "@LeituraMedidorSuperior, " + "@StatusBomba1, " + "@StatusBomba2, " + "@StatusFalhaBomba1, " + "@StatusFalhaBomba2, " + "@SondaDeNivelInferior, " + "@SondaDeNivelSuperior, " + "@VolumeReservatorioSuperior, " + "@VolumeReservatorioInferior, " + "@VolumeTotalReservatorios, " + "@Autonomia24h, " + "@AutonomiaInstantanea, " + "@QtAcionamentBomba1, " + "@QtAcionamentBomba2, " + "@PercentualAcionamentBomba1, " + "@PercentualAcionamentBomba2, " + "@TempoAcionamentoBomba1, " + "@TempoAcionamentoBomba2, " + "@PercentualTempoAcionamentoBomba1, " + "@PercentualTempoAcionamentoBomba2, " + "@ConsumoHora, " + "@ConsumoDia, " + "@ConsumoMes)"; cmd.Parameters.AddWithValue("@HwId", msg.HwId); cmd.Parameters.AddWithValue("@PublicacaoCLP", msg.PublicacaoCLP); cmd.Parameters.AddWithValue("@PublicacaoModBus", msg.PublicacaoModBus); cmd.Parameters.AddWithValue("@PublicacaoCentral", msg.PublicacaoCentral); cmd.Parameters.AddWithValue("@AcionamentoBomba1", msg.AcionamentoBomba1); cmd.Parameters.AddWithValue("@AcionamentoBomba2", msg.AcionamentoBomba2); cmd.Parameters.AddWithValue("@LeituraMedidorInferior", msg.LeituraMedidorInferior); cmd.Parameters.AddWithValue("@LeituraMedidorSuperior", msg.LeituraMedidorSuperior); cmd.Parameters.AddWithValue("@StatusBomba1", msg.StatusBomba1); cmd.Parameters.AddWithValue("@StatusBomba2", msg.StatusBomba2); cmd.Parameters.AddWithValue("@StatusFalhaBomba1", msg.StatusFalhaBomba1); cmd.Parameters.AddWithValue("@StatusFalhaBomba2", msg.StatusFalhaBomba2); cmd.Parameters.AddWithValue("@SondaDeNivelInferior", msg.SondaDeNivelInferior); cmd.Parameters.AddWithValue("@SondaDeNivelSuperior", msg.SondaDeNivelSuperior); cmd.Parameters.AddWithValue("@VolumeReservatorioSuperior", message.VolumeReservatorioSuperior); cmd.Parameters.AddWithValue("@VolumeReservatorioInferior", message.VolumeReservatorioInferior); cmd.Parameters.AddWithValue("@VolumeTotalReservatorios", message.VolumeTotalReservatorios); cmd.Parameters.AddWithValue("@Autonomia24h", message.Autonomia24h); cmd.Parameters.AddWithValue("@AutonomiaInstantanea", message.AutonomiaInstantanea); cmd.Parameters.AddWithValue("@QtAcionamentBomba1", message.QtAcionamentBomba1); cmd.Parameters.AddWithValue("@QtAcionamentBomba2", message.QtAcionamentBomba2); cmd.Parameters.AddWithValue("@PercentualAcionamentBomba1", message.PercentualAcionamentBomba1); cmd.Parameters.AddWithValue("@PercentualAcionamentBomba2", message.PercentualAcionamentBomba2); cmd.Parameters.AddWithValue("@TempoAcionamentoBomba1", message.TempoAcionamentoBomba1); cmd.Parameters.AddWithValue("@TempoAcionamentoBomba2", message.TempoAcionamentoBomba2); cmd.Parameters.AddWithValue("@PercentualTempoAcionamentoBomba1", message.PercentualTempoAcionamentoBomba1); cmd.Parameters.AddWithValue("@PercentualTempoAcionamentoBomba2", message.PercentualTempoAcionamentoBomba2); cmd.Parameters.AddWithValue("@ConsumoHora", message.ConsumoHora); cmd.Parameters.AddWithValue("@ConsumoDia", message.ConsumoDia); cmd.Parameters.AddWithValue("@ConsumoMes", message.ConsumoMes); Util.Log.Log($"[DatabaseHelper.AddMessage] cmd.CommandText = {cmd.CommandText} "); var result = ExecuteNonQuery(cmd); } } catch (Exception ex) { Util.Log.Log($"[DatabaseHelper.AddMessage] - Erro: {ex}"); } }