本文主要讲解风扇,灯泡,舵机的使用及温度的获取,一些比较麻烦的问题,如如何绘制折线图,数据库的连接等等,将会在下一次统一讲解。
基本组件:
label,TextBox,Button等,由于C#进行客户端开发,我们能够比较容易的做出对应的界面(拖控件),这里我就不讲解了.
先查看官方给的demo,在BLL下的MainBusiess.cs类中,找到对应的防御类(如果没有,也没关系,这个类只是对底层代码做了一个封装而已)找到onDefense()方法
public static void onDefense()//防御
{
var qry = SDK.Cmds(10439, "defense", 1, TempInfo.Token);// Cmds(int deviceId, string apiTag, object data, string token = null)
}
我们能够发现调用了SDK类中的Cmds方法,其中SDK使我们自己声明的一个NLECloudAPI类实例,如下
static NLECloudAPI SDK = new NLECloudAPI(TempInfo.API_HOST);//获取地址信息(云接口主机地址)
那么我们查看NLECloudAPI中的Cmds方法
///
/// 发送命令
///
/// 设备ID
/// 传感标识名
///
/// 开关类:开=1,关=0,暂停=2
/// 家居类:调光灯亮度=0~254,RGB灯色度=2~239,窗帘、卷闸门、幕布打开百分比=3%~100%,红外指令=1(on)2(off)
/// 其它:integer/float/Json/String类型值
///
///
///
public Result Cmds(Int32 deviceId, String apiTag, Object data, String token = null)
{
var result = new Result();
var vry = PrimaryKeyVerify(deviceId , ref token); //验证设备跟秘钥是否对应
if (!vry.IsSuccess())
{
vry.CopyTo(result);
return result;
}
//1、先定义该API接口路径,可以从http://api.nlecloud.com/页面的得知
String apiPath = String.Format("{0}/{1}", mApiHost, NLECloudAPIUrl.CmdUrl);
apiPath += string.Format("?{0}&{1}", "deviceId=" + deviceId, "apiTag=" + apiTag);
//2、根据该API接口的请求参数中 得知需要创建个URI Parameters String类型参数,所以该参数直接跟在apiPath中
//apiPath = apiPath.Replace("{deviceid}", deviceId.ToString());//将API地址中的{projectid}替换成真实项目ID
//3、由于调用该API需要Token,所以我们定义了一个通用的对象HttpReqEntity,在AccessToken当成头部请求信息提交过去
HttpReqEntity req = new HttpReqEntity();
req.Method = HttpMethod.POST;
req.Datas = JsonFormatter.Serialize(data);
req.Headers.Add("AccessToken", token);
//4、定义该API接口返回的对象
result = RequestAPIHelper.RequestServer<HttpReqEntity>(apiPath, req);
return result;
}
发现,控制风扇非常简单,只要给出相应的设备Id,标识符,值和Token;控制灯泡的原理也一样,这里不做赘述。
其实实际上就是获取相应的传感器数据,在SDK中找到相应的方法,如下
///
/// 批量查询设备最新数据
///
/// 设备ID用逗号隔开, 限制100个设备
///
///
public ResultMsg<IEnumerable<DeviceSensorDataDTO>> GetDevicesDatas(String devids, String token = null)
{
var result = new ResultMsg<IEnumerable<DeviceSensorDataDTO>>();
var vry = TokenVerify( ref token);
if (!vry.IsSuccess())
{
vry.CopyTo(result);
return result;
}
//1、先定义该API接口路径,可以从http://api.nlecloud.com/页面的得知
String apiPath = String.Format("{0}/{1}", mApiHost, NLECloudAPIUrl.DevicesDatasUrl);
//2、根据该API接口的请求参数中 得知需要创建个URI Parameters String类型参数,所以该参数直接跟在apiPath中
//apiPath = apiPath.Replace("{projectId}", projectId.ToString());//将API地址中的{projectid}替换成真实项目ID
apiPath += string.Format("?{0}", "devIds=" + devids);
//3、由于调用该API需要Token,所以我们定义了一个通用的对象HttpReqEntity,在AccessToken当成头部请求信息提交过去
HttpReqEntity req = new HttpReqEntity();
req.Method = HttpMethod.GET;
req.Headers.Add("AccessToken", token);
//4、定义该API接口返回的对象
result = RequestAPIHelper.RequestServer<HttpReqEntity, IEnumerable<DeviceSensorDataDTO>>(apiPath, req);
if (result.IsSuccess() && result.ResultObj != null)
{
foreach (DeviceSensorDataDTO p in result.ResultObj)
{
if (p.Datas != null)
{
foreach (SensorDataDTO w in p.Datas)
{
w.Value = ValueConvertToByteAry(w.Value);
}
}
}
}
return result;
}
我们可以看出,入口参数只有设备id跟Token,那么肯定获取的是所以传感器的数据,那么如何从这么多数据中获取到相应的数据呢?使用API模拟测试一下,是一个jsoin数据,我们只要解析到想要的数据即可.
qry1 = Data.SDK.GetDevicesDatas(Data.devIds, Data.Token);
lbl_NowTemperature.Content = qry1.ResultObj[0].Datas[5].Value.ToString();//获取温度
tem = int.Parse(qry1.ResultObj[0].Datas[11].Value.ToString()); //6 ctrl灯...11是风扇
将该操作与上述对应,那么我们就能够明白了。
由于舵机是要给一个角度,这里我们用拖动条(Slider)实现,当前也能通过文本输入的方式,布局如下:
操作的方法如下,发现其实也是跟控制风扇一样,传入相应的参数即可
//舵机控制用函数
public static void CtrlDir1(int a)
{
var qry = SDK.Cmds(10439, "steeringengine1", a, TempInfo.Token);
}
public static void CtrlDir0(int b)
{
var qry = SDK.Cmds(10439, "steeringengine0", b, TempInfo.Token);
}
其实,控制这些基础硬件的,对于如何控制还是比较简单的,但一旦涉及到原理方面,就会变得非常难;下一篇博客,主要讲解如何使用定时器,连接数据库,以及如何绘制折线图;具体原理方面,在下下篇博客会涉及。