华为云OceanConnect物联网平台客户端

华为云物联网平台(简称物联网平台)提供海量设备的接入和管理,配合华为云其他产品同时使用,帮助快速构筑物联网应用。

使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。

详情请参考 https://support.huaweicloud.com/iothub/index.html

OceanConnect 支持多种方式接入,包括MQTT, LWM2M等等, 钛极OS(TiJOS)对MQTT进行了封装方便用户使用, LWM2M用户基于标准LWM2M接口使用即可。

Java包

tijos.framework.networkcenter.huawei

MQTT客户端 - OceanConnect类

OceanConnect类中包含了OceanConnect MQTT客户端相关的操作,支持OceanConnect提供的各种设备能力, OceanConnect通过服务和属性构成的产品模型描述设备,在设备接入前需要先在OceanConnect平台中建立相应的产品模型,以及对应的设备等等信息, 并获得产品和设备的名称及认证信息, 具体请参考相关的帮助文档。

基础方法

方法 说明
void connect(String deviceId, String secret, OceanConnectEventHandler eventHandler) 连接物联网平台, 参数分别为:设备ID,设备密钥及事件回调
void disconnect() 断开连接并释放

设备影子相关方法

方法 说明
void reportProperties(ServiceProperty... properties) 设备属性上报,properties为指定服务的属性值, 支持一次上报多个服务属性
void respondCommand(String requestId, CommandRsp commandRsp) 云端命令响应回复, requestId: 对应的请求id, commandRsp命令回复结果及对应产品模型中的属性值。

AbstractOceanConnectEventHandler 事件监听

AbstractOceanConnectEventHandler 提供了产品模型相关事件处理接口, 不应在事件中进行长时间的处理从而阻塞其它事件 | 方法 | 说明 | | ---------------------------------------- | ---------- | | void onPropertiesSet(String requestId, PropsSet propsSet); | 收到云端属性控制指令 | | void onCommand(String requestId, Command command); | 收到云端同步命令 |

使用说明

在开发之间请先在平台上建立相应的产品及模型

调用流程如下

...
//设备ID 由平台生成
String deviceId = "5fd3232ccbfe2f02ce6d4d42_867435057486946";
//设备密钥 由用户设置或平台生成
String secret ="867435057486946";

// 启动并连接云平台
OceanConnect oc = new OceanConnect();
oc.connect(deviceId, secret, new MyEventHandler(oc));

//模型中的服务属性上报
//服务名称
ServiceProperty sp = new ServiceProperty("Connectivity"); 
//属性名称及对应的值
sp.setProperty("rssi", TiLTE.getInstance().getRSSI());
sp.setProperty("cellId", TiLTE.getInstance().getCellInfo().getCI());
//时间戳
sp.setEventTime(System.currentTimeMillis()); 

//上报服务属性
oc.reportProperties(sp);


...

事件回调,物模型相关事件通过AbstractOceanConnectEventHandler 事件监听器回调进行处理

class MyEventHandler extends AbstractOceanConnectEventHandler  {
....
    //收到云端命令
@Override
    public void onCommand(String requestId, Command command) {
        System.out.println("onCommand " + requestId);   

       //回复命令执行结果 
        CommandRsp rsp = new CommandRsp(CommandRsp.SUCCESS);
        try {
            oc.respondCommand(requestId, rsp);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }

    //收到云端属性配置请求
    @Override
    public void onPropertiesSet(String requestId, PropsSet propsSet) {
        System.out.println("onPropertiesSet");  

        //回复发生配置执行结果 
        try {
            oc.respondPropsSet(requestId, IotResult.SUCCESS);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    ....
}