public MockOpenSprinklerService(string hostname, string password) : base(null) { m_hostname = hostname; m_password = password; controllerInfo = CreateFromJson <MockControllerInfo>("{\"fwv\":207,\"tz\":16,\"ntp\":0,\"dhcp\":1,\"ip1\":192,\"ip2\":168,\"ip3\":1,\"ip4\":22,\"gw1\":192,\"gw2\":168,\"gw3\":1,\"gw4\":1,\"hp0\":80,\"hp1\":0,\"ar\":0,\"ext\":0,\"seq\":1,\"sdt\":0,\"mas\":0,\"mton\":0,\"mtof\":0,\"urs\":0,\"rso\":0,\"wl\":100,\"stt\":10,\"ipas\":0,\"devid\":0,\"con\":110,\"lit\":100,\"dim\":5,\"ntp1\":204,\"ntp2\":9,\"ntp3\":54,\"ntp4\":119,\"reset\":0}"); controllerInfo.SetTimeZone(5); programs = CreateFromJson <ProgramDetailsInfo>("{\"nprogs\":5,\"nboards\":1,\"mnp\":53,\"pd\":[[1,255,1,270,360,1439,600,8],[1,255,1,270,480,1439,600,16],[1,255,1,270,360,1439,480,32],[1,255,1,270,480,1439,480,64],[1,127,1,270,600,1439,720,128]]}"); var progs = programs.Programs as IList <Program>; progs[2].Duration = TimeSpan.FromMinutes(30); statuses = CreateFromJson <StationStatusInfo>("{\"sn\":[0,0,0,1,0,1,0,0],\"nstations\":8}"); statusInfo = CreateFromJson <StationInfo>("{\"snames\":[\"Raised beds\",\"Planters S\",\"Planters N\",\"Backyard lawn E\",\"Backyard lawn W\",\"Frontyard lawn\",\"Sidewalk lawn\",\"Planters E\"],\"masop\":[255],\"ignore_rain\":[128],\"maxlen\":16}"); }
/// <summary> /// 根据CURRENTData /// </summary> /// <param name="subcenter"></param> /// <returns></returns> public static List <StationStatusInfo> ListStationStatus(int subcenter) { List <StationStatusInfo> result = new List <StationStatusInfo>(); List <CurrentData> resultList = new List <CurrentData>(); List <CurrentData> currentdataList = new List <CurrentData>(); Dictionary <string, object> param = new Dictionary <string, object>(); Dictionary <string, string> paramInner = new Dictionary <string, string>(); paramInner["StationID"] = ""; string url = "http://127.0.0.1:8088/currentdata/getCurrentdata"; string jsonStr = HttpHelper.SerializeDictionaryToJsonString(paramInner); param["currentdata"] = jsonStr; try { string resultJson = HttpHelper.Post(url, param); currentdataList = (List <CurrentData>)HttpHelper.JsonDeserialize <List <CurrentData> >(resultJson, new List <CurrentData>()); } catch (Exception e) { Debug.WriteLine("查询实时数据失败"); throw e; } //1.获取当前所有的站点,缓存有则直接使用,没有则 if (StationHelper.stationInfoList == null || StationHelper.stationInfoList.Count == 0) { StationHelper.getStationInfoList(); } //2.将已有最新数据的站点信息获取,并放入DIC Dictionary <string, CurrentData> currentDataDic = new Dictionary <string, CurrentData>(); for (int i = 0; i < currentdataList.Count; i++) { if (int.Parse(currentdataList[i].CType) <= 10) { if (!currentDataDic.ContainsKey(currentdataList[i].StationID)) { currentDataDic[currentdataList[i].StationID] = currentdataList[i]; } } } //3.获取在线信息列表 //TODO //获取在线列表信息,默认全部是在线的,1代表在线 0代表离线 //4.根据站点信息 和 站点已有数据信息获取站点状态信息 //0代表数据警告 1代表数据正常 -1代表数据异常 //异常原因 0代表通讯故障 1代表电池欠压 2代表设备故障 for (int i = 0; i < StationHelper.stationInfoList.Count; i++) { if (StationHelper.stationInfoList[i].stationType == StationTypes.rain2Station) { continue; } StationStatusInfo stationStatusInfo = new StationStatusInfo(); //5.1 如果有数据 if (currentDataDic.ContainsKey(StationHelper.stationInfoList[i].stationId)) { DateTime dataTime = currentDataDic[StationHelper.stationInfoList[i].stationId].DataTime; int hours = (DateTime.Now - dataTime).Hours; stationStatusInfo.stationID = StationHelper.stationInfoList[i].stationId; stationStatusInfo.dataTime = currentDataDic[StationHelper.stationInfoList[i].stationId].DataTime; stationStatusInfo.stationName = StationHelper.stationInfoList[i].stationName; stationStatusInfo.voltage = currentDataDic[StationHelper.stationInfoList[i].stationId].Voltage; if (hours >= 2) { stationStatusInfo.onlineState = "1"; if (stationStatusInfo.onlineState == "0") { stationStatusInfo.errorReason = "0"; } else if (stationStatusInfo.voltage < (decimal)11.5) { stationStatusInfo.errorReason = "1"; } else { stationStatusInfo.errorReason = "2"; } stationStatusInfo.state = "-1"; } else if (hours >= 1) { stationStatusInfo.onlineState = "1"; if (stationStatusInfo.onlineState == "0") { stationStatusInfo.errorReason = "0"; } else if (stationStatusInfo.voltage < (decimal)11.5) { stationStatusInfo.errorReason = "1"; } else { stationStatusInfo.errorReason = "2"; } stationStatusInfo.state = "0"; } else { stationStatusInfo.onlineState = "1"; stationStatusInfo.errorReason = ""; stationStatusInfo.state = "1"; } } //如果无数据 else { stationStatusInfo.stationID = StationHelper.stationInfoList[i].stationId; stationStatusInfo.stationName = StationHelper.stationInfoList[i].stationName; stationStatusInfo.dataTime = null; stationStatusInfo.voltage = null; stationStatusInfo.onlineState = "1"; stationStatusInfo.errorReason = "2"; stationStatusInfo.state = "-1"; } result.Add(stationStatusInfo); } return(result); }