前言

本文主要讲解风扇,灯泡,舵机的使用及温度的获取,一些比较麻烦的问题,如如何绘制折线图,数据库的连接等等,将会在下一次统一讲解。

使用C#封装了部分API 部分API接口





如何理解

新大陆云平台平台ip 新大陆云平台介绍_舵机


基本组件:

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方法

/// <summary>
        /// 发送命令
        /// </summary>
        /// <param name="deviceId">设备ID</param>
        /// <param name="apiTag">传感标识名</param>
        /// <param name="data">
        /// 开关类:开=1,关=0,暂停=2 
        /// 家居类:调光灯亮度=0~254,RGB灯色度=2~239,窗帘、卷闸门、幕布打开百分比=3%~100%,红外指令=1(on)2(off)
        /// 其它:integer/float/Json/String类型值
        /// </param>
        /// <param name="token"></param>
        /// <returns></returns>
        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中找到相应的方法,如下

/// <summary>
        /// 批量查询设备最新数据 
        /// </summary>
        /// <param name="devids">设备ID用逗号隔开, 限制100个设备 </param>
        /// <param name="token"></param>
        /// <returns></returns>
        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数据,我们只要解析到想要的数据即可.

新大陆云平台平台ip 新大陆云平台介绍_API_02

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)实现,当前也能通过文本输入的方式,布局如下:

新大陆云平台平台ip 新大陆云平台介绍_新大陆云平台平台ip_03


操作的方法如下,发现其实也是跟控制风扇一样,传入相应的参数即可

//舵机控制用函数
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);
}





小结

其实,控制这些基础硬件的,对于如何控制还是比较简单的,但一旦涉及到原理方面,就会变得非常难;下一篇博客,主要讲解如何使用定时器,连接数据库,以及如何绘制折线图;具体原理方面,在下下篇博客会涉及。