# CsharpNlecloud
**Repository Path**: youryouth/CsharpNlecloud
## Basic Information
- **Project Name**: CsharpNlecloud
- **Description**: 封装了新大陆的一些API(C#)
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 1
- **Created**: 2020-08-04
- **Last Updated**: 2021-03-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 更新说明
于2020-8-5号更新
# 使用说明
项目工程需要添加NLECloudSDK的引用
新建一个类库Device,把代码复制,把缺少的引用添加。
封装的API使用了Console,可在项目右键属性->输出类型->改成控制台应用程序
# 初始化Cloud
```csh
//传入设备ID.
Cloud cloud = new Cloud("90596");
```
在登录界面中如果使用了UserLogin,那么在其他窗体中,可以如下使用:
```cs
Cloud cloud = new Cloud();
cloud.cmds("xxx","xxx");
...
...
```
# 用户登录
```csharp
///用户名
///密码
///true表示成功,false表示失败
///
bool UserLogin(String userName, String passWord);
```
例如:
```cs
bool flag = cloud.UserLogin("xxxx","xxxx");
```
# 上传传感数据
```cs
///sensordata结构体
///true表示成功,false表示设备不在线或传感器设备出错.
///
///上传传感数据
bool AddSensorData(sensorData sensordata);
bool AddSensorDatas(List sensorDatas);
```
例如:
上传一条数据,先声明结构体sensorData
```cs
var data = new sensorData
{
apiTag = "Lux",
time = "2020-08-02 01:01:01",
value = "59"
};
bool flag = cloud.AddSensorData(data);
```
上传多条数据
```cs
List data = new List()
{
new sensorData
{
apiTag = "Lux",
time = "2020-08-02 01:01:01",
value = "59"
},
new sensorData
{
apiTag = "Lux",
time = "2020-08-02 01:01:01",
value = "99"
}
};
bool flag = cloud.AddSensorDatas(data);
```
# 随机上传传感数据
```cs
///
/// 随机上传传感数据
///
/// 标识符数组
/// 随机最小值
/// 随机最大值
/// 默认5条
/// true表示成功,false表示失败
public bool RandomAddSensorDatas(String[] apiTags, int[] minValue, int[] maxValue, int count=5)
```
例如:
```cs
String[] apiTags = {"Lux","Humidity"};
int[]minValue = {0,10};
int[]maxValue = {1,20};
RandomAddSensorDatas(apiTags,minValue,maxValue);
RandomAddSensorDatas(apiTags,minValue,maxValue,10);
```
# 控制命令
```cs
///传感器标识符
///数据
///true表示成功,false表示设备不在线或传感器设备出错.
///
bool cmds(String apiTag,object data)
```
例如:
```cs
bool flag = cloud.cmds("Led","1");
```
# 模糊查询传感数据
```cs
///传感器标识符
///排序方式
///获取传感数据,会上抛异常,使用try..catch
///
///一个列表.value表示数据,time表示时间
///
List> GetSensorDatas(String apiTag,String sort="DESC")
```
例如:
```cs
List> sensorInfos = cloud.GetSensorDatas("Lux");
try{
foreach (Dictionary dictionary in sensorInfos)
{
Console.WriteLine(dictionary["value"], dictionary["time"]);
}
}catch(Exception){
Console.WriteLine("无此传感器");
}
```
# 设备模拟在线
```cs
///设备标识符
///秘钥
///true表示成功,false表示设备不在线或传感器设备出错.
///
///设备模拟在线
public bool DeviceOnline(String deviceTag,String secretKey)
```
例如:
```cs
bool flag = cloud.DeviceOnline("SmartHomeLucky", "4094ef2dbebf44b78601a54d2a39c451");
```
### 发送数据
```cs
///sensorData结构体成员
///true表示成功,false表示设备不在线或传感器设备出错.
///
///设备模拟发送数据
public bool SocketSendData(sensorData sensor)
```
例如:
```cs
var data = new sensorData()
{
apiTag = "Lux",
time = "2020-08-03 08:01:01",
value = "400"
};
cloud.SocketSendData(data);
```
# 查询单个传感器
```cs
///
/// 查询单个传感器
///
///
///
public String GetSensorInfo(String apiTag)
```
例如:
```cs
cloud.GetSensorInfo("Lux");
```
# 图表控件
**在nuget包中下载livechart.**
在xaml中声明
```xml
```
[](https://imgchr.com/i/aBqBrT)
在cs中
```cs
///
/// chart.xaml 的交互逻辑
///
public partial class chart : Page
{
public SeriesCollection SeriesCollection { get; set; }
public List Labels { get; set; }
private double[] _trend;
private double[] temp = { 0,0,0,0,0,0 };
private Cloud cloud = new Cloud();
private String[] apiTags = { "Lux", "Humidity","Temperature" };
public chart()
{
InitializeComponent();
//实例化一条折线图
SeriesCollection = new SeriesCollection { };
_trend = new double[3];
for (var i = 0; i < apiTags.Length; i++)
{
LineSeries mylineseries = new LineSeries();
//设置折线的标题
mylineseries.Title = apiTags[i];
//折线图直线形式
mylineseries.LineSmoothness = 0;
//折线图的无点样式
mylineseries.PointGeometry = null;
//添加横坐标
Labels = new List { "0", "0", "0", "0", "0", "0" };
//添加折线图的数据
mylineseries.Values = new ChartValues(temp);
SeriesCollection.Add(mylineseries);
_trend[i] = i;
}
linestart();
DataContext = this;
}
//连续折线图的方法
public void linestart()
{
Task.Run(() =>
{
while (true)
{
read();
Thread.Sleep(2000);
//通过Dispatcher在工作线程中更新窗体的UI元素
Application.Current.Dispatcher.Invoke(() =>
{
//更新横坐标时间
Labels.Add(DateTime.Now.ToString());
Labels.RemoveAt(0);
//更新纵坐标数据
for(var i = 0; i < apiTags.Length; i++)
{
SeriesCollection[i].Values.Add(_trend[i]);
SeriesCollection[i].Values.RemoveAt(0);
}
});
}
});
}
private void read()
{
for (var i = 0; i < apiTags.Length; i++)
{
_trend[i] = Convert.ToDouble(cloud.GetSensorInfo(apiTags[i]));
}
//随机上报数据
List sensorDatas = new List();
var r = new Random();
for (var i = 0; i < apiTags.Length; i++)
{
sensorData sensor = new sensorData()
{
apiTag = apiTags[i],
value = r.Next(30, 40).ToString(),
time = DateTime.Now.ToString()
};
sensorDatas.Add(sensor);
}
cloud.AddSensorDatas(sensorDatas);
}
```
[](https://imgchr.com/i/aBOODf)