Ejemplo n.º 1
0
        public void ReadDataAck(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/ReadData/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            if (ObjectManager.MonitorManager != null)
            {
                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();

                if (mdv != null)
                {
                    cls_ReadDataAck rc = new cls_ReadDataAck();

                    rc = JsonConvert.DeserializeObject <cls_ReadDataAck>(InputData.MQTTPayload.ToString());
                    if (rc.Cmd_Result == "OK")
                    {
                        mdv.device_status  = "Idle";
                        mdv.hb_status      = "Idle";
                        mdv.hb_report_time = DateTime.ParseExact(rc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        mdv.device_status  = "Down";
                        mdv.hb_status      = "Down";
                        mdv.hb_report_time = DateTime.ParseExact(rc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                    }
                }

                //Raise event to notify Online Monitor form to refresh status
                this.ObjectManager.OnHeartBeatEventCall(null);
            }
        }
Ejemplo n.º 2
0
        public void SendCmdConfig(string GateWayID, string DeviceID)
        {
            cls_Gateway_Info tmp_gw_info = new cls_Gateway_Info();
            cls_Gateway_Info gw_info     = ObjectManager.GatewayManager.gateway_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();

            if (gw_info == null)
            {
                MessageBox.Show("Can't find [" + GateWayID + "][" + DeviceID + "] Config to send to IoTClient", "Error");
                return;
            }

            tmp_gw_info.gateway_id            = gw_info.gateway_id;
            tmp_gw_info.gateway_ip            = gw_info.gateway_ip;
            tmp_gw_info.location              = gw_info.location;
            tmp_gw_info.virtual_flag          = gw_info.virtual_flag;
            tmp_gw_info.virtual_publish_topic = gw_info.virtual_publish_topic;
            tmp_gw_info.function_list         = gw_info.function_list;
            cls_Device_Info dv_info = gw_info.device_info.Where(o => o.device_name == DeviceID).FirstOrDefault();

            tmp_gw_info.device_info.Add(dv_info);

            string json_msg = JsonConvert.SerializeObject(tmp_gw_info, Newtonsoft.Json.Formatting.Indented);

            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.LineID      = GateWayID;
            SendOutMsg.DeviceID    = DeviceID;
            SendOutMsg.MQTTTopic   = "Cmd_Config";
            SendOutMsg.MQTTPayload = json_msg;
            SendMQTTData(SendOutMsg);
        }
Ejemplo n.º 3
0
        public void ReceiveEDCConfigEvent(xmlMessage InputData)
        {
            // /IEW / gateway / device / Cmd / Config / EDC / Reply
            string[] Topic       = InputData.MQTTTopic.Split('/');
            string   GateWayID   = Topic[2].ToString();
            string   DeviceID    = Topic[3].ToString();
            string   FunctionKey = "EDC";

            _logger.LogInformation(string.Format("GateWay Service Handle ConfigEvent GateWayID = {0}, DeviceID = {1}, Topic = {2}.", GateWayID, DeviceID, InputData.MQTTTopic));
            _logger.LogDebug(string.Format("GateWay Service Handle ConfigEvent Topic = {0}, Payload = {1}.", InputData.MQTTTopic, InputData.MQTTPayload));

            try
            {
                _objectmanager.EDCManager_Config(GateWayID, DeviceID, InputData.MQTTPayload);

                string        WaitReplyQueue_Key = string.Concat(GateWayID, "_", DeviceID);
                List <string> WaitReplyQueue     = this._Wait_Function_Config_Reply.GetOrAdd(WaitReplyQueue_Key, new List <string>());
                WaitReplyQueue.Remove(FunctionKey);
                this._Wait_Function_Config_Reply.AddOrUpdate(WaitReplyQueue_Key, WaitReplyQueue, (key, oldvalue) => WaitReplyQueue);
                Check_Wait_Function_Config_Reply(GateWayID, DeviceID);
            }
            catch (Exception ex)
            {
                _logger.LogError("Gateway Services Handle EDC Config Event Error Message :" + ex.Message);
                SendConfigAckEvent(GateWayID, DeviceID, "NG");
            }
        }
Ejemplo n.º 4
0
        public void Receive_IRSensor_MQTT(xmlMessage InputData)
        {
            if (GateWayStatus != "Run" && GateWayStatus != "Ready")
            {
                return;
            }

            string receive_topic = InputData.MQTTTopic;

            if (_objectmanager.GatewayManager != null)
            {
                List <cls_Gateway_Info> Gateways = _objectmanager.GatewayManager.gateway_list.Where(p => p.virtual_flag == true).ToList();
                if (Gateways.Count == 0)
                {
                    return;
                }
                else
                {
                    foreach (cls_Gateway_Info Gateway in Gateways)
                    {
                        try
                        {
                            Proc_IR_Temperature_DataXOL_Data Function = new Proc_IR_Temperature_DataXOL_Data(Gateway, _Update_ProcRecv_CollectData_Enqueue);
                            ThreadPool.QueueUserWorkItem(o => Function.ThreadPool_Proc(InputData.MQTTPayload.ToString()));
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError("Gateway Services Handle IRSensor Data Message Error :" + ex.Message);
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
        public void ReceiveOTAEvent(xmlMessage InputData)
        {
            JObject JsonOTA   = JObject.Parse(InputData.MQTTPayload);
            string  _Trace_ID = JsonOTA["Trace_ID"].Value <string>();
            string  _Cmd      = JsonOTA["Cmd"].Value <string>();

            if (_Cmd != "OTA")
            {
                _logger.LogError("Gateway Services Handle OTA Process But Cmd type not is OTA so skip prorcessing.");
                return;
            }

            Process currentProcess = Process.GetCurrentProcess();
            string  pid            = currentProcess.Id.ToString();

            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.GatewayID = _dic_Basicsetting[_GatewayID];;   // GateID
            SendOutMsg.DeviceID  = _dic_Basicsetting[_GatewayID];;   // DeviceID
            SendOutMsg.MQTTTopic = "OTA_Ack";

            SendOutMsg.MQTTPayload = JsonConvert.SerializeObject(new { Trace_ID = _Trace_ID, Version = _Version, Datetime = DateTime.Now.ToString("yyyyMMddHHmmssfff"), Status = "OTA", ProcrssID = pid }, Formatting.Indented);
            _QueueManager.PutMessage(SendOutMsg);

            _logger.LogError("Gateway Services Handle OTA Process System Will be shutdown in 5 seconds.");

            Thread.Sleep(5000);

            System.Environment.Exit(System.Environment.ExitCode);
        }
Ejemplo n.º 6
0
        private void DoSendProc()
        {
            xmlMessage msg = _QueueManager.GetMessage();

            if (msg != null)
            {
                string Messsage = msg.MQTTPayload as string;
                string Topic    = GetPulishTopic(msg);
                try
                {
                    if (Topic != string.Empty)
                    {
                        client_Publish_To_Broker(Topic, Messsage);
                    }
                    else
                    {
                        _logger.LogError(string.Format("Message Topic is Empty , ToMQTTTopicKey = {0}.", msg.MQTTTopic));
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError(string.Format("Exception Error msg = {0}.", ex.Message));
                }
            }
        }
Ejemplo n.º 7
0
        public void ReceiveReplyData(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/ReplyData
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            if (ObjectManager.GatewayManager != null)
            {
                cls_Gateway_Info Gateway = ObjectManager.GatewayManager.gateway_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                if (Gateway != null)
                {
                    cls_Device_Info Device = Gateway.device_info.Where(p => p.device_name == DeviceID).FirstOrDefault();
                    if (Device != null)
                    {
                        try
                        {
                            SetOnlineMonitorEDCReportStatus(GateWayID, DeviceID, InputData.MQTTPayload.ToString());

                            //Raise event to notify Online Monitor form to refresh status
                            this.ObjectManager.OnEDCReportEventCall(null);
                        }
                        catch (Exception ex)
                        {
                            NLogManager.Logger.LogError(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", ex);
                        }
                    }
                }
            }
        }
Ejemplo n.º 8
0
        // ---------- Handle MQTT Subscribe
        private void client_PublishArrived(object sender, MqttApplicationMessageReceivedEventArgs e)
        {
            string topic       = e.ApplicationMessage.Topic;
            string payload     = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
            string AliasTopic  = GetSubscribeAliasTopic(topic);
            string messagename = GetSubscribeTagName(AliasTopic);

            _logger.LogTrace(string.Format("Receive MQTT Topic = {0}.", topic));
            _logger.LogTrace(string.Format("Receive MQTT Payload = {0}.", payload));

            if (messagename == null)
            {
                _logger.LogError(string.Format("MQTT Paser AliasTopic Name Error, MQTT Topic = {0}.", topic));
                _logger.LogError(string.Format("MQTT Paser AliasTopic Name Error, MQTT Alias Topic Name = {0}.", AliasTopic));
                return;
            }

            try
            {
                xmlMessage Message = new xmlMessage();
                Message.MQTTTopic   = topic;
                Message.MQTTPayload = payload;
                _MessageManager.MessageDispatch(messagename, new object[] { Message });
            }
            catch (Exception ex)
            {
                _logger.LogError(string.Format("MessageDispatch Error , Msg = {0}.", ex.Message));
            }
        }
Ejemplo n.º 9
0
        public void ConfigDB(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/Config/DB
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            SendConfigDBReply(GateWayID, DeviceID);
        }
Ejemplo n.º 10
0
        public xmlMessage GetMessage()
        {
            xmlMessage result = null;

            if (this._MsgQueueList[MQTTManager].Count > 0)
            {
                this._MsgQueueList[MQTTManager].TryDequeue(out result);
            }
            return(result);
        }
Ejemplo n.º 11
0
        // From GUI Trigger Msg
        public void GateWay_Collect_Cmd_Start(string gatewayid, string deviceid, string msg)
        {
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.LineID      = gatewayid;
            SendOutMsg.DeviceID    = deviceid;
            SendOutMsg.MQTTTopic   = "Collect_Start";
            SendOutMsg.MQTTPayload = msg;
            SendMQTTData(SendOutMsg);
        }
Ejemplo n.º 12
0
        public void SendOTA(string GateWayID, string DeviceID, string msg)
        {
            //string json_msg = JsonConvert.SerializeObject(ota, Newtonsoft.Json.Formatting.Indented);
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.LineID      = GateWayID;
            SendOutMsg.DeviceID    = DeviceID;
            SendOutMsg.MQTTTopic   = "Cmd_OTA";
            SendOutMsg.MQTTPayload = msg;
            SendMQTTData(SendOutMsg);
        }
Ejemplo n.º 13
0
        private string GetPulishTopic(xmlMessage msg)
        {
            string topic = string.Empty;

            if (dic_MQTT_Send.ContainsKey(msg.MQTTTopic))
            {
                topic = dic_MQTT_Send[msg.MQTTTopic];
            }

            return(topic.Replace("{LineID}", msg.LineID).Replace("{DeviceID}", msg.DeviceID));;
        }
Ejemplo n.º 14
0
        public void SendConfigAckEvent(string GateWayID, string DeviceID, string _Cmd_Result)
        {
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.GatewayID   = GateWayID; // GateID
            SendOutMsg.DeviceID    = DeviceID;  // DeviceID
            SendOutMsg.MQTTTopic   = "Config_Ack";
            SendOutMsg.MQTTPayload = JsonConvert.SerializeObject(new { Cmd_Result = _Cmd_Result.ToString(), Trace_ID = DateTime.Now.ToString("yyyyMMddHHmmssfff") }, Formatting.Indented);
            _QueueManager.PutMessage(SendOutMsg);
            GateWayStatus = "Ready";
        }
Ejemplo n.º 15
0
        public void Organize_DBPartaker(string GateWayID, string Device_ID)
        {
            //--- Check DB List information
            if (_objectmanager.DBManager == null)
            {
                return;
            }

            List <ObjectManager.cls_DB_Info> lst_DBInfo = _objectmanager.DBManager.dbconfig_list.Where(p => p.gateway_id == GateWayID && p.device_id == Device_ID && p.enable == true).ToList();

            foreach (cls_DB_Info _DB in lst_DBInfo)
            {
                DBPartaker       DBReporter = new DBPartaker(_DB);
                cls_Gateway_Info gateway    = _objectmanager.GatewayManager.gateway_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                if (gateway != null)
                {
                    cls_Device_Info device = gateway.device_info.Where(p => p.device_name == Device_ID).FirstOrDefault();
                    if (device != null)
                    {
                        // Assembly Normal Tag info
                        foreach (Tuple <string, string> _Items in _DB.tag_info)
                        {
                            string ReportItemName  = _Items.Item1;
                            string ReportItemValue = string.Empty;
                            if (device.tag_info.ContainsKey(_Items.Item2))
                            {
                                ReportItemValue = device.tag_info[_Items.Item2].Value;
                                DBReporter.Report_Item.Add(Tuple.Create(ReportItemName, ReportItemValue, device.tag_info[_Items.Item2].Expression));
                            }
                        }

                        // Assembly Calc Tag info
                        foreach (Tuple <string, string> _Items in _DB.calc_tag_info)
                        {
                            string ReportItemName  = _Items.Item1;
                            string ReportItemValue = string.Empty;
                            if (device.tag_info.ContainsKey(_Items.Item2))
                            {
                                ReportItemValue = device.tag_info[_Items.Item2].Value;
                                DBReporter.Report_Item.Add(Tuple.Create(ReportItemName, ReportItemValue, device.tag_info[_Items.Item2].Expression));
                            }
                        }
                    }
                }

                //----- Send MQTT-----
                xmlMessage SendOutMsg = new xmlMessage();
                SendOutMsg.GatewayID   = GateWayID; // GateID
                SendOutMsg.DeviceID    = Device_ID; // DeviceID
                SendOutMsg.MQTTTopic   = "DBService";
                SendOutMsg.MQTTPayload = JsonConvert.SerializeObject(DBReporter, Newtonsoft.Json.Formatting.Indented);
                _QueueManager.PutMessage(SendOutMsg);
            }
        }
Ejemplo n.º 16
0
        public void ConfigAck(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/Config/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_ConfigAck ca = new cls_ConfigAck();

            ca = JsonConvert.DeserializeObject <cls_ConfigAck>(InputData.MQTTPayload.ToString());

            //Update IoTClient status in Online Monitor
            if (ObjectManager.MonitorManager != null)
            {
                //cls_Monitor_Gateway_Info gw = ObjectManager.MonitorManager.monitor_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                //if (gw != null)
                //{

                /*
                 * cls_Monitor_Device_Info dv = gw.device_list.Where(p => p.device_id == DeviceID).FirstOrDefault();
                 * if (dv != null)
                 * {
                 *
                 *  if(ca.Cmd_Result == "OK")
                 *  {
                 *      gw.iotclient_status =  "Ready";
                 *      dv.iotclient_status = "Ready";
                 *  }
                 *  else
                 *  {
                 *      gw.iotclient_status = "Off";
                 *      dv.iotclient_status = "Off";
                 *  }
                 * }
                 */

                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();
                if (mdv != null)
                {
                    if (ca.Cmd_Result == "OK")
                    {
                        mdv.iotclient_status = "Ready";
                    }
                    else
                    {
                        mdv.iotclient_status = "Off";
                    }
                }

                this.ObjectManager.OnConfigAckEventCall(null);
                //}
            }
        }
Ejemplo n.º 17
0
        public void Receive_Work_Recv_Event(xmlMessage InputData)
        {
            NLogManager.Logger.LogInfo(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", string.Format("Receive ReadData Event Topic : {0}, Msg : {1}. ", InputData.MQTTTopic, InputData.MQTTPayload));
            NLogManager.Logger.LogInfo(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", "First Load DB Info Start");
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            _First_Initial_DB_Information();
            stopwatch.Stop();
            NLogManager.Logger.LogInfo(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", "First Load DB Info Finished Spect Time " + stopwatch.ElapsedMilliseconds + " ms");
            _Initial_Finished = true;
        }
Ejemplo n.º 18
0
        public void Receive_Work_Recv_Event(xmlMessage InputData)
        {
            _logger.LogInformation(string.Format("Receive ReadData Event Topic : {0}, Msg : {1}. ", InputData.MQTTTopic, InputData.MQTTPayload));
            _logger.LogInformation("First Load DB Info Start");
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            _First_Initial_DB_Information();
            stopwatch.Stop();
            _logger.LogInformation("First Load DB Info Finished Spect Time " + stopwatch.ElapsedMilliseconds + " ms");
            _Initial_Finished = true;
        }
Ejemplo n.º 19
0
        // ---------- Handle MQTT Subscribe
        private void client_PublishArrived(object sender, MqttApplicationMessageReceivedEventArgs e)
        {
            string topic   = e.ApplicationMessage.Topic;
            string payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
            string message = GetSubscribeAliasTopic(topic);

            _logger.LogTrace(string.Format("Receive MQTT Topic = {0}.", topic));
            _logger.LogTrace(string.Format("Receive MQTT Payload = {0}.", payload));

            xmlMessage Message = new xmlMessage();

            Message.MQTTTopic   = topic;
            Message.MQTTPayload = payload;
            _MessageManager.MessageDispatch(message, new object[] { Message });
        }
Ejemplo n.º 20
0
        public void ReadDataAck(xmlMessage InputData)
        {
            if (!gw_info_loaded)
            {
                return;
            }

            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/ReadData/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_LogMessage log_msg = new cls_LogMessage("MQTT", GateWayID, DeviceID, "Receive ReadData Ack");

            _logger.LogInformation(log_msg.get_log_message());

            cls_ReadDataAck rc = new cls_ReadDataAck();

            rc = JsonConvert.DeserializeObject <cls_ReadDataAck>(InputData.MQTTPayload.ToString());

            cls_Monitor_Device_Info mdv = this.monitor_manager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();

            if (mdv != null)
            {
                if (rc.Cmd_Result == "OK")
                {
                    mdv.device_status  = "Idle";
                    mdv.hb_status      = "Idle";
                    mdv.hb_report_time = DateTime.ParseExact(rc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                }
                else
                {
                    mdv.device_status  = "Down";
                    mdv.hb_status      = "Down";
                    mdv.hb_report_time = DateTime.ParseExact(rc.Trace_ID, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                }

                log_msg.message = "ReadData Ack Result = " + rc.Cmd_Result;
            }
            else
            {
                log_msg.message = "Cannot find monitor information!";
            }

            _logger.LogInformation(log_msg.get_log_message());

            SaveMonitorInformation(GateWayID, DeviceID);
        }
Ejemplo n.º 21
0
        public void SendStartAck(string GateWayID, string DeviceID)
        {
            cls_StartAck sc = new cls_StartAck();

            sc.Cmd_Result = "OK";
            sc.Trace_ID   = DateTime.Now.ToString("yyyyMMddHHmmssfff");

            string     json_msg   = JsonConvert.SerializeObject(sc, Newtonsoft.Json.Formatting.Indented);
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.LineID      = GateWayID;
            SendOutMsg.DeviceID    = DeviceID;
            SendOutMsg.MQTTTopic   = "Collect_Start_Ack";
            SendOutMsg.MQTTPayload = json_msg;
            SendMQTTData(SendOutMsg);
        }
Ejemplo n.º 22
0
 private void Routine_TimerTask(object timerState)
 {
     try
     {
         xmlMessage SendOutMsg = new xmlMessage();
         SendOutMsg.GatewayID   = _dic_Basicsetting[_GatewayID];   // GateID
         SendOutMsg.DeviceID    = _dic_Basicsetting[_GatewayID];
         SendOutMsg.MQTTTopic   = "HeartBeat";
         SendOutMsg.MQTTPayload = JsonConvert.SerializeObject(new { Trace_ID = DateTime.Now.ToString("yyyyMMddHHmmssfff"), Status = GateWayStatus }, Formatting.Indented);
         _QueueManager.PutMessage(SendOutMsg);
         _logger.LogInformation("Report HeartBeat G/W Status = " + GateWayStatus);
     }
     catch (Exception ex)
     {
     }
 }
Ejemplo n.º 23
0
        public void ReceiveMQTTData(xmlMessage InputData)
        {
            // Chris Modify 20191023 直接在外面判斷是否為virtual type
            // Parse Mqtt Topic

            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/ReplyData
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            NLogManager.Logger.LogInfo(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", string.Format("GateWay Service Handle Receive Data GateWayID = {0}, DeviceID = {1}, Topic = {2}.", GateWayID, DeviceID, InputData.MQTTTopic));
            NLogManager.Logger.LogDebug(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", string.Format("GateWay Service Handle Receive Data  Topic = {0}, Payload = {1}.", InputData.MQTTTopic, InputData.MQTTPayload));

            if (ObjectManager.GatewayManager != null)
            {
                cls_Gateway_Info Gateway = ObjectManager.GatewayManager.gateway_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                if (Gateway != null)
                {
                    cls_Device_Info Device = Gateway.device_info.Where(p => p.device_name == DeviceID).FirstOrDefault();
                    if (Device != null)
                    {
                        try
                        {
                            ProcCollectData Function = new ProcCollectData(Device, GateWayID, DeviceID, _Update_ProcRecv_CollectData_Enqueue);

                            if (Gateway.virtual_flag == false)
                            {
                                ThreadPool.QueueUserWorkItem(o => Function.ThreadPool_Proc_Physical(InputData.MQTTPayload.ToString()));
                            }
                            else
                            {
                                ThreadPool.QueueUserWorkItem(o => Function.ThreadPool_Proc_Virtual(InputData.MQTTPayload.ToString()));
                            }


                            SetOnlineMonitorEDCReportStatus(GateWayID, DeviceID, InputData.MQTTPayload.ToString());
                            //Raise event to notify Online Monitor form to refresh status
                            this.ObjectManager.OnEDCReportEventCall(null);
                        }
                        catch (Exception ex)
                        {
                            NLogManager.Logger.LogError(LogName, GetType().Name, MethodInfo.GetCurrentMethod().Name + "()", "Gateway Services Handle Receive MQTT Message Error :" + ex.Message);
                        }
                    }
                }
            }
        }
Ejemplo n.º 24
0
        public void ReportAlarm(string gateway_id, string device_id, string al_code, string al_desc, string al_level)
        {
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.GatewayID = gateway_id; // GateID
            SendOutMsg.DeviceID  = device_id;  // DeviceID
            SendOutMsg.MQTTTopic = "IOT_Alarm";

            SendOutMsg.MQTTPayload = JsonConvert.SerializeObject(new
            {
                AlarmCode  = al_code,
                Datetime   = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
                AlarmLevel = al_level,
                AlarmApp   = "IOTCLIENT",
                AlarmDesc  = al_desc
            }, Newtonsoft.Json.Formatting.Indented);
            _QueueManager.PutMessage(SendOutMsg);
        }
Ejemplo n.º 25
0
        public void ConfigAck(xmlMessage InputData)
        {
            if (!gw_info_loaded)
            {
                return;
            }

            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Cmd/Config/Ack
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_LogMessage log_msg = new cls_LogMessage("MQTT", GateWayID, DeviceID, "Receive Config Ack");

            _logger.LogInformation(log_msg.get_log_message());

            cls_ConfigAck ca = new cls_ConfigAck();

            ca = JsonConvert.DeserializeObject <cls_ConfigAck>(InputData.MQTTPayload.ToString());

            cls_Monitor_Device_Info mdv = this.monitor_manager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();

            if (mdv != null)
            {
                if (ca.Cmd_Result == "OK")
                {
                    mdv.iotclient_status = "Ready";
                }
                else
                {
                    mdv.iotclient_status = "Off";
                }

                log_msg.message = "Config Ack Result = " + ca.Cmd_Result;
            }
            else
            {
                log_msg.message = "Cannot find monitor information!";
            }

            _logger.LogInformation(log_msg.get_log_message());

            SaveMonitorInformation(GateWayID, DeviceID);
        }
Ejemplo n.º 26
0
        // Chris Modify 20191023 直接在外面判斷是否為virtual type
        public void ReceiveMQTTData(xmlMessage InputData)
        {
            if (GateWayStatus != "Run" && GateWayStatus != "Ready")
            {
                return;
            }
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/ReplyData
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            _logger.LogInformation(string.Format("GateWay Service Handle Receive Data GateWayID = {0}, DeviceID = {1}, Topic = {2}.", GateWayID, DeviceID, InputData.MQTTTopic));
            _logger.LogDebug(string.Format("GateWay Service Handle Receive Data  Topic = {0}, Payload = {1}.", InputData.MQTTTopic, InputData.MQTTPayload));

            if (_objectmanager.GatewayManager != null)
            {
                cls_Gateway_Info Gateway = _objectmanager.GatewayManager.gateway_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                if (Gateway != null)
                {
                    cls_Device_Info Device = Gateway.device_info.Where(p => p.device_name == DeviceID).FirstOrDefault();
                    if (Device != null)
                    {
                        try
                        {
                            ProcCollectData Function = new ProcCollectData(Device, GateWayID, DeviceID, _Update_ProcRecv_CollectData_Enqueue);

                            if (Gateway.virtual_flag == false)
                            {
                                ThreadPool.QueueUserWorkItem(o => Function.ThreadPool_Proc_Physical(InputData.MQTTPayload.ToString()));
                            }
                            else
                            {
                                ThreadPool.QueueUserWorkItem(o => Function.ThreadPool_Proc_Virtual(InputData.MQTTPayload.ToString()));
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.LogError("Gateway Services Handle Receive MQTT Message Error :" + ex.Message);
                        }
                    }
                }
            }
        }
Ejemplo n.º 27
0
        public void SendConfigEDCReply(string GateWayID, string DeviceID)
        {
            List <cls_EDC_Info> edc_list = ObjectManager.EDCManager.gateway_edc.Where(p => p.gateway_id == GateWayID && p.device_id == DeviceID).ToList();

            if (edc_list == null)
            {
                MessageBox.Show("Can't find [" + GateWayID + "][" + DeviceID + "] EDC XML Config to send to IoTClient", "Error");
                return;
            }

            string     json_msg   = JsonConvert.SerializeObject(edc_list, Newtonsoft.Json.Formatting.Indented);
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.LineID      = GateWayID;
            SendOutMsg.DeviceID    = DeviceID;
            SendOutMsg.MQTTTopic   = "Cmd_Config_EDC";
            SendOutMsg.MQTTPayload = json_msg;
            SendMQTTData(SendOutMsg);
        }
Ejemplo n.º 28
0
        public void SendConfigDBReply(string GateWayID, string DeviceID)
        {
            cls_DB_Info db_info = ObjectManager.DBManager.dbconfig_list.Where(p => p.gateway_id == GateWayID && p.device_id == DeviceID).FirstOrDefault();

            if (db_info == null)
            {
                MessageBox.Show("Can't find [" + GateWayID + "][" + DeviceID + "] DB Config to send to IoTClient", "Error");
                return;
            }

            string     json_msg   = JsonConvert.SerializeObject(db_info, Newtonsoft.Json.Formatting.Indented);
            xmlMessage SendOutMsg = new xmlMessage();

            SendOutMsg.LineID      = GateWayID;
            SendOutMsg.DeviceID    = DeviceID;
            SendOutMsg.MQTTTopic   = "Cmd_Config_DB";
            SendOutMsg.MQTTPayload = json_msg;
            SendMQTTData(SendOutMsg);
        }
Ejemplo n.º 29
0
        public void ReceiveHeartBeat(xmlMessage InputData)
        {
            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Status/HeartBeat
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_HeartBeat hb = new cls_HeartBeat();

            hb = JsonConvert.DeserializeObject <cls_HeartBeat>(InputData.MQTTPayload.ToString());

            if (ObjectManager.MonitorManager != null)
            {
                //cls_Monitor_Gateway_Info gw = ObjectManager.MonitorManager.monitor_list.Where(p => p.gateway_id == GateWayID).FirstOrDefault();
                //if (gw != null)
                //{

                /*
                 *  cls_Monitor_Device_Info dv = gw.device_list.Where(p => p.device_id == DeviceID).FirstOrDefault();
                 *  if (dv != null)
                 *  {
                 *      gw.gateway_status = hb.Status;
                 *      gw.hb_report_time = DateTime.ParseExact(hb.HBDatetime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *      gw.hb_status = hb.Status;
                 *
                 *      dv.device_status = hb.Status;
                 *      dv.hb_status = hb.Status;
                 *      dv.hb_report_time = DateTime.ParseExact(hb.HBDatetime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                 *  }
                 */
                cls_Monitor_Device_Info mdv = ObjectManager.MonitorManager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();
                if (mdv != null)
                {
                    mdv.device_status  = hb.Status;
                    mdv.hb_status      = hb.Status;
                    mdv.hb_report_time = DateTime.ParseExact(hb.HBDatetime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                }

                this.ObjectManager.OnHeartBeatEventCall(null);
                //}
            }
        }
Ejemplo n.º 30
0
        public void ReceiveAlarm(xmlMessage InputData)
        {
            //_alarm_logger.LogWarning("Receive Alarm message!!");

            if (!gw_info_loaded)
            {
                return;
            }

            // Parse Mqtt Topic
            string[] Topic     = InputData.MQTTTopic.Split('/'); // /IEW/GateWay/Device/Status/Alarm
            string   GateWayID = Topic[2].ToString();
            string   DeviceID  = Topic[3].ToString();

            cls_Alarm ca = new cls_Alarm();

            ca = JsonConvert.DeserializeObject <cls_Alarm>(InputData.MQTTPayload.ToString());

            cls_LogMessage log_msg = new cls_LogMessage("Alarm", GateWayID, DeviceID, ca.AlarmDesc);

            log_msg.alarm_app   = ca.AlarmApp;
            log_msg.alarm_code  = ca.AlarmCode;
            log_msg.alarm_level = ca.AlarmLevel;

            cls_Monitor_Device_Info mdv = this.monitor_manager.device_list.Where(o => o.gateway_id == GateWayID && o.device_id == DeviceID).FirstOrDefault();

            if (mdv != null)
            {
                mdv.last_alarm_code     = ca.AlarmCode;
                mdv.last_alarm_app      = ca.AlarmApp;
                mdv.last_alarm_datetime = DateTime.ParseExact(ca.DateTime, "yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
                mdv.last_alarm_message  = ca.AlarmDesc;
            }
            else
            {
                log_msg.message = "Cannot find monitor information!";
            }

            _alarm_logger.LogWarning(log_msg.get_log_message());

            SaveMonitorInformation(GateWayID, DeviceID);
        }