- 最新动态
- 功能总览
- 服务公告
- 计费说明
- 产品介绍
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
-
API参考
- 应用侧API参考
- 设备侧MQTT/MQTTS接口参考
- 设备侧HTTPS接口参考
- 设备侧LwM2M接口参考
- 安全隧道WebSocket接口参考
- 模组AT指令参考
- 修订记录
- SDK参考
- 场景代码示例
-
常见问题
- 热门问题
-
方案咨询
- 连接IoT平台的业务场景有哪些?
- 设备管理服务和设备接入服务合一后的差异点是什么?
- IAM子用户或子项目是否可以开通物联网平台服务?
- 物联网平台支持在华为云的哪些区域开通?
- 华为是否提供模组/硬件终端/应用软件等?
- IAM用户访问API提示没有权限?(是否区分版本?)
- 创建规则或者设置资源文件存储时候提示赋予Security Administrator权限
- 物联网平台设置默认资源空间的规则是什么?
- 设备接入服务如何获取设备数据?
- 物联网平台的资源空间和设备可以无限创建吗?
- 物联网平台支持批量注册设备吗?
- 物联网平台对应用侧和设备侧在开发或使用时有限制吗?
- 物联网平台支持的DTLS加密算法有哪些?
- 物联网平台支持二进制大小端模式切换吗?
- 什么是NB-IoT?
- 物联网平台支持的硬件架构和使用的相关组件有哪些?
- 如何获取平台接入地址?
- 设备集成相关问题
- 设备侧SDK相关问题
- 设备发放相关问题
- LWM2M/CoAP接入相关问题
- MQTT接入相关问题
- 泛协议接入相关问题
- 物模型相关问题
- 消息通信相关问题
- 订阅推送相关问题
- 编解码插件相关问题
- OTA升级相关问题
- 应用集成相关问题
- 实例管理相关问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
结合函数服务通过自定义策略发放证书认证的设备
场景说明
本文以MQTT.fx的设备模拟器替代真实的设备,结合函数工作流服务(FunctionGraph),带您快速体验结合函数服务使用设备发放服务,通过自定义策略将设备发放到指定的物联网平台(设备接入实例)上。
整体流程
使用证书认证的设备采用自定义策略发放设备操作流程如下图所示。
通过自定义策略发放设备功能流程图如下图所示。
函数开发
自定义策略的函数代码编写指南参见创建自定义策略函数。
此处以Java语言为例,如何编写Java语言的函数,参见函数工作流 FunctionGraph > 开发指南> 如何开发函数> Java函数开发指南。
- 创建函数工程,编写函数。
关键流程代码参考如下:
package com.huawei.demo; import com.huawei.demo.common.logger.DefaultLogger; import com.huawei.demo.model.AccessPointPara; import com.huawei.demo.model.FunctionGraphPara; import com.huawei.demo.model.TdpFuncResult; import com.huawei.services.runtime.Context; import java.util.Optional; /** * 实现该抽象类。 * WARNING:{@link #apiHandle(FunctionGraphPara, Context)} 该方法必须在子类中定义,否则函数无法触发该函数接口!!! * <pre> * {@code * @Override * public TdpFuncResult apiHandle(FunctionGraphPara para, Context context) { * return super.apiHandle(para, context); * } * } * </pre> */ public abstract class TdpFunction { protected static final DefaultLogger LOGGER = new DefaultLogger(TdpFunction.class); /** * 函数定义 */ public TdpFuncResult apiHandle(FunctionGraphPara para, Context context) { // 获取日志 DefaultLogger.init(Optional.ofNullable(context) .map(Context::getLogger) .orElse(null)); // 校验入参 TdpFuncResult result = checkPara(para, context); if (result != null) { return result; } // 确定接入点 AccessPointPara accessPointPara = determineAccessPoint(para); // 发放设备 result = provisionDevice(para, accessPointPara); LOGGER.info("result:{}", result); return result; } /** * 校验入参 */ protected abstract TdpFuncResult checkPara(FunctionGraphPara para, Context context); /** * 从备选的接入点中选择合适的接入点 */ protected abstract AccessPointPara determineAccessPoint(FunctionGraphPara para); /** * 调用设备发放的发放接口发放设备 */ protected abstract TdpFuncResult provisionDevice(FunctionGraphPara para, AccessPointPara accessPointPara); }
- 打包函数,上传代码。
如不依赖第三方Jar包,可将工程打包成一个单独的Jar包,如下图所示。
如工程依赖第三方Jar包,则需将工程Jar包和所有第三方Jar包打包成一个zip包,如下图所示。
进入函数工作流服务控制台,创建函数。函数执行入口以[包名].[类名].[执行函数名]格式填写。
- 配置测试事件,调试函数。
创建并配置测试事件,调试函数,如下图所示。
控制台开发
登录设备发放控制台。
设备触发放流程
- 配置连接参数。
证书认证设备如何使用MQTT.fx接入设备发放请参见MQTT X509证书认证接入示例。
MQTT Broker Profile Settings
Broker Address填写设备发放设备侧接入地址,Broker Port填写设备发放设备侧接入端口,Client ID按规则([设备ID]_0_0_[10位日期时间])填写,具体规则参见MQTT CONNECT连接鉴权。
SSL/TLS
由于设备使用证书认证方式,“Enable SSL/TLS”勾选开启,选择Self signed certificates,CA File填写用于签发设备发放设备侧接入SSL/TLS通道证书的CA证书路径,Client Certificate File和Client Key File填写使用已上传并验证了的CA证书签发的设备证书和设备证书私钥路径。如证书为PEM格式,请勾选“PEM Formatted”。
具体配置请参见下图:
“User Credentials”的“User Name”字段填写设备ID。具体配置参见下图:
- 连接鉴权。
连接参数配置完成后,单击“Connnect”。若右上角圆圈呈现绿色,说明设备已成功上设备发放平台。
- 订阅接收引导消息Topic。
参照设备接收引导信息填写用于接收引导地址的Topic,单击“Subscribe”订阅该Topic。若订阅Topic填写框下方的已订阅Topic列表中存在该Topic,则订阅成功。
- 发送请求引导消息。
参照设备请求引导消息填写发送请求引导消息的Topic,单击“Publish”向该Topic推送消息。
查看订阅的Topic,很快在订阅Topic下,接收到了目的接入点的设备侧接入地址。
进入函数服务控制台,通过查看使用的函数的日志,可看出自定义策略发放设备过程中,该函数被成功触发且正确执行。
进入到设备发放控制台,可查看到一条该设备的发放记录。
图5 设备详情页至此,您已成功完成了,使用设备发放和函数服务将证书认证的设备通过自定义策略触发函数将设备发放到指定的设备接入实例中。