网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
认证测试中心 CTC
边缘安全 EdgeSec
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
VR云渲游平台 CVR
Huawei Cloud EulerOS
云化数据中心 CloudDC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
认证测试中心 CTC
边缘安全 EdgeSec
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
价格
成本优化最佳实践
专属云商业逻辑
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
自动驾驶云服务 Octopus
盘古大模型 PanguLargeModels
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
API全生命周期管理 ROMA API
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务

Agent Lite SDK使用指南(Java)(联通用户专用)

更新时间:2025-02-26 GMT+08:00
分享

非联通用户请查看设备接入服务

按照本文档的指导,开发者可以体验直连设备通过集成Agent Lite快速接入平台,体验“数据上报”“命令接收”“添加非直连设备”等功能。

Agent Lite以SDK的形式嵌入第三方软件中。本文档以Agent Lite Java Demo为例,指导开发者使用Agent Lite SDK中的接口,实现“直连设备登录”“数据上报”“命令下发”等功能。

  • 开发者可以基于Agent Lite Java Demo开发,也可参考Agent Lite Java Demo,自行集成Agent Lite SDK(Java)。
  • Agent Lite java Demo使用的IDE工具为Eclipse

使用必读

开发环境要求

使用的SDK版本为jdk1.8.0_45,适用的操作系统为Windows系统。

工程目录结构及文件说明:

目录结构

目录

说明

AgentLiteDemo

├─src

│ └─com

│ └─huawei

│ └─agentlitedemo

├─libs

│ └─agentlite-0.0.1-SNAPSHOT

│ └─usp_agentlite.jar

│ └─.dll

└─workdir

│ └─conf

src

存放Agentlite Demo代码。

libs

存放Agentlite提供的jar包和第三方jar包,以及.dll动态库(工程必须的三个文件,“agentlite-0.0.1-SNAPSHOT”“usp_agentlite.jar”“.dll”文件)。

workdir

存放工程日志文件,由agentlite初始化资源设置。

conf

存放TLS证书文件。

说明:

如果开发者没有设备,可以直接在X86 Linux系统进行开发。

导入代码样例

  1. 将Agent Lite Demo(Java)解压到本地。

  2. 导入AgentLiteDemo工程。

    • 打开Eclipse,单击File > Import进入导入现有工程界面。
    • 选择General > Existing Projects into Workspace ,点击“Next”

    • 点击“Browse”,选择AgentLiteDemo解压后的路径,点击“Finish”

初始化

在发起业务前,需要先初始化Agent Lite相关资源,调用API接口BaseService.init(),初始化Agent Lite资源,具体API的参数使用参考Agent Lite API接口文档。

调用BaseService.init(String workPath, String logPath)初始化AgentLite资源。

1
res = BaseService.init("./workdir", null);

绑定和登录

设备或网关第一次接入物联网平台时需要进行绑定操作,从而将设备或网关与平台进行关联。开发者通过传入设备验证码以及设备信息,将设备或网关绑定到物联网平台。

  1. 修改绑定参数。

    绑定时使用的设备固有信息(如设备型号等)是从“AgentLiteBind.java”文件中读取的,所以需要修改./src/main目录下“AgentLiteBind.java”文件中的如下信息:

    物联网平台的设备对接地址(MQTTS)和端口,可参考平台对接信息获取。

    1
    2
    3
    //设置配置参数
    private static final String  PLATFORM_IP = "100.100.100.100";
    private static final String  HTTPS_PORT = "8943";
    
    “verifyCode”(设备验证码)和必要的设备信息,包括“nodeId”(设备标识码)、“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)。“verifyCode”的值与“nodeId”保持一致,“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)与Profile文件中的定义保持一致。
    说明:
    • 如果开发者通过“设备管理服务控制台”注册设备,则“verifyCode”填写为设备注册时的“preSecret”(预置密钥)。
    • 如果通过开发中心注册设备,则“verifyCode”填写为设备注册时设置的“nodeId”(设备标识)。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    public void bindAction() {
    	System.out.println(" =============   start  bind ============== ");
    	String nodeId = "1234568";
    	String verifyCode = "1234568";
    	String manufactrueId = "Huawei";
    	String deviceType = "Gateway";
    	String model = "AgentLite01";
    	String protocolType = "LWM2M";
    	deviceInfo = new IotaDeviceInfo(nodeId, manufactrueId, deviceType, model, protocolType);
            ...
    }
    

  2. 绑定设备。

    注册观察者对设备绑定结果进行相应处理。

    1
    2
    3
    4
    5
    6
    //注册观察者
    AgentLiteBind agentLiteBind = AgentLiteBind.getInstance();
    BindService bindService = BindService.getInstance();
    bindService.registerObserver(agentLiteBind);
    //网关绑定
    agentLiteBind.bindAction();
    

    调用API接口BindConfig.setConfig()设置绑定配置,接着调用API接口BindService .bind(String verifyCode, IotaDeviceInfo deviceInfo)绑定设备。

    1
    2
    3
    4
    5
    6
    7
    8
    public void bindAction() {
        System.out.println(" =============   start  bind ============== ");
        ...
        //绑定配置
        configBindPara();
        //发起绑定请求
        BindService.bind(verifyCode, deviceInfo);
    }
    
    1
    2
    3
    4
    5
    6
    7
    //绑定配置
    private static void configBindPara() {
    	boolean res = false;
    	res = BindConfig.setConfig(BindConfig.BIND_CONFIG_ADDR, PLATFORM_IP);
    	res = BindConfig.setConfig(BindConfig.BIND_CONFIG_PORT, HTTPS_PORT);
    	...		
    }
    

    设备或网关绑定成功,后续就不需要再绑定了,除非设备或网关被删除,才需要重新绑定。

    设备绑定成功会收到BindService发出的通知,通知内容请参考Agent Lite API接口文档中设备绑定接口的返回结果说明和demo中update函数的处理。

  3. 修改登录参数。

    在demo的./src/main/AgentLiteLogin.java设置物联网平台的接入IP与端口。

    1
    2
    3
    private static final String  PLATFORM_IP = "100.100.100.100";
    private static final String  MQTTS_PORT = "8883";
    private static final String  HTTPS_PORT = "8943";
    

  4. 设备登录。

    注册观察者对设备登录结果进行相应处理。

    1
    2
    3
    4
    5
    6
    //注册观察者
    AgentLiteLogin agentLiteLogin = AgentLiteLogin.getInstance();
    LoginService loginService = LoginService.getInstance();
    loginService.registerObserver(agentLiteLogin);
    //网关登录
    agentLiteLogin.loginAction();
    

    调用API接口LoginConfig.setConfig()传入所需的登录信息,接着调用API接口LoginService.login()进行直连设备登录,具体API的参数使用参考Agent Lite接口文档中的设备登录接口说明。

    • “设备Id”(即网关Id, “LOGIN_CONFIG_DEVICEID”),“appId”“LOGIN_CONFIG_APPID”)和“密码”“LOGIN_CONFIG_SECRET”),这些信息是都是从网关绑定成功的通知中得到的。
    • “平台HTTP地址”“LOGIN_CONFIG_IOCM_ADDR”)和“MQTT地址”“LOGIN_CONFIG_MQTT_ADDR”)一般是同一个地址。
    1
    2
    3
    4
    5
    public void loginAction() {
        System.out.println(" =============   start  login ============== ");
        configLoginPara();
        LoginService.login();		
    }
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    private static void configLoginPara() {
        if(AgentLiteUtil.isStringEmpty(GatewayInfo.getDeviceID())
                    || AgentLiteUtil.isStringEmpty(GatewayInfo.getAppID())
                    || AgentLiteUtil.isStringEmpty(GatewayInfo.getSecret())){
            String jsonStr = AgentLiteUtil.readToString("./workdir/gwbindinfo.json");
            JsonObject json = new Gson().fromJson(jsonStr, JsonObject.class);
            GatewayInfo.setDeviceID(json.get("deviceId").getAsString());
            GatewayInfo.setAppID(json.get("appId").getAsString());
            GatewayInfo.setSecret(json.get("deviceSecret").getAsString());
        }
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_DEVICEID,  GatewayInfo.getDeviceID());
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_APPID, GatewayInfo.getAppID());
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_SECRET, GatewayInfo.getSecret());
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_IOCM_ADDR, PLATFORM_IP);
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_IOCM_PORT, HTTPS_PORT);
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_MQTT_ADDR, PLATFORM_IP);
        LoginConfig.setConfig(LoginConfig.LOGIN_CONFIG_MQTT_PORT, MQTTS_PORT);
    }
    

上传Profile并注册设备

下载Profile开发示例,并上传模板中的profile文件:“Gateway_Huawei_AgentLite01.zip”“Motion_Huawei_test01.zip”

  1. 登录开发中心,创建一个项目,在该项目空间内,选择产品 > 产品开发,点击“新建产品”

  2. “创建产品”中,选择“本地导入产品创建”,单击“上传Profile”上传“Gateway_Huawei_AgentLite01.zip”“Motion_Huawei_test01.zip”

  3. 选择产品 > 设备管理,单击“添加真实设备”,进入“新建增实设备”页面。

  4. 根据向导注册设备。

    1. 选择产品。

      产品:AgentLite001

    2. 填写设备相关信息,单击“确定”
      • 设备名称:AgentLiteDevice
      • 设备标识:aaa123456,需要与AgentLiteDemo中网关的设备标识一致。
      • 接入方式:网关(Agentlite)

  5. 注册设备后,Agent Lite SDK发送bind消息,则在开发中心的产品 > 设备管理 > 设备列表界面可以看到设备状态变成“在线”

    如果demo日志中出现“Iota_BindDestroy”,说明Agent Lite SDK多次发送bind消息,并且没有收到正确响应,设备绑定已超时。这时需要再次运行“sdk.out”程序(先用“ctrl+c”退出,再用“./sdk.out”运行程序),Agent Lite SDK就会再发起bind消息。平台收到正确的bind消息后设备就会变成“在线”状态。

数据上报和数据发布

设备或网关向物联网平台上报数据可以通过调用SDK的“设备服务数据上报”接口或“数据发布”接口:

  • “设备服务数据上报”接口:deviceId,requstId和serviceId由SDK组装为消息的header;serviceProperties由SDK组装为消息的body。消息组装格式为JSON。

    注册观察者对网关数据上报结果进行相应处理。

    1
    2
    3
    4
    5
    6
    //注册观察者
    AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();
    DataTransService dataTransService = DataTransService.getInstance();
    dataTransService.registerObserver(agentLiteDataTrans);
    //数据上报
    agentLiteDataTrans.gwDataReport();
    

    设备或网关登录成功后可以调用DataTransService.dataReport(int cookie, String requstId, String deviceId, String serviceId, String serviceProperties)接口上报数据。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    public void gwDataReport() {
        System.out.println(" =============   gwDataReport! ============== ");
        int cookie;
        Random random = new Random();
        cookie = random.nextInt(65535);
    
        String deviceId = GatewayInfo.getDeviceID();
    
        JsonObject data = new JsonObject();
        data.addProperty("storage", "10240");
        data.addProperty("usedPercent", "20");
        DataTransService.dataReport(cookie, null, deviceId, "Storage", data.toString());
    }
    

    数据上报成功后可以在设备的“历史数据” 中看到上报的数据了。

  • “数据发布”接口:topic固定为“/cloud/signaltrans/v2/categories/data”“serviceData”参数作为消息体(包括header和body),SDK只进行透传,不进行格式调整和组装。

    注册观察者对网关数据上报结果进行相应处理。

    1
    2
    3
    4
    5
    6
    //注册观察者
    AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();
    DataTransService dataTransService = DataTransService.getInstance();
    dataTransService.registerObserver(agentLiteDataTrans);
    //数据发布
    agentLiteDataTrans.gwDataReportByMqttDataPub();
    

    设备或网关登录成功后可以调用DataTransService. mqttDataPub(int cookie, String topic, int qos, byte[] serviceData)接口发布数据。

    • “topic”是要发布数据的topic。
    • “qos”是mqtt协议的一个参数。
    • “serviceData”实际上是一个json字符串,内容是健值对(可以有多组健值对)。每个健是profile中定义的属性名(propertyName),值就是具体要上报的内容了。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public void gwDataReportByMqttDataPub() {
        System.out.println(" =============   gwDataReportByMqttDataPub! ============== ");
        int cookie;
        Random random = new Random();
        cookie = random.nextInt(65535);
    
        String deviceId = GatewayInfo.getDeviceID();
    
        JsonObject headerData = new JsonObject();
        headerData.addProperty("method", "PUT");
        String fromStr = "/device/"+deviceId+"/services/Storage";
        String toStr = "/data/v1.1.0/devices/"+deviceId+"/services/Storage";
        headerData.addProperty("from", fromStr);
        headerData.addProperty("to", toStr);
    
        headerData.addProperty("access_token", GatewayInfo.getAccessToken());
    
        SimpleDateFormat df = new SimpleDateFormat(MSG_TIMESTAMP_FORMAT);
        df.setTimeZone(TimeZone.getTimeZone("UTC"));
        String curTime = df.format(new Date(System.currentTimeMillis()));
        headerData.addProperty("timestamp", curTime);
        headerData.addProperty("eventTime", curTime);
    
        JsonObject bodyData = new JsonObject();
        bodyData.addProperty("storage", "10240");
        bodyData.addProperty("usedPercent", "18");
    
        JsonObject mqttMsg = new JsonObject();
        mqttMsg.add("header", headerData);
        mqttMsg.add("body", bodyData);
    
        DataTransService.mqttDataPub(cookie, "/cloud/signaltrans/v2/categories/data", 1, mqttMsg.toString().getBytes());
    }
    

命令接收

当开发者希望设备或网关只接收topic为“/gws/deviceid/signaltrans/v2/categories/”的消息,且对消息中的header进行解析时,可以调用“设备命令接收”接口。

应用服务器可以调用物联网平台的应用侧API接口给设备或网关下发命令,所以网关得随时监听命令下发的广播,以便接收到命令时进行相应业务处理。

注册观察者对命令接收进行相应处理。

1
2
3
4
5
6
//注册观察者
AgentLiteDataTrans agentLiteDataTrans = AgentLiteDataTrans.getInstance();
DataTransService dataTransService = DataTransService.getInstance();
dataTransService.registerObserver(agentLiteDataTrans);
//命令接收
agentLiteDataTrans.getCmdReceive();

被动接收命令的方法getCmdReceive

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
private void getCmdReceive(IotaMessage iotaMsg) {
    System.out.println("=========receive iotCMD ============");
    String deviceId = iotaMsg.getString(DataTransService.DATATRANS_IE_DEVICEID);
    String requestId = iotaMsg.getString(DataTransService.DATATRANS_IE_REQUSTID);
    String serviceId = iotaMsg.getString(DataTransService.DATATRANS_IE_SERVICEID);
    String method = iotaMsg.getString(DataTransService.DATATRANS_IE_METHOD);
    String cmd = iotaMsg.getString(DataTransService.DATATRANS_IE_CMDCONTENT);
    if (method.equals("REMOVE_GATEWAY")) {
        //rmvGateway(context);
    }
    System.out.println ("Receive cmd :"
                    + "ndeviceId  = " + deviceId
                    + "nrequestId = " + requestId
                    + "nserviceId = " + serviceId
                    + "nmethod    = " + method
                    + "ncmd       = " + cmd);
}

添加非直连设备

在添加非直连设备前,确认非直连设备的profile已经上传了,详见上传Profile并注册设备步骤。

修改非直连设备信息,包括“nodeId”(设备标识码)、“manufactureId”(厂商Id)、“deviceType”(设备类型)、“model”(设备模型)和“protocolType”(协议类型)。这里非直连设备的设备固有信息是测试数据,真实情况下,网关往往需要跟具体的非直连设备交互,才能得到具体的设备固有信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public void addSensor() {
    System.out.println(" ============= addSensor! ============== ");
    int cookie;
    Random random = new Random();
    cookie = random.nextInt(65535);

    String nodeId = "5432154321";
    String manufatrueId = "Huawei";
    String deviceType = "Motion";
    String model = "test01";
    String protocolType = "MQTT";
    deviceInfo = new IotaDeviceInfo(nodeId, manufatrueId, deviceType, model, protocolType);
    ...
}

注册观察者对添加设备结果进行相应处理。

1
2
3
4
5
6
//注册观察者
AgentLiteHub agentLiteHub = AgentLiteHub.getInstance();
HubService hubService = HubService.getInstance();
hubService.registerObserver(agentLiteHub);
//sensor添加
agentLiteHub.addSensor();

在设备或网关登录成功后就可以调用HubService.addDevice(int cookie, IotaDeviceInfo deviceInfo)接口添加非直连设备。添加非直连设备成功后就能从广播中得到非直连设备的“deviceId”

1
2
3
4
5
6
7
8
public void addSensor() {
    System.out.println(" ============= addSensor! ============== ");
    int cookie;
    Random random = new Random();
    cookie = random.nextInt(65535);
    ...
    HubService.addDevice(cookie, deviceInfo);
}

非直连设备添加成功后在“设备列表”中看到新增一条记录。

非直连设备状态更新

注册观察者对非直连设备状态更新结果进行相应处理。

1
2
3
4
5
6
//注册观察者
AgentLiteHub agentLiteHub = AgentLiteHub.getInstance();
HubService hubService = HubService.getInstance();
hubService.registerObserver(agentLiteHub);
//sensor状态更新
agentLiteHub.updataDeviceStatus();

非直连设备添加上时,一般情况下是“离线”状态。所以在非直连设备添加成功后,或者在非直连设备上报数据前,要调用HubService.updateDeviceStatus(int cookie, String deviceId, String status, String statusDetail)进行设备状态更新。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public void updataDeviceStatus() {
	System.out.println(" =============  updataDeviceStatus  ============== ");
    int cookie;
    Random random = new Random();
    cookie = random.nextInt(65535);
    String sensorId = GatewayInfo.getSensorId();
    System.out.println("cookie = " + cookie);
    System.out.println("sensorId = " + sensorId);

    HubService.updateDeviceStatus(cookie, sensorId, "ONLINE", "NONE");
}

非直连设备数据上报

请参考数据上报和数据发布章节,调用DataTransService.dataReportDataTransService. mqttDataPub接口进行数据上报,各个参数使用非直连设备的相关数据即可,此处不再复述。

设备数据上报成功后,可以在非直连设备的“历史数据”中查看上报的数据。

提示

您即将访问非华为云网站,请注意账号财产安全

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容