更新时间:2024-07-29 GMT+08:00

广播通信使用示例

Java SDK使用示例

本文介绍如何使用JAVA SDK进行广播通信的开发。

开发环境要求

本示例使用的开发环境为JDK 1.8及以上版本。

配置应用侧SDK

  1. 配置Maven依赖。
    <dependency>
        <groupId>com.huaweicloud.sdk</groupId>
        <artifactId>huaweicloud-sdk-core</artifactId>
        <version>[3.0.40-rc, 3.2.0)</version>
    </dependency>
    <dependency>
        <groupId>com.huaweicloud.sdk</groupId>
        <artifactId>huaweicloud-sdk-iotda</artifactId>
        <version>[3.0.40-rc, 3.2.0)</version>
    </dependency>
  2. 下发广播消息完整样例如下,topic必须为“$oc/broadcast/”前缀,消息内容需要使用BASE64编码。
    public class BroadcastMessageSolution {
        // REGION_ID:如果是上海一,请填写"cn-east-3";如果是北京四,请填写"cn-north-4";如果是华南广州,请填写"cn-south-4"
        private static final String REGION_ID = "<YOUR REGION ID>";
        // ENDPOINT:请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。
        private static final String ENDPOINT = "<YOUR ENDPOINT>";
        // 标准版/企业版:需自行创建Region对象
        public static final Region REGION_CN_NORTH_4 = new Region(REGION_ID, ENDPOINT);
        public static void main(String[] args) {
            String ak = "<YOUR AK>";
            String sk = "<YOUR SK>";
            String projectId = "<YOUR PROJECTID>";
            // 创建认证
            ICredential auth = new BasicCredentials().withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE)
                .withAk(ak)
                .withSk(sk)
                .withProjectId(projectId);
            // 创建IoTDAClient实例并初始化
            IoTDAClient client = IoTDAClient.newBuilder().withCredential(auth)
                // 基础版:请选择IoTDARegion中的Region对象
                //.withRegion(IoTDARegion.CN_NORTH_4)
                // 标准版/企业版:需自行创建Region对象
                .withRegion(REGION_CN_NORTH_4).build();
            // 实例化请求对象
            BroadcastMessageRequest request = new BroadcastMessageRequest();
            DeviceBroadcastRequest body = new DeviceBroadcastRequest();
            body.withMessage(Base64.getEncoder().encodeToString("hello".getBytes()));
            body.withTopicFullName("$oc/broadcast/test");
            request.withBody(body);
            try {
                BroadcastMessageResponse response = client.broadcastMessage(request);
                System.out.println(response.toString());
            } catch (ConnectionException e) {
                e.printStackTrace();
            } catch (RequestTimeoutException e) {
                e.printStackTrace();
            } catch (ServiceResponseException e) {
                e.printStackTrace();
                System.out.println(e.getHttpStatusCode());
                System.out.println(e.getRequestId());
                System.out.println(e.getErrorCode());
                System.out.println(e.getErrorMsg());
            }
        }
    }
    表1 参数说明

    参数

    说明

    ak

    您的华为云账号访问密钥ID(Access Key ID)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的 AK/SK。更多信息请查看访问密钥

    sk

    您的华为云账号秘密访问密钥(Secret Access Key)。

    projectId

    项目ID。获取方法请参见 获取项目ID

    IoTDARegion.CN_NORTH_4

    请替换为您要访问的物联网平台的区域,当前物联网平台可以访问的区域,在SDK代码IoTDARegion.java中已经定义。

    您可以在控制台上查看当前服务所在区域名称,区域名称、区域和终端节点的对应关系,具体步骤请参考地区和终端节点

    REGION_ID

    如果是上海一,请填写"cn-east-3";如果是北京四,请填写"cn-north-4";如果是华南广州,请填写"cn-south-4"

    ENDPOINT

    请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。

配置设备侧SDK

  1. 配置设备侧SDK的Maven依赖。
    <dependency>
    	<groupId>com.huaweicloud</groupId>
    	<artifactId>iot-device-sdk-java</artifactId>
    	<version>1.1.4</version>
    </dependency>
  2. 配置设备侧SDK,设备连接参数。
    //加载iot平台的ca证书,获取连接参考:https://support.huaweicloud.com/intl/zh-cn/devg-iothub/iot_02_1004.html
    URL resource = BroadcastMessageSample.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;
    }
  3. 订阅广播Topic,广播Topic需使用“$oc/broadcast/”前缀。
    device.getClient().subscribeTopic("$oc/broadcast/test", null, rawMessage -> {
        log.info(" on receive message topic : {} , payload : {}", rawMessage.getTopic(),
            new String(rawMessage.getPayload()));
        rawMessage.getPayload();
    }, 0);

测试验证

先运行设备侧 SDK代码,使设备上线,并订阅广播topic。然后运行应用侧SDK代码,调用broadcastMessage接口向设备发送广播消息,设备侧收到的广播消息样例如下:

图1 广播消息样例