更新时间:2025-08-28 GMT+08:00

快速接入

本章将使用SmokeDetector Demo指导您快速体验产品模型的创建、Demo的配置与启动、以及SDK基本功能的使用。Demo源码下载SmokeDetector.cs。为了方便体验,提供了一个烟感的产品模型,烟感会上报烟雾值、温度、湿度、烟雾报警以及支持响铃报警命令。以烟感为例,体验消息上报、属性上报等功能。

创建产品

为了方便体验,提供了一个烟感的产品模型,烟感会上报烟雾值、温度、湿度、烟雾报警、还支持响铃报警命令。以烟感为例,体验消息上报、属性上报等功能。

  1. 访问设备接入服务,单击“管理控制台”进入设备接入控制台,选择您的实例,单击实例卡片进入。
  2. 单击左侧导航栏“产品”,单击页面左侧的“创建产品”

    图1 产品-创建产品

  3. 根据页面提示填写参数,然后单击“确定”完成产品的创建。

    基本信息

    所属资源空间

    平台自动将新创建的产品归属在默认资源空间下。如需归属在其他资源空间下,下拉选择所属的资源空间。如无对应的资源空间,请先创建资源空间

    产品名称

    自定义。支持字母、数字、下划线(_)、连字符(-)的字符组合。

    协议类型

    选择“MQTT”

    数据格式

    选择“JSON”

    设备类型选择

    选择”自定义类型”

    设备类型

    填写“smokeDetector”

    高级配置

    产品ID

    不填写

    产品描述

    请根据实际情况填写。

    图2 创建产品-MQTT

上传产品模型

  1. 单击下载烟感产品模型smokeDetector,获取产品模型文件。
  2. 找到创建的产品,单击产品进入产品详情页。
  3. 选择“基本信息”页签,单击“上传模型文件”,上传1获取的产品模型文件。

    图3 产品-上传产品模型

注册设备

  1. 选择左侧导航栏“设备 > 所有设备”,单击“注册设备”
  2. 根据页面提示信息填写参数,然后单击“确定”

    参数名称

    说明

    所属资源空间

    确保和创建的产品归属在同一个资源空间。

    所属产品

    选择创建的产品。

    设备标识码

    即nodeID,设备唯一物理标识。可自定义,由英文字母和数字组成。

    设备名称

    即device_name,可自定义。

    设备认证类型

    选择“密钥”

    密钥

    设备密钥,可自定义。若不填写密钥,物联网平台会自动生成密钥。

    设备注册成功后保存设备标识码、设备ID、密钥。

设备接入

  1. 获取接入地址。可在控制台的“总览 > 接入信息”中查看。

    图4 接入信息-设备侧MQTT接入地址

  2. 将设备侧MQTTS接入地址、设备ID以及设备密钥填入对应位置。

    // 创建一个设备并初始化
    IoTDevice device = new IoTDevice(mContext, "ssl://iot-mqtts.cn-north-4.myhuaweicloud.com:8883", "5eb4cd4049a5ab087d7d4861_demo", "secret");
    device.init();

    设备接入平台时,物联网平台提供密钥和证书两种鉴权方式,如果使用MQTTS,请把下载的bks证书(证书重命名为DigiCertGlobalRootCA.bks)放置到src/main/assets下。

  3. 查看设备运行情况。在控制台的设备详情页面可以查看设备已在线以及设备上报的物模型数据。

    图5 设备列表-设备在线

SDK默认提供断线重连功能,当调用设备初始化后,当由于网络不稳定、网络不可达、平台主动断开连接等,导致连接失败,会在后台自动申请重连。

消息上报

消息上报是指设备向平台上报消息。

  1. iot-device-demo/java/com/huaweicloud/sdk/iot/device/demo/MainActivity.java是一个上报消息例子,可以通过reportDeviceMessage方法将消息上报给平台。
        
            DeviceMessage deviceMessage = new DeviceMessage();
            deviceMessage.setContent("content");
            deviceMessage.setId("id");
            deviceMessage.setName("name");
    
            Device.getDevice().getClient().reportDeviceMessage(deviceMessage);
  2. 在设备接入控制台,选择设备 > 所有设备-查看设备是否在线。
    图6 设备列表-设备在线
  3. 选择对应设备,单击“详情”,在设备详情页面启动设备消息跟踪。
    图7 消息跟踪-启动消息跟踪
  4. 查看消息跟踪,确认平台是否收到设备消息。
    图8 消息跟踪-查看device_sdk_java消息跟踪

    消息跟踪会有一定的延时,如果没有看到数据,请等待后刷新。

属性上报

  1. 属性上报指的是设备将当前属性值上报给平台。代码示例可见iot-device-demo/java/com/huaweicloud/sdk/iot/device/demo/PropertyActivity.java。
     Map<String, Object> properties = new HashMap<String, Object>();
     properties.put("temperature", "28");
    
     ServiceProperty serviceProperty = new ServiceProperty();
     serviceProperty.setServiceId("smokeDetector");
     serviceProperty.setProperties(properties);
    
    //创建属性
     List<ServiceProperty> serviceProperties = new ArrayList<ServiceProperty>();
     serviceProperties.add(serviceProperty);
    //上报属性
    device.getClient().reportProperties(serviceProperties);
  2. 运行PropertyActivity.java,查看上报结果。在左侧导航栏中选择“设备 > 所有设备”,选择对应设备在“设备影子”处可以看到上报的属性值。
    图9 设备影子-temperature

若是没有查看到属性上报值,确认是否已上传产品模型:上传产品模型

命令下发

设置命令监听器用来接收平台下发的命令,在回调接口里,将对命令进行处理,并上报响应。

  1. 下面代码中messageBroadcastReceiver函数作为命令监听器,当命令下发时,会调用该函数,且Action值为IotDeviceIntent.ACTION_IOT_DEVICE_SYS_COMMANDS。
    MessageBroadcastReceiver messageBroadcastReceiver = new MessageBroadcastReceiver();
    LocalBroadcastManager.getInstance(this).registerReceiver(messageBroadcastReceiver, new IntentFilter(IotDeviceIntent.ACTION_IOT_DEVICE_SYS_COMMANDS));
  2. 当device收到命令时将自动调用messageBroadcastReceiver函数,messageBroadcastReceiver函数编写可见iot-device-demo/java/com/huaweicloud/sdk/iot/device/demo/MessageActivity.java。
     private class MessageBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.i(TAG, "onReceive: " + intent.getAction());
            if (IotDeviceIntent.ACTION_IOT_DEVICE_SYS_COMMANDS.equals(intent.getAction())) {
                requestId = intent.getStringExtra(BaseConstant.REQUEST_ID);
                Command command = intent.getParcelableExtra(BaseConstant.SYS_COMMANDS);
                edtLog.append("平台下发的命令为:" + JsonUtil.convertObject2String(command));
            }
        }
    }