using SensorHub.Servers; using SensorHub.Servers.Commands.CASICCommands; using SensorHub.Servers.JsonFormat; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SensorHub.LG { public class LG : CommandBase<CasicSession, StringRequestInfo> { public override void ExecuteCommand(CasicSession session, StringRequestInfo requestInfo) { //TODO: construct the receving casic data String preamble = requestInfo.Parameters[0]; String version = requestInfo.Parameters[1]; String leng = requestInfo.Parameters[2]; String devCode = requestInfo.Parameters[3]; String routeFlag = requestInfo.Parameters[4]; String dstNodeAddr = requestInfo.Parameters[5]; String pduType = requestInfo.Parameters[6]; String seq = requestInfo.Parameters[7]; String settings = requestInfo.Parameters[8]; String source = requestInfo.Parameters[9]; String sm4Key = requestInfo.Parameters[10]; String devName = "LG"; if (source.Contains("-")) { session.Send("HTTP/1.1 200 OK\r\n\r\n\r\n"); session.Close(); } //print the receving data String devType = "燃气智能监测终端(一体化)"; String operType = Common.getOpeTypeByPdu(pduType); session.Logger.Info("AD接收数据:" + requestInfo.Body); session.Logger.Info("设备类型:" + devType); session.Logger.Info("操作类型:" + operType); session.Logger.Info("会话:" + session.HubAddr + "," + session.SessionID); //获取电量信息,系统时间,传递给对应的handler List<Tag> tags = Common.getTags(settings, session); //判断是返回的设置确认数据帧, 回复第三方 if (operType == "SetResponse") { Common.sendSetResponse(session, devCode, devName); return; } //具体业务处理 String collectDate = ""; int cell = -1; int? pci = null; int? rsrp = null; int? snr = null; String softwareVersion = ""; uint offset = 0; uint size = 0; List<String> eventList = new List<String>(); List<DatasJson> datasList = new List<DatasJson>(); List<String> startupList = new List<String>(); foreach (Tag tag in tags) { if (!(tag is UploadTag)) { //非业务处理 if (tag != null && tag is CellTag) { CellTag cellTag = (CellTag)tag; cell = cellTag.Cell; continue; } if (tag != null && tag is PCITag) { PCITag pciTag = (PCITag)tag; pci = pciTag.PCI; continue; } if (tag != null && tag is RSRPTag) { RSRPTag rsrpTag = (RSRPTag)tag; rsrp = rsrpTag.RSRP; continue; } if (tag != null && tag is SNRTag) { SNRTag snrTag = (SNRTag)tag; snr = snrTag.SNR; continue; } if (tag != null && tag is SystemDateTag) { SystemDateTag systemDateTag = (SystemDateTag)tag; collectDate = systemDateTag.CollectDate; continue; } if (tag != null && tag is SensorException0Tag) { SensorException0Tag sensorException0 = tag as SensorException0Tag; int state = sensorException0.state; if (state == 0) continue; eventList.Add(getLGAlarm(state)); session.Logger.Info("通道一发送容错信息:oid:" + tag.Oid + ";value:" + state); continue; } if (tag != null && tag is SensorException1Tag) { SensorException1Tag sensorException1 = tag as SensorException1Tag; int state = sensorException1.state; if (state == 0) continue; eventList.Add(getLGAlarm(state + 2)); session.Logger.Info("通道二发送容错信息:oid:" + tag.Oid + ";value:" + state); continue; } if (tag != null && tag is SensorStartupTag) { SensorStartupTag sensorStartup = tag as SensorStartupTag; String imei = sensorStartup.IMEI; String iccid = sensorStartup.ICCID; startupList.Add(imei); startupList.Add(iccid); session.Logger.Info("设备开机上报,设备编号DEVCODE:" + devCode + " IMEI:" + imei + " ICCID:" + iccid); continue; } //非业务处理 if (tag != null && tag is SoftwareVersionTag) { SoftwareVersionTag versionTag = (SoftwareVersionTag)tag; softwareVersion = versionTag.Version; continue; } if (tag != null && tag is OffsetTag) { OffsetTag offsetTag = (OffsetTag)tag; offset = offsetTag.Offset; continue; } if (tag != null && tag is SizeTag) { SizeTag sizeTag = (SizeTag)tag; size = sizeTag.Size; continue; } } else { //业务处理 UploadTag uploadTag = tag as UploadTag; switch (uploadTag.BizType) { case 5: //气体浓度 TagHandler methaneHandler = new MethaneTagHandler(); methaneHandler.resolve(tag, session); DateTime baseTime1 = Convert.ToDateTime(collectDate + " " + methaneHandler.CollecTime); for (int i = 0; i < methaneHandler.DataList.Count; i++) { DateTime upTime = baseTime1.AddMinutes(i * methaneHandler.Interval); String uptime = upTime.ToString("yyyy") + upTime.ToString("MM") + upTime.ToString("dd") + upTime.ToString("HH") + upTime.ToString("mm") + upTime.ToString("ss"); datasList.Add(new GasDatasJson(uptime, (float)methaneHandler.DataList[i])); } break; case 3: //液位 TagHandler liquidHandler = new LiquidTagHandler(); liquidHandler.resolve(tag, session); DateTime baseTime2 = Convert.ToDateTime(collectDate + " " + liquidHandler.CollecTime); for (int i = 0; i < liquidHandler.DataList.Count; i++) { DateTime upTime = baseTime2.AddMinutes(i * liquidHandler.Interval); String uptime = upTime.ToString("yyyy") + upTime.ToString("MM") + upTime.ToString("dd") + upTime.ToString("HH") + upTime.ToString("mm") + upTime.ToString("ss"); datasList.Add(new LiquidDatasJson(uptime, (float)liquidHandler.DataList[i])); } break; default: session.Logger.Info("未知业务类型!"); break; } } } //Common.sendMessage(session, devName, devCode, cell, pci, rsrp, snr, eventList, datasList, startupList); Common.kafkaProduce(session, devName, devCode, cell, pci, rsrp, snr, eventList, datasList, startupList); byte[] btPdu = new byte[2]; //2个字节 btPdu[0] = Common.getRespOperType(operType, source == "433" ? true : false); btPdu[1] = 0x99; if (softwareVersion != "" || size != 0 || offset != 0)//进入远程升级流程 { Common.remoteUpgrade(session, operType, devName, devCode, btPdu, softwareVersion, size, offset, source); return; } Common.sendConfig(session, devCode, routeFlag, source, btPdu); } private String getLGAlarm(int state) { switch (state) { case 0: return "LGNormal";//正常 case 1: return "GasError"; //甲烷传感器异常 case 2: return "GasCommunicationFailure";//甲烷传感器通信失败 case 3: return "LiquidError"; //浸水传感器异常 case 4: return "LiquidCommunicationFailure";//浸水传感器通信失败 default: return "LGUnknown"; //未知异常 } } } }