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); } }
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); }
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"); } }
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); } } } } }
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); }
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)); } } }
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); } } } } }
// ---------- 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)); } }
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); }
public xmlMessage GetMessage() { xmlMessage result = null; if (this._MsgQueueList[MQTTManager].Count > 0) { this._MsgQueueList[MQTTManager].TryDequeue(out result); } return(result); }
// 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); }
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); }
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));; }
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"; }
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); } }
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); //} } }
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; }
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; }
// ---------- 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 }); }
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); }
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); }
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) { } }
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); } } } } }
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); }
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); }
// 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); } } } } }
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); }
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); }
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); //} } }
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); }