一.项目介绍
此项目是由朋友介绍,开发智慧渔业大数据展示系统。采样设备分布在鱼塘,由物流网将实际数据上传至服务器。本人从服务器上获取数据进行展示。
二.代码展示
1.HttpUitls类
public class HttpUitls
{
public static string Get(string Url)
{
System.Net.ServicePointManager.DefaultConnectionLimit = 512;
//System.GC.Collect();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Proxy = null;
request.KeepAlive = false;
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
request.AutomaticDecompression = DecompressionMethods.GZip;
HttpWebResponse response;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch
{
XtraMessageBox.Show("请连接互联网!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
Environment.Exit(0);
return null;
}
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
public static string Post(string Url, string Data, string Referer)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.Referer = Referer;
byte[] bytes = Encoding.UTF8.GetBytes(Data);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
Stream myResponseStream = request.GetRequestStream();
myResponseStream.Write(bytes, 0, bytes.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
}
2.Json实体类
//**************************************设备列表类**************************************
//http://open.sennor.net:8088/device/getDeviceList?secretKey=8A7F66AA55142AC3
public class DeviceListDatasItem
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public string deviceNumber { get; set; }
/// <summary>
///
/// </summary>
public string creatTime { get; set; }
/// <summary>
///
/// </summary>
public string connectType { get; set; }
/// <summary>
/// 未命名设备
/// </summary>
public string name { get; set; }
}
public class DeviceList
{
/// <summary>
///
/// </summary>
public int size { get; set; }
/// <summary>
///
/// </summary>
public string isLast { get; set; }
/// <summary>
///
/// </summary>
public List<DeviceListDatasItem> datas { get; set; }
/// <summary>
///
/// </summary>
public string state { get; set; }
/// <summary>
///
/// </summary>
public int page { get; set; }
}
//**************************************气象信息(获取风向、风速)**************************************
//http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7402F25
public class Data_Meteorology
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public string deviceNumber { get; set; }
/// <summary>
/// 未命名设备
/// </summary>
public string name { get; set; }
/// <summary>
/// 温度 / 湿度 / 光照度 / 大气压-k / PM2.5 / PM10 / 噪声 / 风速 / 风向 / 信号强度 / 错误码 / 版本号
/// </summary>
public string type { get; set; }
/// <summary>
/// 25.1 ℃ | 74.1 %RH | 37629 Lux | 95.4 Kpa | 23 ug/m3 | 33 ug/m3 | 66.3 dB | error1 | 正南 | 164 RSSI | 144 | 2 Version
/// </summary>
public string data { get; set; }
/// <summary>
///
/// </summary>
public string time { get; set; }
/// <summary>
///
/// </summary>
public string onLineState { get; set; }
}
public class Root_Meteorology
{
/// <summary>
/// 查询成功
/// </summary>
public string msg { get; set; }
/// <summary>
///
/// </summary>
public Data_Meteorology data { get; set; }
/// <summary>
///
/// </summary>
public string state { get; set; }
}
//主设备信息(获取->水温 / 溶解氧 / 水中PH / 氨氮)
//http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7406330
public class Data_Main
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public string deviceNumber { get; set; }
/// <summary>
/// 未命名设备
/// </summary>
public string name { get; set; }
/// <summary>
/// 水温 / 溶解氧 / 水中PH / 氨氮 / 信号强度 / 错误码 / 版本号
/// </summary>
public string type { get; set; }
/// <summary>
///
/// </summary>
public string data { get; set; }
/// <summary>
///
/// </summary>
public string time { get; set; }
/// <summary>
///
/// </summary>
public string onLineState { get; set; }
}
public class Root_Main
{
/// <summary>
/// 查询成功
/// </summary>
public string msg { get; set; }
/// <summary>
///
/// </summary>
public Data_Main data { get; set; }
/// <summary>
///
/// </summary>
public string state { get; set; }
}
//副设备信息(只获取水中电导率)
//http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB74122F1
public class Data_Assistant
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public string deviceNumber { get; set; }
/// <summary>
/// 未命名设备
/// </summary>
public string name { get; set; }
/// <summary>
/// 水温 / 溶解氧 / 水中PH / 氨氮 / 水中电导率 / 信号强度 / 错误码 / 版本号
/// </summary>
public string type { get; set; }
/// <summary>
///
/// </summary>
public string data { get; set; }
/// <summary>
///
/// </summary>
public string time { get; set; }
/// <summary>
///
/// </summary>
public string onLineState { get; set; }
}
public class Root_Assistant
{
/// <summary>
/// 查询成功
/// </summary>
public string msg { get; set; }
/// <summary>
///
/// </summary>
public Data_Assistant data { get; set; }
/// <summary>
///
/// </summary>
public string state { get; set; }
}
3.调用示例
private string[] GetNowData()
{
try
{
string[] str = new string[6];
string str_Temep, str_Pa, str_PH, str_AD, str_Wind, str_Water, str_O2;
#region 主设备
string url_Main = "http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7406330";
string getJson_Main = HttpUitls.Get(url_Main);
Root_Main rt_Main = JsonConvert.DeserializeObject<Root_Main>(getJson_Main);
string data_Main = rt_Main.data.data;
string[] datas_Main = data_Main.Split('|');
//水温 / 溶解氧 / 水中PH / 氨氮 / 信号强度 / 错误码 / 版本号
//26.2 ℃ | 11.38 mg/L | 9.25 pH | 0.3 mg/L | 152 RSSI | 133 | 2 Version
//str_Temep = datas_Main[0].Trim(' ');
str_O2 = datas_Main[1].Trim(' ');
//str_PH = datas_Main[2].Trim(' ');
//str_AD = datas_Main[3].Trim(' ');
#endregion
#region 副设备
string url_Assistant = "http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB74122F1";
string getJson_Assistant = HttpUitls.Get(url_Assistant);
//传入我们的实体类还有需要解析的JSON字符串这样就OK了。然后就可以通过实体类使用数据了。
Root_Assistant rt_Assistant = JsonConvert.DeserializeObject<Root_Assistant>(getJson_Assistant);
string data_Assistant = rt_Assistant.data.data;
string[] datas_Assistant = data_Assistant.Split('|');
//水温 / 溶解氧 / 水中PH / 氨氮 / 水中电导率 / 信号强度 / 错误码 / 版本号
//21 ℃ | error1 | 7.5 pH | 0.23 mg/L | 653 us/cm | 156 RSSI | 202 | 2 Version
str_Temep = datas_Assistant[0].Trim(' ');
//str_O2 = datas_Assistant[1].Trim(' ');
str_PH = datas_Assistant[2].Trim(' ');
str_AD = datas_Assistant[3].Trim(' ');
str_Water = datas_Assistant[4].Trim(' ');
#endregion
#region 气象设备
string url_Meteorology = " http://open.sennor.net:8088/device/getDeviceInfo?secretKey=8A7F66AA55142AC3&deviceNumber=171CB7402F25";
string getJson_Meteorology = HttpUitls.Get(url_Meteorology);
//传入我们的实体类还有需要解析的JSON字符串这样就OK了。然后就可以通过实体类使用数据了。
Root_Meteorology rt_Meteorology = JsonConvert.DeserializeObject<Root_Meteorology>(getJson_Meteorology);
string data_Meteorology = rt_Meteorology.data.data;
string[] datas_Meteorology = data_Meteorology.Split('|');
//温度 / 湿度 / 光照度 / 大气压-k / PM2.5 / PM10 / 噪声 / 风速 / 风向 / 信号强度 / 错误码 / 版本号
//25.1 ℃ | 74.1 %RH | 37629 Lux | 95.4 Kpa | 23 ug/m3 | 33 ug/m3 | 66.3 dB | error1 | 正南 | 164 RSSI | 144 | 2 Version
str_Pa = datas_Meteorology[3].Trim(' ');
str_Wind = datas_Meteorology[8].Trim(' ');
#endregion
label_Teme.Text = str_Temep;
label_Pa.Text = str_Pa;
label_PH.Text = str_PH;
label_AD.Text = str_AD;
label_Wind.Text = str_Wind;
label_Water.Text = str_Water;
label_O2.Text = str_O2;
str[0] = str_Temep;
str[1] = str_Pa;
str[2] = str_AD;
str[3] = str_PH;
str[4] = str_Water;
str[5] = str_O2;
return str;
}
catch
{
return null;
}
}
4.定时器循环展示数据
```csharp
private void timer_Tick(object sender, EventArgs e)
{
string str_timer = DateTime.Now.ToString("yyyy年MM月dd日 HH:mm:ss");
label_Time.Text = str_timer;
if (count >= 60 * 3)
{
count = 0;
DateTime argument = DateTime.Now;
string[] str = GetNowData();
if(str==null)
{
return;
}
#region 温度 26.2 ℃
{
SeriesPoint pointToUpdate1 = new SeriesPoint();
Random random = new Random();
DateTime minDate = argument.AddMinutes(-30);
int pointsToRemoveCount = 0;
foreach (SeriesPoint point in Series_WaterTemper.Points)
{
if (point.DateTimeArgument < minDate)
{
pointsToRemoveCount++;
}
if (pointsToRemoveCount < Series_WaterTemper.Points.Count)
{
pointsToRemoveCount--;
}
}
string temep = str[0].Substring(0, str[0].Length - 2);
double data = Convert.ToDouble(temep);
//判断阈值
JudgeValue(label_Warn_Temep, data, WarnValueClass.value_Temep_Up, WarnValueClass.value_Temep_Down);
pointToUpdate1 = new SeriesPoint(argument, data);
AddPoint(Series_WaterTemper, pointToUpdate1);
if (pointsToRemoveCount > 0)
{
Series_WaterTemper.Points.RemoveRange(0, pointsToRemoveCount);
}
SwiftPlotDiagram diagram = chartControl_Temep.Diagram as SwiftPlotDiagram;
if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
//if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
{
diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
//{ 2021 / 8 / 27 10:39:51}
}
}
#endregion
#region 氨氮含量
{
SeriesPoint pointToUpdate1 = new SeriesPoint();
Random random = new Random();
DateTime minDate = argument.AddMinutes(-30);
int pointsToRemoveCount = 0;
foreach (SeriesPoint point in Series_AD.Points)
{
if (point.DateTimeArgument < minDate)
{
pointsToRemoveCount++;
}
if (pointsToRemoveCount < Series_AD.Points.Count)
{
pointsToRemoveCount--;
}
}
string AD = str[2].Substring(0, str[2].Length - 5);
double data = Convert.ToDouble(AD);
//判断阈值
JudgeValue(label_Warn_AD, data, WarnValueClass.value_AD_Up, WarnValueClass.value_AD_Down);
pointToUpdate1 = new SeriesPoint(argument, data);
AddPoint(Series_AD, pointToUpdate1);
if (pointsToRemoveCount > 0)
{
Series_AD.Points.RemoveRange(0, pointsToRemoveCount);
}
SwiftPlotDiagram diagram = chartControl_AD.Diagram as SwiftPlotDiagram;
if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
//if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
{
diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
//{ 2021 / 8 / 27 10:39:51}
}
}
#endregion
#region PH
{
SeriesPoint pointToUpdate1 = new SeriesPoint();
Random random = new Random();
DateTime minDate = argument.AddMinutes(-30);
int pointsToRemoveCount = 0;
foreach (SeriesPoint point in Series_PH.Points)
{
if (point.DateTimeArgument < minDate)
{
pointsToRemoveCount++;
}
if (pointsToRemoveCount < Series_PH.Points.Count)
{
pointsToRemoveCount--;
}
}
string tmp = str[3].Substring(0, str[3].Length - 3);
double data = Convert.ToDouble(tmp);
//判断阈值
JudgeValue(label_Warn_PH, data, WarnValueClass.value_PH_Up, WarnValueClass.value_PH_Down);
pointToUpdate1 = new SeriesPoint(argument, data);
AddPoint(Series_PH, pointToUpdate1);
if (pointsToRemoveCount > 0)
{
Series_PH.Points.RemoveRange(0, pointsToRemoveCount);
}
SwiftPlotDiagram diagram = chartControl_PH.Diagram as SwiftPlotDiagram;
if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
//if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
{
diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
//{ 2021 / 8 / 27 10:39:51}
}
}
#endregion
#region 容氧量
{
SeriesPoint pointToUpdate1 = new SeriesPoint();
Random random = new Random();
DateTime minDate = argument.AddMinutes(-30);
int pointsToRemoveCount = 0;
foreach (SeriesPoint point in Series_O2.Points)
{
if (point.DateTimeArgument < minDate)
{
pointsToRemoveCount++;
}
if (pointsToRemoveCount < Series_O2.Points.Count)
{
pointsToRemoveCount--;
}
}
string tmp = str[5].Substring(0, str[5].Length - 5);
double data = Convert.ToDouble(tmp);
//判断阈值
JudgeValue(label_Warn_O2, data, WarnValueClass.value_O2_Up, WarnValueClass.value_O2_Down);
pointToUpdate1 = new SeriesPoint(argument, data);
AddPoint(Series_O2, pointToUpdate1);
if (pointsToRemoveCount > 0)
{
Series_O2.Points.RemoveRange(0, pointsToRemoveCount);
}
SwiftPlotDiagram diagram = chartControl_O2.Diagram as SwiftPlotDiagram;
if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
//if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
{
diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
//{ 2021 / 8 / 27 10:39:51}
}
}
#endregion
#region 水导电率
{
SeriesPoint pointToUpdate1 = new SeriesPoint();
Random random = new Random();
DateTime minDate = argument.AddMinutes(-30);
int pointsToRemoveCount = 0;
foreach (SeriesPoint point in Series_Water.Points)
{
if (point.DateTimeArgument < minDate)
{
pointsToRemoveCount++;
}
if (pointsToRemoveCount < Series_Water.Points.Count)
{
pointsToRemoveCount--;
}
}
//653 us/cm
string tmp = str[4].Substring(0, str[4].Length - 6);
double data = Convert.ToDouble(tmp);
//判断阈值
JudgeValue(label_Warn_Water, data, WarnValueClass.value_Water_Up, WarnValueClass.value_Water_Down);
pointToUpdate1 = new SeriesPoint(argument, data);
AddPoint(Series_Water, pointToUpdate1);
if (pointsToRemoveCount > 0)
{
Series_Water.Points.RemoveRange(0, pointsToRemoveCount);
}
SwiftPlotDiagram diagram = chartControl_Water.Diagram as SwiftPlotDiagram;
if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
//if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
{
diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
//{ 2021 / 8 / 27 10:39:51}
}
}
#endregion
#region 气压
{
SeriesPoint pointToUpdate1 = new SeriesPoint();
Random random = new Random();
DateTime minDate = argument.AddMinutes(-30);
int pointsToRemoveCount = 0;
foreach (SeriesPoint point in Series_Pa.Points)
{
if (point.DateTimeArgument < minDate)
{
pointsToRemoveCount++;
}
if (pointsToRemoveCount < Series_Pa.Points.Count)
{
pointsToRemoveCount--;
}
}
string tmp = str[1].Substring(0, str[1].Length - 4);
double data = Convert.ToDouble(tmp);
//判断阈值
JudgeValue(label_Warn_Pa, data, WarnValueClass.value_Pa_Up, WarnValueClass.value_Pa_Down);
pointToUpdate1 = new SeriesPoint(argument, data);
AddPoint(Series_Pa, pointToUpdate1);
if (pointsToRemoveCount > 0)
{
Series_Pa.Points.RemoveRange(0, pointsToRemoveCount);
}
SwiftPlotDiagram diagram = chartControl_Pa.Diagram as SwiftPlotDiagram;
if (diagram != null)//&& diagram.AxisX.DateTimeMeasureUnit == DateTimeMeasurementUnit.Millisecond)
//if (diagram != null && diagram.AxisX.MeasureUnit == DateTimeMeasureUnit.Millisecond)
{
diagram.AxisX.VisualRange.SetMinMaxValues(minDate, argument);
//{ 2021 / 8 / 27 10:39:51}
}
}
#endregion
}
count++;
}