# LowanMqtt Java SDK使用说明
LowanIot 提供 LowanMqtt Java SDK,可帮助开发人员在使用罗万智联平台时实现设备完整的通信链接。
设备通过罗万智联平台上下行通信说明如下:
通信链路 | 说明 |
---|---|
上行通信 | 设备通过MQTT协议与罗万智联平台建立长连接,上报数据(通过subscribe订阅Topic)到罗万智联平台。 |
下行指令 | 罗万智联平台通过MQTT协议,使用publish发送数据(指定Topic和Payload)到设备端。 |
# 1.安装SDK
- 安装Java开发环境
访问Java官方网站 (opens new window),按照说明安装Java开发环境。 - 安装LowanIot 提供 LowanMqtt Java SDK
LowanIot提供lowan-lib-mqtt
jar包,添加到项目本地依赖。
# 2.LowanMqtt 初始化
需要通过MqttConnnOpts类中所提供的静态方法setParams(),入参初始化信息。
// mqtt init
MqttConnOpts.setParams(MQTT_BROKER,MQTT_USER,MQTT_PASSWORD);
参数 | 说明 | 示例 |
---|---|---|
MQTT_BROKER | mqtt连接地址 | tcp://mqtt.lowaniot.com:1883 |
MQTT_USER | mqtt连接用户名 | 例:testmq(可通过罗万智联平台获取) |
MQTT_PASSWORD | mqtt连接密码 | 例:123456(可通过罗万智联平台获取) |
提示
LowanMqtt 初始化是必须的,无论你是推送消息还是订阅消息。
# 3.LowanMqtt 推送消息
需要通过MqttPublisherPool类中提供的静态方法publish(),入参推送主题和推送数据。
// 发布示例:
MqttPublisherPool.publish(topic, data);
参数 | 说明 | 示例 |
---|---|---|
topic | 推送主题([topic]) | 格式:罗万智联平台暂不支持接收数据 |
data | 推送数据 | 推送数据建议使用标准json格式 |
推送示例:
import com.lowan.lib.mqtt.MqttConnOpts;
import com.lowan.lib.mqtt.MqttPublisherPool;
/**
* 功能描述:推送Mqtt数据包实例代码
*/
public class PublishExample {
// broker
private static final String MQTT_BROKER = "tcp://mqtt.lowaniot.com:1883";
// username: 可通过罗万智联平台获取
private static final String MQTT_USER = "${username}";
// password: 可通过罗万智联平台获取
private static final String MQTT_PASSWORD = "${password}";
/** topic: 格式:罗万智联平台暂不支持接收数据 */
private static final String TOPIC = "topic";
/** data: 推送数据建议使用标准json格式 */
private static final String DATA = "{}";
public static void main(String[] args) {
// mqtt init
MqttConnOpts.setParams(MQTT_BROKER,MQTT_USER,MQTT_PASSWORD);
// mqtt publish
if (MqttPublisherPool.publish(TOPIC, DATA)) {
System.out.println("Send data success:" + DATA);
} else {
while (!MqttPublisherPool.publish(TOPIC, DATA)) {
System.out.println("ReSend data faild:" + DATA);
}
System.out.println("ReSend data success:" + DATA);
}
}
}
# 4.LowanMqtt 订阅消息
需要实现接口LowanMqttCallback中抽象方法onMessageArrived,然后可通过接口LowanMqttCallback的实现类和订阅主题得到LowanMqttClient的实例,以此来进行LowanMqttClient的操作。
// 订阅示例:
new LowanMqttClient(topic, (topic, payload) -> {
// onMessageArrived的实现
System.out.println(String.format("Rev Success ->: Topic: %s, Payload: %s", topic, new String(payload)));
}).run();
参数 | 说明 | 示例 |
---|---|---|
topic | 订阅主题,通过罗万智联平台获取 | 格式:/lowaniot/租户编码/应用ID/产品编码 /lowaniot/${tenandCode}/${appid}/${productCode} |
payload | 返回的数据信息,协使用标准的JSON结构,读取时反序列化为结构体即可访问成员 | 示例: { "deviceId": "tx7o4ls2dc", "timestamp": 1638325609198, "messageType": "PROPERTIES", "devAddr": "","messageId":"62eb2255ef2535635b0882d4", "data": { "temperature": 21.6, "humidity": 62.5, "dataItems": {} }} |
注:payload协议数据字段说明
字段名称 | 字段说明 | 备注 |
---|---|---|
devAddr | 字符串类型 | 设备地址 |
deviceId | 字符串类型 | 设备编号 |
messageId | 字符串类型 | 消息ID |
messageType | 字符串类型 | 消息类型 |
timestamp | 整数类型 | 消息产生的时间,单位毫秒 |
data | 字符串类型 | 消息体,标准的JSON结构 |
提示
不同的messageType对应的data是不同的,可参照罗万智联平台物模型;
应用开发->设备管理->查看->物模型
data与messageType对照表
messageType | data | 含义 |
---|---|---|
SHADOW_BROKER_HEART | { "runUpTime": "1638325609198" } | 协议解析模块心跳上报 |
DEV_STATE | { "state": "online" } | 设备在离线上报 |
UPGRADE_PROCESS | { "progress": 50, "complete": false, "version": "000.9 2021-12-17", "errorReason": "固件损坏", "msg": "" } | 升级进度上报 |
DIRECT | { "rawData": "7b226461746574696d65223a307d", "hint": "" } | 数据透传 |
PROPERTIES | { "temperature": 21.6, "humidity": 62.5, "dataItems": {} } | 属性上报-以温湿度传感器为例 |
EVENTS | { "overtemperature": { "temperature": 65 } } | 事件上报-以温湿度传感器为例 |
FUNCTIONS | { "thresholdConfiguration": { "params": { "overtemperature": 48.6, "overhumidity": 23 }, "response": { "success": "true" } } } | 功能执行-以温湿度传感器为例 |
订阅示例:
import com.lowan.lib.mqtt.LowanMqttClient;
import com.lowan.lib.mqtt.MqttConnOpts;
/**
* 功能描述:接收上行数据包实例代码
*/
public class RevExampleNew {
// broker
private static final String MQTT_BROKER = "tcp://mqtt.lowaniot.com:1883";
// username: 可通过罗万智联平台获取
private static final String MQTT_USER = "${username}";
// password: 可通过罗万智联平台获取
private static final String MQTT_PASSWORD = "${password}";
/**
* 订阅罗万智联平台设备信息
* 格式:/lowaniot/租户编码/应用ID/产品编码
*/
private static final String TOPIC = "/lowaniot/${tenandCode}/${appid}/${productCode}";
public static void main(String[] args) {
// mqtt init
MqttConnOpts.setParams(MQTT_BROKER, MQTT_USER, MQTT_PASSWORD);
// mqtt subscribe
new Thread(new Runnable() {
@Override
public void run() {
new LowanMqttClient(TOPIC, (topic, payload) -> {
System.out.println(String.format("Rev Success ->: Topic: %s, Payload: %s", topic, new String(payload)));
}).run();
}
}).start();
}
}
MQ订阅ns下发的指令,订阅规则:/lowaniot/ack/${devEUI}
订阅试例:
{"ackType":0,"devEUI":"00956906000129e7","f_cnt":299,"reference":"","taskId":"241104093631000000"}
# Java SDK Demo
Java SDK提供Demo,供您参考使用。单击查看Java SDK Demo (opens new window)。
← OpenAPI 白蚁终端检测设备接入 →