应用侧借助SDK和ApiExplorer轻松优雅接入华为IoT平台

举报
神龙居市 发表于 2021/12/14 20:11:44 2021/12/14
【摘要】 之所以感觉到轻松优雅,归功于华为提供了开发帮助工具。2年前开始做过华为应用的对接,只能自己根据Api文档啃,每一步要自己实现。而今天,在Api基础上,华为IoT应用测提供了在线的Api Explorer,非常强大的Api实时测试,并且给出了各种语言的代码样例。再加上HuaweiCloud.SDK家族完善,IoT上就用到了HuaweiCloud.SDK.IoTDA这个包。在Api Explor...

之所以感觉到轻松优雅,归功于华为提供了开发帮助工具。2年前开始做过华为应用的对接,只能自己根据Api文档啃,每一步要自己实现。

而今天,在Api基础上,华为IoT应用测提供了在线的Api Explorer,非常强大的Api实时测试,并且给出了各种语言的代码样例。再加上HuaweiCloud.SDK家族完善,IoT上就用到了HuaweiCloud.SDK.IoTDA这个包。

在Api Explorer页面就能找到SDK安装说明。

以.Net为例,通过VS 2022的nuget可以轻松引入。在解决方案上右键菜单,选项nuget包管理。在随后的浏览框中输入HuaweiCloud.SDK.IoTDA。选择目标并安装。

以添加设备为例,我们先回到Api Explorer,找到AddDevice接口。清晰的看到罗列出来我们想要的接口输入参数,调用结果。更优雅的地方是,根据实际在线调用,还动态生成了SDK上的代码样例,只要轻松的复制粘贴就集成好了。

对于设备接入这一块,SDK的样例方式都是静态调用,在样例基础上少加修改,就是一个可以继续扩展的静态帮助方法类库到自己的项目中。

上述例子中,把ak,sk提炼处理常量使用,IoTDAClient的初始化,放到静态变量里面统一初始化,每个接口公用即可。

这里着重强调:

  1. 源代码的样例中缺少Product_Id ,构造函数中是可选,但是不输入会进行不下去。
  2. AddDevice这个接口App_Id也是必填,否则也会失败
  3. 我的代码中用了异步对象,和华为工程师沟通建议是异步
internal static class IoTHelper
    {
        const string _AK = "*******************";
        const string _SK = "*********************";
        const string _ProjectID = "***********************";

        private static readonly IoTDAAsyncClient _Client = Init();
        /// <summary>
        /// 内部初始化
        /// </summary>
        /// <returns></returns>
        private static IoTDAAsyncClient Init()
        {
            var config = HttpConfig.GetDefaultConfig();
            config.IgnoreSslVerification = true;
            var auth = new BasicCredentials(_AK, _SK, _ProjectID);

            var client = IoTDAAsyncClient.NewBuilder()
                    .WithCredential(auth)
                    .WithRegion(IoTDARegion.ValueOf("cn-north-4"))
                    .WithHttpConfig(config)
                    .Build();

            return client;
        }
        /// <summary>
        /// 添加IoT设备
        /// </summary>
        /// <param name="device"></param>
        /// <returns></returns>
        internal static async Task<AddDeviceResponse> AddDevice(string nodeId, string name)
        {
            var req = new AddDeviceRequest
            {
                Body = new AddDevice()
                {
                    AppId = "98500a1e2db04cf8989eb0bca66270dd",
                    ProductId = "619ceb7df8e4e6028810fae9",
                    DeviceName = string.IsNullOrWhiteSpace(name) ? nodeId : name,
                    NodeId = nodeId
                }
            };
          
            try
            {
                var resp = await _Client.AddDeviceAsync(req);
                var respStatusCode = resp.HttpStatusCode;

                return resp;
            }
            catch (RequestTimeoutException requestTimeoutException)
            {
                LogHelper.Error(requestTimeoutException);
            }
            catch (ServiceResponseException clientRequestException)
            {
                LogHelper.Error(clientRequestException);
            }
            catch (ConnectionException connectionException)
            {
                LogHelper.Error(connectionException);
            }

            return null;
        }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。