Skip to content

Latest commit

 

History

History
executable file
·
204 lines (183 loc) · 9.33 KB

控制设备上下线.md

File metadata and controls

executable file
·
204 lines (183 loc) · 9.33 KB

快速开始

本文将介绍如何在腾讯云物联网开发平台控制台(以下简称控制台)创建设备, 并结合 SDK Demo 快速体验设备端通过 MQTT 协议连接腾讯云端,以及断开 MQTT 连接使设备下线。

控制台创建设备

设备接入SDK前需要在控制台中创建项目产品设备,并获取产品ID、设备名称、设备证书(证书认证)、设备私钥(证书认证)、设备密钥(密钥认证),设备与云端认证连接时需要用到以上信息。请参考官网 用户指南-项目管理用户指南-产品定义用户指南-设备调试

编译运行示例程序

下载IoT Explorer Android-SDK Demo示例代码

填写认证连接设备的参数

编辑 app-config.json 文件中的参数配置信息

{
  "PRODUCT_ID":        "",
  "DEVICE_NAME":       "",
  "DEVICE_PSK":        "",
  "SUB_PRODUCT_ID":    "",
  "SUB_DEV_NAME":      "",
  "SUB_DEV_PSK":       "",
  "SUB_PRODUCT_ID2":   "",
  "SUB_DEV_NAME2":     "",
  "SUB_DEV_PSK2":      ""
}

如果控制台创建设备使用的是密钥认证方式,需要在 app-config.json 填写 PRODUCT_ID(产品ID)、DEVICE_NAME(设备名称)、DEVICE_PSK(设备密钥),示例中使用的是密钥认证。

如果控制台创建设备使用的是证书认证方式,除了需要在 app-config.json 填写 PRODUCT_ID(产品ID)、DEVICE_NAME(设备名称),DEVICE_PSK(设备密钥)设置为null,还需修改 DataTemplateSample 初始化方法为

public DataTemplateSample(Context context, String brokerURL, String productId, String devName, String devPSK, String devCertName, String devKeyName, TXMqttActionCallBack mqttActionCallBack, final String jsonFileName,TXDataTemplateDownStreamCallBack downStreamCallBack)

通过 AssetManager 进行读取证书,在工程 explorer/device-android-demo/src/main 路径下创建 assets 目录并将设备证书、私钥放置在该目录中,在 DataTemplateSample 初始化时传入 devCertName(设备证书文件名称)devKeyName(设备私钥文件名称)。

控制台上创建的每一个产品都可以设置该产品对应的数据模板,数据模板对应的功能包含三大类:属性,事件和行为。控制台数据模板的使用,请参考官网 数据模板 章节。

示例中的设备需要将控制台上下载的json文件导入工程中,用来规范上报属性、事件时数据的校验,请将json文件放到 assets 目录中,设置 mJsonFileName(json文件名称)。

运行示例程序进行 MQTT 认证连接使设备上线

选择explorer-demo的 Android App ,点击 Android Studio 菜单栏上的 Run 'explorer-demo' 按钮安装 Demo。

运行示例程序,在数据模板模块上点击设备上线按钮,进行认证连接,使设备上线。示例代码如下:

mDataTemplateSample = new DataTemplateSample(mParent, mBrokerURL, mProductID, mDevName, mDevPSK, new SelfMqttActionCallBack(), mJsonFileName, new SelfDownStreamCallBack());
mDataTemplateSample.connect(); // MQTT连接

观察Logcat日志。

I/TXMQTT_1.2.3: Start connecting to ssl://LWVUL5SZ2L.iotcloud.tencentdevices.com:8883
I/TXDataTemplateFragment: onConnectCompleted, status[OK], reconnect[false], userContext[MQTTRequest{requestType='connect', requestId=0}], msg[connected to ssl://LWVUL5SZ2L.iotcloud.tencentdevices.com:8883]

以上是设备通过MQTT成功连接至云端的日志,在控制台可查看该设备的状态已更新为在线。

TXMqttActionCallBack为设备行为的回调

/**
 * MQTT Connect完成回调
 *
 * @param status        Status.OK: 连接成功; Status.ERROR: 连接失败
 * @param reconnect     true: 重新连接      false: 首次连接
 * @param userContext   用户上下文
 * @param msg           连接信息
 */
@Override
public void onConnectCompleted(Status status, boolean reconnect, Object userContext, String msg){}
/**
 * MQTT连接断开回调
 *
 * @param cause       连接断开原因
 */
@Override
public void onConnectionLost(Throwable cause) {}
/**
 * MQTT Disconnect完成回调
 *
 * @param status      Status.OK: 断连成功; Status.ERROR: 断连失败
 * @param userContext 用户上下文
 * @param msg         详细信息
 */
@Override
public void onDisconnectCompleted(Status status, Object userContext, String msg) {}
/**
 * 发布消息完成回调
 *
 * @param status      Status.OK: 发布消息成功; Status.ERROR: 发布消息失败
 * @param token       消息token,包含消息内容结构体
 * @param userContext 用户上下文
 * @param msg         详细信息
 */
@Override
public void onPublishCompleted(Status status, IMqttToken token, Object userContext, String errMsg) {}
/**
 * 订阅主题完成回调
 *
 * @param status      Status.OK: 订阅成功; Status.ERROR: 订阅失败
 * @param token       消息token,包含消息内容结构体
 * @param userContext 用户上下文
 * @param msg        详细信息
 */
@Override
public void onSubscribeCompleted(Status status, IMqttToken asyncActionToken, Object userContext, String errMsg) {}
/**
 * 取消订阅主题完成回调
 *
 * @param status      Status.OK: 取消订阅成功; Status.ERROR: 取消订阅失败
 * @param token       消息token,包含消息内容结构体
 * @param userContext 用户上下文
 * @param msg         详细信息
 */
@Override
public void onUnSubscribeCompleted(Status status, IMqttToken asyncActionToken, Object userContext, String errMsg) {}
/**
 * 收到订阅主题的消息Push
 *
 * @param topic        主题名称
 * @param message      消息内容
 */
@Override
public void onMessageReceived(final String topic, final MqttMessage message) {}

TXDataTemplateDownStreamCallBack为下行消息处理的回调,收到以下回调的前提是在设备上线后订阅过相关的数据模板的topic,可参考 订阅与取消订阅 Topic 主题

/**
 * 属性上报、设备信息上报、清除控制、事件上报、多事件上报的回复回调
 *
 * @param replyMsg       属性上报、设备信息上报、清除控制、事件上报、多事件上报的回复信息
 */
@Override
public void onReplyCallBack(String replyMsg) {}
/**
 * 获取设备最新上报信息的回复回调
 *
 * @param data           获取设备最新上报信息的回复信息
 */
@Override
public void onGetStatusReplyCallBack(JSONObject data) {}
/**
 * 收到云端属性下发的控制信息回调
 *
 * @param msg            收到云端属性下发的控制信息 
 * @return               包含code(回复码)和status(回复信息)的JSONObject,用来回复属性下发控制消息。
 */
@Override
public JSONObject onControlCallBack(JSONObject msg) {}
/**
 * 收到云端向设备下发的行为信息回调
 *
 * @param msg            收到云端向设备下发的行为信息 
 * @return               包含code(回复码)和status(回复信息)的JSONObject,用来回复下发的行为消息。
 */
@Override
public JSONObject onActionCallBack(String actionId, JSONObject params){}
/**
 * 用户在腾讯连连小程序或腾讯连连App删除设备时由云端发送给设备的通知消息,便于设备重置或网关类设备清除子设备数据。
 *
 * @param msg        用户在腾讯连连小程序或腾讯连连App删除设备时由云端发送给设备的通知消息
 */
@Override
public void onUnbindDeviceCallBack(String msg) {}
/**
 * 用户在腾讯连连小程序或腾讯连连App绑定设备时由云端发送给设备的通知消息,设备接收后可根据业务需求自行处理
 *
 * @param msg        用户在腾讯连连小程序或腾讯连连App绑定设备时由云端发送给设备的通知消息
 */
@Override
public void onBindDeviceCallBack(String msg) {}

可通过getConnectStatus()API获取设备连接状态

enum ConnectStatus {
    kConnectIdle,  //初始状态
    kConnecting,   // 连接中
    kConnected,    // 连接上/上线
    kConnectFailed,// 连接失败
    kDisconnected  // 已断开连接
}

设备下线

运行示例程序,当设备已上线,在数据模板模块上点击设备下线按钮,使设备断开 MQTT 认证连接,设备下线。示例代码如下:

mDataTemplateSample.disconnect(); // 断开 MQTT 连接,

观察Logcat日志。

I/TXDataTemplateFragment: onDisconnectCompleted, status[OK], userContext[MQTTRequest{requestType='disconnect', requestId=1}], msg[disconnected to ssl://LWVUL5SZ2L.iotcloud.tencentdevices.com:8883]

以上是设备成功断开MQTT连接的日志,在控制台可查看该设备的状态已更新为离线。