Exemplo n.º 1
0
        /// 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);
            }
        }
Exemplo n.º 2
0
        //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);
        }
Exemplo n.º 3
0
 public void AddMessage(MessageBodyIoTCentral message)
 {
     Util.Log.Log("[AddMessage] - Mock - Criando registro");
     Util.Log.Log("[AddMessage] - Mock - Criando registro");
 }
Exemplo n.º 4
0
 public void Update(int id, MessageBodyIoTCentral message)
 {
     Util.Log.Log("[Update] - Mock - Criando registro");
     Util.Log.Log("[Update] - Mock - Criando registro");
 }
Exemplo n.º 5
0
        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}");
            }
        }