应用侧借助SDK和ApiExplorer轻松优雅接入华为IoT平台
【摘要】 之所以感觉到轻松优雅,归功于华为提供了开发帮助工具。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的初始化,放到静态变量里面统一初始化,每个接口公用即可。
这里着重强调:
- 源代码的样例中缺少Product_Id ,构造函数中是可选,但是不输入会进行不下去。
- AddDevice这个接口App_Id也是必填,否则也会失败
- 我的代码中用了异步对象,和华为工程师沟通建议是异步
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)