Esempio n. 1
0
        //Dictionary<int, DateTime> lastRecordTime = new Dictionary<int, DateTime>();

        //Dictionary<int, DateTime> lastRecordTime = new Dictionary<int, DateTime>();
        private void ManagedClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
        {
            try
            {
                //lastTime = DateTime.Now.Add(mqttOptions.RecordInterval);

                //byte[] pay_load = e.ApplicationMessage.Payload;
                //byte[] new_fileArray = new byte[pay_load.Length + 8];
                //Array.Copy(pay_load, new_fileArray, pay_load.Length);
                //File.WriteAllBytes($"{DateTime.Now.TimeOfDay}_dump.bin", e.ApplicationMessage.Payload);
                DaegunPacket packet = PacketParser.ByteToStruct <DaegunPacket>(e.ApplicationMessage.Payload);
                //if (lastRecordTime.ContainsKey(packet.sSiteId) == false)
                //    lastRecordTime.Add(packet.sSiteId, DateTime.MinValue);
                //if (DateTime.Now < lastRecordTime[packet.sSiteId])
                //    return;
                _logger.LogInformation($"RECEIVED DAEGUN : siteid({packet.sSiteId}) from({e.ClientId}) t({e.ApplicationMessage.Topic}) QoS({e.ApplicationMessage.QualityOfServiceLevel}) size({e.ApplicationMessage.Payload.Length})");
                //nLogger.Info($"RECEIVED DAEGUN : siteid({packet.sSiteId}) from({e.ClientId}) t({e.ApplicationMessage.Topic}) QoS({e.ApplicationMessage.QualityOfServiceLevel}) size({e.ApplicationMessage.Payload.Length})");
                //lastRecordTime[packet.sSiteId] = DateTime.Now.Add(mqttOptions.RecordInterval);
                //packet.timestamp = DateTime.Now;
                DateTime dt = DateTime.Now.Date
                              .AddHours(DateTime.Now.Hour)
                              .AddMinutes(DateTime.Now.Minute)
                              .AddSeconds(DateTime.Now.Second);

#if RASPIAN == false
                queue.QueueBackgroundWorkItem(new DaegunPacketClass(packet, dt));
#else
                NLog.LogEventInfo pcsEventInfo = LogEventMaker.CreateLogEvent(PCS_LOG, packet.Pcs);
                NLog.LogEventInfo bscEventInfo = LogEventMaker.CreateLogEvent(BSC_LOG, packet.Bsc);
                NLog.LogEventInfo pvEventInfo  = LogEventMaker.CreateLogEvent(PV_METER_LOG, packet.Pv);
                NLog.LogEventInfo essEventInfo = LogEventMaker.CreateLogEvent(BSC_METER_LOG, packet.Ess);
                //NLog.Logger logger =  NLog.LogManager.Configuration.LogFactory.GetLogger("record.pcs");
                //NLog.LogEventInfo logEvent = LogEventMaker.CreateLogEvent("record.pcs", pcsPacket);
                pcsEventInfo.Properties["SiteId"]             =
                    bscEventInfo.Properties["SiteId"]         =
                        pvEventInfo.Properties["SiteId"]      =
                            essEventInfo.Properties["SiteId"] = packet.sSiteId;
                pcsLogger.Log(pcsEventInfo);
                bscLogger.Log(bscEventInfo);
                pvMeterLogger.Log(pvEventInfo);
                bscMeterLogger.Log(essEventInfo);
                //logger.Log(logEvent);
#endif
                //logger.LogInformation("Store Daegun Packet");
                //if(lastRecordTime.ContainsKey(packet.sSiteId) == false)
                //{
                //    lastRecordTime.Add(packet.sSiteId, DateTime.MinValue);
                //}

                //if (DateTime.Now > lastRecordTime[packet.sSiteId])
                //{

                //    lastRecordTime[packet.sSiteId] = DateTime.Now.Add(mqttOptions.RecordInterval);
                //}
            }catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                _logger.LogError(ex, ex.Message);
            }
        }
Esempio n. 2
0
        protected override Task OnMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs e)
        {
            DaegunPacket packet = PacketParser.ByteToStruct <DaegunPacket>(e.ApplicationMessage.Payload);

            queue.QueueBackgroundWorkItem(packet);
            return(Task.CompletedTask);
        }
        private PcsData CreatePcsData(DaegunPacketClass _packet)
        {
            DaegunPacket packet = _packet.Packet;
            PcsData      pcs    = new PcsData();

            pcs.deviceId            = $"DS{packet.sSiteId}_PCS{packet.Pcs.PcsNumber}";
            pcs.groupId             = 1;
            pcs.siteId              = packet.sSiteId;
            pcs.groupName           = "PCS_SYSTEM";
            pcs.freq                = packet.Pcs.Frequency;
            pcs.acVltR              = packet.Pcs.AC_line_voltage.R;
            pcs.acVltS              = packet.Pcs.AC_line_voltage.S;
            pcs.acVltT              = packet.Pcs.AC_line_voltage.T;
            pcs.actPwrCmdLmtLowChg  = 0;
            pcs.actPwrCmdLmtLowDhg  = 0;
            pcs.actPwrCmdLmtHighChg = packet.Bsc.ChargePowerLimit;
            pcs.actPwrCmdLmtHighDhg = packet.Bsc.DischargePowerLimit;
            pcs.actPwr              = packet.Pcs.ActivePower;
            pcs.acCrtLow            = 0;
            pcs.acCrtHigh           = packet.Bsc.DischargeCurrentLimit;
            pcs.acCrtR              = packet.Pcs.AC_phase_current.R;
            pcs.acCrtS              = packet.Pcs.AC_phase_current.S;
            pcs.acCrtT              = packet.Pcs.AC_phase_current.T;
            pcs.rctPwr              = packet.Pcs.ReactivePower;
            pcs.pf        = packet.Pcs.PowerFactor;
            pcs.timestamp = _packet.Timestamp;
            return(pcs);
        }
        protected async override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            DateTime lastRecord = DateTime.MinValue;

            while (!stoppingToken.IsCancellationRequested)
            {
                //var workItem = await TaskQueue.DequeueAsync(stoppingToken);
                DaegunPacket modbusWorkItem = await TaskQueue.DequeueAsync(stoppingToken);

                try
                {
                    modbusWorkItem.timestamp = DateTime.Now;

                    string    pcs_key    = $"site_{modbusWorkItem.sSiteId}_PCS";
                    string    bsc_key    = $"site_{modbusWorkItem.sSiteId}_BSC";
                    string    ess_key    = $"site_{modbusWorkItem.sSiteId}_ESSMETER";
                    string    pv_key     = $"site_{modbusWorkItem.sSiteId}_PVMETER";
                    HashEntry lastUpdate = new HashEntry("timestamp", DateTime.Now.ToString());

                    var hashPcsMap = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Pcs);
                    hashPcsMap.Add(lastUpdate);
                    var hashbmsMap        = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Bsc, lastUpdate);
                    var hashmeter_ess_Map = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Ess, lastUpdate);
                    var hashmeter_pv_Map  = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Pv, lastUpdate);


                    await _redisDb.HashSetAsync(pcs_key, hashPcsMap.ToArray(), CommandFlags.FireAndForget);

                    await _redisDb.HashSetAsync(bsc_key, hashbmsMap.ToArray(), CommandFlags.FireAndForget);

                    await _redisDb.HashSetAsync(ess_key, hashmeter_ess_Map.ToArray(), CommandFlags.FireAndForget);

                    await _redisDb.HashSetAsync(pv_key, hashmeter_pv_Map.ToArray(), CommandFlags.FireAndForget);

                    _db  = _client.GetDatabase("PEIU");
                    cols = _db.GetCollection <DaegunPacket>("daegun_meter");

                    lastRecord = DateTime.Now.Add(_mqttConfig.RecordInterval);
                    await cols.InsertOneAsync(modbusWorkItem);

                    _logger.LogInformation("Recorded packet from daegun");

                    //Console.WriteLine($"SAVE DB");
                    //  if(workItem != null)
                    //    await workItem(stoppingToken);
                    //if (modbusWorkItem != null)
                    //    await modbusWorkItem.RunAsync(stoppingToken);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex,
                                     $"Error occurred executing {nameof(modbusWorkItem)}.");
                }
            }

            _logger.LogInformation("Queued Hosted Service is stopping.");
        }
        private void ManagedClient_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
        {
            logger.LogInformation($"RECEIVED DAEGUN :from({e.ClientId}) t({e.ApplicationMessage.Topic}) QoS({e.ApplicationMessage.QualityOfServiceLevel}) size({e.ApplicationMessage.Payload.Length})");
            byte[] pay_load      = e.ApplicationMessage.Payload;
            byte[] new_fileArray = new byte[pay_load.Length + 8];
            Array.Copy(pay_load, new_fileArray, pay_load.Length);
            DaegunPacket packet = PacketParser.ByteToStruct <DaegunPacket>(new_fileArray);

            packet.timestamp = DateTime.Now;
            queue.QueueBackgroundWorkItem(packet);
            logger.LogInformation("Queuying Daegun Packet");
        }
 private void DaegunSubscriberWorker_MessageReceived(object sender, MQTTnet.MqttApplicationMessageReceivedEventArgs e)
 {
     try
     {
         DaegunPacket packet = PacketParser.ByteToStruct <DaegunPacket>(e.ApplicationMessage.Payload);
         queue.QueueBackgroundWorkItem(packet);
     }
     catch (Exception ex)
     {
         logger.LogError(ex, ex.Message);
     }
 }
Esempio n. 7
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            peiuPublishWorker = new PeiuPublishWorker(stoppingToken);
            peiuPublishWorker.Initialize();
            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);

                DaegunPacket pacekt = await packetQueue.DequeueAsync(stoppingToken);

                await Task.Delay(100, stoppingToken);
            }
        }
Esempio n. 8
0
 protected override async Task ExecuteAsync(CancellationToken stoppingToken)
 {
     PeiuPublishWorker = new PeiuPublishWorker(stoppingToken);
     PeiuPublishWorker.Initialize();
     while (true)
     {
         stoppingToken.ThrowIfCancellationRequested();
         if (stoppingToken.IsCancellationRequested)
         {
             break;
         }
         DaegunPacket packet = await queue.DequeueAsync(stoppingToken);
         await PublishAsync(packet);
     }
 }
Esempio n. 9
0
        private async Task PublishAsync(DaegunPacket packet)
        {
            string pcs_string = null;
            string bms_string = null;
            string pv_string  = null;

            if (MqttModelConvert.ConvertPcs(packet, DateTime.Now, ref pcs_string, ref bms_string, ref pv_string))
            {
                //await base.p
                await PeiuPublishWorker.publish(packet.sSiteId, "PCS" + packet.Pcs.PcsNumber, pcs_string);

                await PeiuPublishWorker.publish(packet.sSiteId, "BMS" + packet.Bsc.PcsIndex, bms_string);

                await PeiuPublishWorker.publish(packet.sSiteId, "PV" + packet.Pv.DeviceIndex, pv_string);
            }
        }
        private BmsData CreateBmsData(DaegunPacketClass _packet)
        {
            DaegunPacket packet  = _packet.Packet;
            BmsData      bmsData = new BmsData();

            bmsData.deviceId    = $"DS{packet.sSiteId}_BMS{packet.Bsc.PcsIndex}";
            bmsData.groupId     = 2;
            bmsData.siteId      = packet.sSiteId;
            bmsData.timestamp   = _packet.Timestamp;
            bmsData.groupName   = "PCS_BATTERY";
            bmsData.soc         = packet.Bsc.Soc;
            bmsData.soh         = packet.Bsc.Soh;
            bmsData.dcPwr       = packet.Pcs.Dc_battery_power;
            bmsData.dcVlt       = packet.Pcs.Dc_battery_voltage;
            bmsData.dcCrt       = packet.Pcs.Dc_battery_current;
            bmsData.cellMaxTemp = packet.Bsc.ModuleTempRange.Max;
            bmsData.cellMinTemp = packet.Bsc.ModuleTempRange.Min;
            bmsData.cellMinVlt  = packet.Bsc.CellVoltageRange.Min;
            bmsData.cellMaxVlt  = packet.Bsc.CellVoltageRange.Max;
            return(bmsData);
        }
        private async Task PublishAsync(DaegunPacket packet, CancellationToken stoppingToken)
        {
            string pcs_string = null;
            string bms_string = null;
            string pv_string  = null;

            if (MqttModelConvert.ConvertPcs(packet, DateTime.Now, ref pcs_string, ref bms_string, ref pv_string))
            {
                //await base.p
                await PeiuPublishWorker.publish(packet.sSiteId, DeviceTypes.PCS, packet.Pcs.PcsNumber, pcs_string);

                await PeiuPublishWorker.publish(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, bms_string);

                await PeiuPublishWorker.publish(packet.sSiteId, DeviceTypes.PV, packet.Pv.PmsIndex, pv_string);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.PCS, packet.Pcs.PcsNumber, 2, 27, (ushort)packet.Pcs.Faults[0], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.PCS, packet.Pcs.PcsNumber, 2, 28, (ushort)packet.Pcs.Faults[1], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.PCS, packet.Pcs.PcsNumber, 2, 29, (ushort)packet.Pcs.Faults[2], stoppingToken);


                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 23, (ushort)packet.Bsc.Warning[0], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 24, (ushort)packet.Bsc.Warning[1], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 25, (ushort)packet.Bsc.Warning[2], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 26, (ushort)packet.Bsc.Warning[3], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 27, (ushort)packet.Bsc.Faults[0], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 28, (ushort)packet.Bsc.Faults[1], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 29, (ushort)packet.Bsc.Faults[2], stoppingToken);

                await _worker.UpdateDigitalPoint(packet.sSiteId, DeviceTypes.BMS, packet.Bsc.PcsIndex, 2, 30, (ushort)packet.Bsc.Faults[3], stoppingToken);
            }
        }
 protected override async Task ExecuteAsync(CancellationToken stoppingToken)
 {
     PeiuPublishWorker = new PeiuPublishWorker(stoppingToken);
     PeiuPublishWorker.Initialize();
     while (true)
     {
         try
         {
             stoppingToken.ThrowIfCancellationRequested();
             if (stoppingToken.IsCancellationRequested)
             {
                 break;
             }
             //if(PeiuPublishWorker.)
             DaegunPacket packet = await queue.DequeueAsync(stoppingToken);
             await PublishAsync(packet, stoppingToken);
         }
         catch (Exception ex)
         {
             logger.LogError(ex, ex.Message);
         }
     }
 }
 public void QueueBackgroundWorkItem(DaegunPacket workItem)
 {
     //   DaegunPacket workItem = new DaegunPacket(client, packetStruct);
     _workItems.Enqueue(workItem);
     _signal.Release();
 }
Esempio n. 14
0
        public static bool ConvertPcs(DaegunPacket packet, DateTime timestamp, ref string pcs_string, ref string bms_string, ref string pv_string)
        {
            DaegunPcsPacket   pcsPacket        = packet.Pcs;
            DaegunBSCPacket   bmsPacket        = packet.Bsc;
            DaegunMeterPacket bms_meter_packet = packet.Ess;
            DaegunMeterPacket pv_pack          = packet.Pv;
            JObject           obj = CreateTemporary(1, "PCS_SYSTEM", $"PCS{pcsPacket.PcsNumber}", packet.sSiteId, timestamp);

            obj.Add("freq", pcsPacket.Frequency);
            obj.Add("acGridVlt", 0);
            obj.Add("acGridCrtLow", 0);
            obj.Add("acGridCrtHigh", 0);
            obj.Add("acGridPwr", 0);
            obj.Add("actPwrKw", pcsPacket.ActivePower);
            obj.Add("rctPwrKw", pcsPacket.ReactivePower);
            obj.Add("pwrFact", pcsPacket.PowerFactor);
            obj.Add("acGridVltR", pcsPacket.AC_phase_voltage.R);
            obj.Add("acGridVltS", pcsPacket.AC_phase_voltage.S);
            obj.Add("acGridVltT", pcsPacket.AC_phase_voltage.T);
            obj.Add("acGridCrtR", pcsPacket.AC_phase_current.R);
            obj.Add("acGridCrtS", pcsPacket.AC_phase_current.S);
            obj.Add("acGridCrtT", pcsPacket.AC_phase_current.T);
            obj.Add("actCmdLimitLowChg", 0);
            obj.Add("actCmdLimitLowDhg", 0);
            obj.Add("actCmdLimitHighChg", bmsPacket.ChargePowerLimit);
            obj.Add("actCmdLimitHighDhg", bmsPacket.DischargePowerLimit);
            pcs_string = obj.ToString();

            obj = CreateTemporary(2, "PCS_BATTERY", $"BMS{bmsPacket.PcsIndex}", packet.sSiteId, timestamp);
            obj.Add("bms_soc", bmsPacket.Soc);
            obj.Add("bms_soh", bmsPacket.Soh);
            obj.Add("dcCellPwr", packet.Pcs.Dc_battery_power);
            obj.Add("dcCellVlt", packet.Pcs.Dc_battery_voltage);
            obj.Add("dcCellCrt", packet.Pcs.Dc_battery_current);
            obj.Add("dcCellTmpMx", packet.Bsc.ModuleTempRange.Max);
            obj.Add("dcCellTmpMn", packet.Bsc.ModuleTempRange.Min);
            obj.Add("dcCellVltMx", packet.Bsc.CellVoltageRange.Max);
            obj.Add("dcCellVltMn", packet.Bsc.CellVoltageRange.Min);
            bms_string = obj.ToString();

            obj = CreateTemporary(4, "PV_SYSTEM", $"PV{pv_pack.PmsIndex}", packet.sSiteId, timestamp);
            obj.Add("TotalActivePower", pv_pack.TotalActivePower);
            obj.Add("TotalReactivePower", pv_pack.TotalReactivePower);
            obj.Add("ReverseActivePower", pv_pack.ReverseActivePower);
            obj.Add("ReverseReactivePower", pv_pack.ReverseReactivePower);
            obj.Add("vltR", pv_pack.Voltage.R);
            obj.Add("vltS", pv_pack.Voltage.S);
            obj.Add("vltT", pv_pack.Voltage.T);
            obj.Add("crtR", pv_pack.Current.R);
            obj.Add("crtS", pv_pack.Current.S);
            obj.Add("crtT", pv_pack.Current.T);
            obj.Add("Frequency", pv_pack.Frequency);
            if (pv_pack.EnergyTotalActivePower != 0)
            {
            }
            obj.Add("EnergyTotalActivePower", pv_pack.EnergyTotalActivePower);
            obj.Add("EnergyTotalReactivePower", pv_pack.EnergyTotalReactivePower);
            obj.Add("EnergyTotalReverseActivePower", pv_pack.EnergyTotalReverseActivePower);
            pv_string = obj.ToString();
            return(true);
        }
Esempio n. 15
0
        private void DaegunSubscriberWorker_MessageReceived(object sender, MQTTnet.MqttApplicationMessageReceivedEventArgs e)
        {
            DaegunPacket packet = PacketParser.ByteToStruct <DaegunPacket>(e.ApplicationMessage.Payload);

            queue.QueueBackgroundWorkItem(packet);
        }
        protected async override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            DateTime batchTime = DateTime.MinValue;

            while (!stoppingToken.IsCancellationRequested)
            {
                //var workItem = await TaskQueue.DequeueAsync(stoppingToken);
                mre.WaitOne();
                DaegunPacketClass queueItem = await TaskQueue.DequeueAsync(stoppingToken);

                DaegunPacket modbusWorkItem = queueItem.Packet;
                try
                {
                    //modbusWorkItem.timestamp = DateTime.Now;

                    //string pcs_key = $"site_{modbusWorkItem.sSiteId}_PCS";
                    //string bsc_key = $"site_{modbusWorkItem.sSiteId}_BSC";
                    //string ess_key = $"site_{modbusWorkItem.sSiteId}_ESSMETER";
                    //string pv_key = $"site_{modbusWorkItem.sSiteId}_PVMETER";
                    //HashEntry lastUpdate = new HashEntry("timestamp", DateTime.Now.ToString());

                    //var hashPcsMap = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Pcs);
                    //hashPcsMap.Add(lastUpdate);
                    //var hashbmsMap = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Bsc, lastUpdate);
                    //var hashmeter_ess_Map = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Ess, lastUpdate);
                    //var hashmeter_pv_Map = RedisConnectionFactory.CreateHashEntries(modbusWorkItem.Pv, lastUpdate);


                    //await _redisDb.HashSetAsync(pcs_key, hashPcsMap.ToArray(), CommandFlags.FireAndForget);
                    //await _redisDb.HashSetAsync(bsc_key, hashbmsMap.ToArray(), CommandFlags.FireAndForget);
                    //await _redisDb.HashSetAsync(ess_key, hashmeter_ess_Map.ToArray(), CommandFlags.FireAndForget);
                    //await _redisDb.HashSetAsync(pv_key, hashmeter_pv_Map.ToArray(), CommandFlags.FireAndForget);

                    if (lastRecordTime.ContainsKey(modbusWorkItem.sSiteId) == false)
                    {
                        lastRecordTime.Add(modbusWorkItem.sSiteId, DateTime.MinValue);
                    }

                    insertBatchList.Add(queueItem);

                    //if (DateTime.Now > lastRecordTime[modbusWorkItem.sSiteId])
                    //{
                    //    insertBatchList.Add(queueItem);

                    //    //_db = _client.GetDatabase("PEIU");
                    //    //cols = _db.GetCollection<DaegunPacket>("daegun_meter");
                    //    ////lastRecord = DateTime.Now.Add(_mqttConfig.RecordInterval);
                    //    //await cols.InsertOneAsync(modbusWorkItem);
                    //    //_logger.LogInformation("Store packet from daegun");
                    //    lastRecordTime[modbusWorkItem.sSiteId] = DateTime.Now.Add(_mqttConfig.RecordInterval);
                    //}

                    if (batchTime <= DateTime.Now)
                    {
                        StoreDb(stoppingToken);
                        batchTime = DateTime.Now.Add(BatchInterval);
                    }


                    //Console.WriteLine($"SAVE DB");
                    //  if(workItem != null)
                    //    await workItem(stoppingToken);
                    //if (modbusWorkItem != null)
                    //    await modbusWorkItem.RunAsync(stoppingToken);
                }
                catch (Exception ex)
                {
                    _logger.LogError(ex,
                                     $"Error occurred executing {nameof(ex)}");
                    Console.WriteLine(ex);
                }
            }

            _logger.LogInformation("Queued Hosted Service is stopping.");
        }