设备接入 IoTDA
设备接入 IoTDA
- 最新动态
- 功能总览
- 服务公告
- 计费说明
- 产品介绍
- 快速入门
- 用户指南
- 最佳实践
- 开发指南
-
API参考
- 应用侧API参考
- 设备侧MQTT/MQTTS接口参考
- 设备侧HTTPS接口参考
- 设备侧LwM2M接口参考
- 安全隧道WebSocket接口参考
- 模组AT指令参考
- 修订记录
- SDK参考
- 场景代码示例
-
常见问题
- 热门问题
-
方案咨询
- 连接IoT平台的业务场景有哪些?
- 设备管理服务和设备接入服务合一后的差异点是什么?
- IAM子用户或子项目是否可以开通物联网平台服务?
- 物联网平台支持在华为云的哪些区域开通?
- 华为是否提供模组/硬件终端/应用软件等?
- IAM用户访问API提示没有权限?(是否区分版本?)
- 创建规则或者设置资源文件存储时候提示赋予Security Administrator权限
- 物联网平台设置默认资源空间的规则是什么?
- 设备接入服务如何获取设备数据?
- 物联网平台的资源空间和设备可以无限创建吗?
- 物联网平台支持批量注册设备吗?
- 物联网平台对应用侧和设备侧在开发或使用时有限制吗?
- 物联网平台支持的DTLS加密算法有哪些?
- 物联网平台支持二进制大小端模式切换吗?
- 什么是NB-IoT?
- 物联网平台支持的硬件架构和使用的相关组件有哪些?
- 如何获取平台接入地址?
- 设备集成相关问题
- 设备侧SDK相关问题
- 设备发放相关问题
- LWM2M/CoAP接入相关问题
- MQTT接入相关问题
- 泛协议接入相关问题
- 物模型相关问题
- 消息通信相关问题
- 订阅推送相关问题
- 编解码插件相关问题
- OTA升级相关问题
- 应用集成相关问题
- 实例管理相关问题
- 视频帮助
- 文档下载
- 通用参考
本文导读
链接复制成功!
$oc开头自定义Topic通信使用说明
使用流程&操作步骤
图1 $oc开头自定义topic通信
- 创建产品:访问设备接入服务,单击“管理控制台”进入设备接入控制台。选择您的实例,单击实例卡片进入。参考创建产品流程。
- 设定$oc开头自定义Topic。在产品详情页中创建一个自定义Topic,Topic前缀固定为:$oc/devices/{device_id}/user/。
- 选择MQTT协议类产品,在产品详情页中,选择“Topic管理 > 自定义Topic”,单击“新增自定义Topic”。
图2 Topic管理-自定义Topic
- 在弹出的页面中,选择设备操作权限,填写Topic名称。
图3 Topic管理-新增自定义Topic
表1 页面参数说明 参数名称
描述
Topic名称
Topic的前缀已经规定好,固定为:$oc/devices/{device_id}/user/,其中{device_id}为标识符变量,实际发布和订阅过程中需要替换为实际的设备ID。用户自定义Topic的格式必须以“/”进行分层。
长度限制为1-64位,只允许输入数字、大小写字母、下划线、斜杠符。其中,斜杠符不能连续。
说明:
自定义Topic不支持自定义变量,例如$oc/devices/{device_id}/user/setting/{type},其中的{type}为自定义变量,当前不支持这种使用方式。
设备操作权限
描述
关于该Topic的描述。
- 单击“确定”,完成新增自定义Topic。自定义Topic添加成功后,您可以在自定义Topic列表执行修改和删除操作。
- 选择MQTT协议类产品,在产品详情页中,选择“Topic管理 > 自定义Topic”,单击“新增自定义Topic”。
- 创建设备:在该产品下创建设备。创建的设备将继承产品设定的自定义Topic。详情可见:创建设备流程。
- 设备订阅/发布:查看使用自定义Topic进行通信的最佳实践,了解自定义Topic的发布与订阅的使用。
设备侧JAVA SDK使用示例
设备端可以通过集成华为云IoT提供的设备端SDK快速连接华为云IoTDA,并进行消息上报。以下示例为通过JAVA SDK实现设备连接到华为云IoTDA进行发布、订阅自定义Topic。以订阅"$oc/devices/" + device.getDeviceId() + "/user/wpy"为例。
- 配置设备侧SDK的Maven依赖。
<dependency> <groupId>com.huaweicloud</groupId> <artifactId>iot-device-sdk-java</artifactId> <version>1.1.4</version> </dependency>
- 配置设备侧SDK,设备连接参数。
//加载iot平台的ca证书,获取链接参考:https://support.huaweicloud.com/devg-iothub/iot_02_1004.html#section3 URL resource = MessageSample.class.getClassLoader().getResource("ca.jks"); File file = new File(resource.getPath()); //注意格式为:ssl://域名信息:端口号。 //域名获取方式:登录华为云IoTDA控制台左侧导航栏“总览”页签,在选择的实例基本信息中,单击“接入信息”。选择8883端口对应的接入域名。 String serverUrl = "ssl://localhost:8883"; //在IoT平台创建的设备ID。 String deviceId = "deviceId"; //设备ID对应的密钥。 String deviceSecret = "secret"; //初始化设备连接 IoTDevice device = new IoTDevice(serverUrl, deviceId, deviceSecret, file); if (device.init() != 0) { return; }
- 上报设备消息:
device.getClient().publishRawMessage(new RawMessage( "$oc/devices/" + device.getDeviceId() + "/user/wpy", "hello", 1), new ActionListener() { @Override public void onSuccess(Object context) { System.out.println("reportDeviceMessage success: "); } @Override public void onFailure(Object context, Throwable var2) { System.out.println("reportDeviceMessage fail: " + var2); } });
- 订阅topic:
device.getClient().subscribeTopic(new RawMessage("$oc/devices/" + device.getDeviceId() + "/user/wpy", new ActionListener() { @Override public void onSuccess(Object context) { System.out.println("subscribeTopic success: "); } @Override public void onFailure(Object context, Throwable var2) { System.out.println("subscribeTopic fail: " + var2); } }, 0);
父主题: 自定义Topic通信